Meny
Är gratis
registrering
Hem  /  Multimedia/ Vad är dataöverföring med get-metoden. Åtgärdsattribut och metod

Vad är get-metoden dataöverföring. Åtgärdsattribut och metod

Det finns två begrepp som är gemensamma för nästan alla program – bearbetning av indata och utmatning av resultat. På den här sidan kommer vi att fokusera på att hantera inmatningen av CGI-program. För det första, var kommer indata ifrån, och för det andra, hur skickas indata till servern. För att skriva effektiva CGI-program måste du ha en klar förståelse för dessa saker.

Lite om HTTP

Servern accepterar tre typer av förfrågningar: GET, POST och HEAD. Programförfrågan till webbservern ser ut så här:

Hämta /index.html HTTP / 1.0

Den första delen, i det här fallet GET, är förfrågningsmetoden, den andra, index.html, är den begärda URL:en och den tredje, HTTP / 1.0, är ​​protokollet som används av klienten.

De två huvudsakliga förfrågningsmetoderna är GET och POST. Det här är samma metoder som är tillgängliga för dig när du skapar ett formulär. HEAD-metoden används sällan av webbläsaren eftersom den bara begär svarshuvudet och svarstexten skickas inte i detta fall. För att till exempel kontrollera om sidan har ändrats kan webbläsaren fråga efter en rubrik, men detta genererar inte ett fullständigt datautbyte.

GET-metoden

Som standard använder begäran metoden GET. POST-metoden används endast när den uttryckligen anges i formulärförfrågan. Det är mycket viktigt för en CGI-programmerare att förstå att när en GET-begäran görs skickas formulärdata till servern tillsammans med URL:en. Webbservrar som stöder CGI kopierar dessa data till miljöfaktor heter QUERY_STRING. Därefter ansvarar CGI-programmet för att hämta data från miljövariabeln och bearbeta den.

URL:en med frågesträngen ser ut så här:

Http://www.domen-name.com/login.pl?nick=maks&psw=parol

Skylt? separerar frågesträngen från resursens faktiska URL; nick och psw är variabler som skickas till servern, maks och parol är deras värden.

POST-metoden

POST-metoden används när den uttryckligen anges i formulärets METHOD-attribut. Till skillnad från GET-metoden placerar POST inte data i URL:en utan i förfrågans brödtext. En POST-begäran är mycket som ett HTTP-svar. Den första raden är en standard HTTP-begäran som anger POST-metoden. Den kan innehålla de nödvändiga ytterligare rubrikerna, separerade från förfrågningskroppen med en tom rad.

När POST-metoden används skickas förfrågningstexten till programmet som standardinmatning.

Välj mellan GET och POST

Det är uppenbart att när man utvecklar formulär kommer en CGI-programmerare att ställas inför frågan om vilken av dessa metoder som ska användas. I de flesta fall kommer båda metoderna att fungera och båda kommer att fungera bra. Det finns dock situationer då användningen av en eller annan metod ger vissa fördelar.

Låt oss titta på några situationer där det är vettigt att föredra GET- eller POST-metoden.

  • Om du vill att ditt program ska anropas genom referens bör GET-metoden föredras.
  • Om du inte vill att argumenten som skickas till ditt program ska skrivas till serverloggfilen, använd POST-metoden. Till exempel, om ett formulär kräver ett användarnamn och lösenord, vill du förmodligen inte att namnen och lösenorden ska sparas i rapportfilen. Det är inte heller klokt att skicka lösenordet som en del av URL:en.
  • Om ditt formulär har betydande dimensioner, till exempel har det textrutor med anteckningar och kommentarer, bör du använda POST-metoden. Generellt sett kan du använda GET-metoden också i det här fallet, men då kan du stöta på begränsningar av URL-storlek som är olika för olika operativsystem och webbläsare (begränsad av storleken på miljövariabler). Det är lättare att använda POST-metoden.
  • Om ditt formulär innehåller ett filfält, använd POST-metoden. Dessutom måste du i det här fallet ställa in värdet på ENCTYPE-attributet till multipart / form-data.

GET metoder och POST till HTTP och HTTPS är två av de mest populära metoderna som används för att överföra data från en klient till en server med hjälp av HTTP-protokollet (Hypertext Transfer Protocol). Både GET och POST kan användas för att skicka en förfrågan och ta emot ett svar, men det finns en betydande skillnad mellan de två.

Skillnaden mellan GET- och POST-förfrågningar i HTTP eller HTTPS är en populär fråga i varje webbprogrammeringsintervju. Eftersom HTML är oberoende av webbserverteknologi som Java, ASP eller PHP och HTTP är huvudprotokollet i internetutrymmet, kan vikten av att förstå GET- och POST-metoderna inte tydligt ignoreras. I den här artikeln kommer vi att titta på vad en HTTP GET-metod är, vad en HTTP POST-metod är, när man ska använda en viss begäran och vad som är skillnaden mellan dem. Låt oss analysera varje koncept separat.

Vad är HTML?

HTML är det språk som används för att skapa webbsidor. Hypertext hänvisar till hyperlänkar som en HTML-sida kan innehålla. Markup language hänvisar till det sätt på vilket taggar används för att definiera layouten på sidan och elementen på sidan.
Nedan är HTML-exempel som används för att definiera en grundläggande webbsida med en rubrik och ett stycke text:



<Голова>
<Название>TechTerms.com

<Тело>

Detta är ett exempel på ett stycke i HTML.

Den första raden definierar typen av innehåll som finns i dokumentet., och som alla ingår i exemplet ovan. Sidrubrik, metadata och länkar till ankarfil placeras mellan Faktiskt sidinnehåll är mellan taggar .

Webben har genomgått många förändringar under de senaste decennierna, men HTML har alltid varit det primära språket som används för att utveckla webbsidor. Intressant nog, medan webbplatser har blivit mer avancerade och interaktiva, har HTML blivit enklare. Om du jämför källan till en HTML5-sida med en liknande sida skriven i HTML 4.01 eller XHTML 1.0, blir det mindre kod på HTML5-sidan. Detta beror på att modern HTML förlitar sig på Cascading Style Sheets eller JavaScript för att formatera nästan alla element på en sida.

Många dynamiska webbplatser genererar webbsidor i farten med hjälp av ett skriptspråk på serversidan som PHP eller ASP. Men även dynamiska sidor måste formateras med HTML. Därför genererar skriptspråk ofta HTML som skickas till webbläsaren.

Hypertext Transfer Protocol (HTTP) är designad för kommunikation mellan klienter och servrar och fungerar som ett begäran-svar-protokoll.

Webbläsaren kan vara klienten och applikationen på datorn som är värd för webbplatsen kan vara servern.

Klienten (webbläsaren) skickar en HTTP-begäran till servern, servern returnerar ett svar som innehåller information om status för begäran och kan även innehålla det begärda innehållet.

Två förfrågningsmetoder GET och POST

Två vanliga metoder för begäran-svar mellan klient och server:

    GET - begär data från den specificerade resursen;

    POST - Skickar data som ska bearbetas till den angivna resursen.

Att översätta GET och POST betyder bokstavligen hämta och efterbearbeta.

Mer om HTTP

HTTP är det protokoll som används för att överföra data över Internet. Det är en del av Internet Protocol-paketet och definierar de kommandon och tjänster som används för att överföra data till en webbsida.

HTTP använder server-klient-modellen. Klienten kan vara en hemdator, bärbar dator eller mobilenhet... HTTP-servern är vanligtvis ett webbhotell med programvara en webbserver som Apache eller IIS. När en användare går in på en webbplats skickar webbläsaren en förfrågan till lämplig webbserver och svarar med en HTTP-statuskod. Om URL:en är giltig och anslutningen tillhandahålls kommer servern att skicka webbsidan och tillhörande filer till webbläsaren.

Vanliga HTTP-statuskoder inkluderar:

    200 - framgångsrik begäran (webbsida finns);

    301 - rör sig konstant (omdirigerar ofta till en ny url);

    401 - obehörig begäran (auktorisering krävs);

    500 — Internt fel server (kallas ofta felkonfiguration server).

POST och GET i HTTP

HTTP definierar kommandona GET och POST som används för att bearbeta formulärinlämningar på webbplatser. Kommandot CONNECT används för att underlätta en säker anslutning som är krypterad med SSL. Krypterade HTTP-anslutningar sker över HTTPS, ett HTTP-tillägg designat för säkra dataöverföringar.

Webbadresser som börjar med "http: //" är tillgängliga via vanliga hypertextöverföringsprotokoll och använder port 80 som standard. Webbadresser som börjar med "https: //" är tillgängliga via säker HTTPS-anslutning och använder ofta port 443.

POSTA

POST är en serie systemkontroller exekveras av datorer och andra elektroniska enheter när de slås på. Testresultaten kan visas på skärmen, visas via blinkande lysdioder eller helt enkelt spelas in internt. V datorsystem POST-operationen utförs i början av startsekvensen. Om alla tester går igenom fortsätter resten av startprocessen automatiskt.

Mac och Windows operativsystem kör POST varje gång datorn startar eller startas om. Skanna kontroller Hårdvara och säkerställer att processorn, RAM-minnet och lagringsenheterna fungerar korrekt. Om ett fel inträffar under POST kan startprocessen pausas eller stoppas helt, och monitorn kan visa ett meddelande som säger att POST-fel ofta visas på BIOS-informationsskärmen. De kan matas ut som kryptokoder som "08" eller som ett systemmeddelande som "Systemminnesfel på offset." På Mac betecknas POST-fel ofta av enkel grafik som en trasig mappikon som indikerar att ingen startenhet hittades.

Fysiska manifestationer

I vissa fall kanske datorskärmen inte ens slås på innan POST-fel. Om detta händer kan felkoder visas via blinkande lysdioder eller ljudsignaler... Till exempel, Apple iMac spelar tre toner i följd, pausar i fem sekunder och upprepar sedan toner när dåligt RAM-minne upptäcks under uppstart. De flesta datorer piper också när POST-fel upptäcks, även om varje tillverkare använder sina egna koder.

POST är en ganska teknisk term som endast används av datortekniker regelbundet. Detta är dock en bra akronym eftersom det hjälper till att bättre förstå felmeddelanden som kan dyka upp på datorer eller annat elektroniska apparater... Om din dator inte startar på grund av ett POST-fel kan du använda en annan enhet för att hitta innebörden och orsaken till felet från tillverkarens webbplats. Sedan kan du vidta lämplig åtgärd - ta bort minnesmodulen eller installera om grafikkortet och starta sedan om utrustningen.

SKAFFA SIG

POST är också en metod för att skicka variabler HTML-formulär från en webbsida till en annan utan att visa dem i adressfältet. En alternativ metod är GET, som lägger till värden till URL:en. HTTP POST-förfrågningar tillhandahåller ytterligare data från klienten (webbläsaren) till servern i meddelandetexten. Däremot inkluderar GET-förfrågningar all nödvändig data i URL:en. Formulär i HTML kan använda vilken metod som helst genom att ange metod = POST eller metod = GET (standard) på elementet

... Den angivna metoden avgör hur formulärdata skickas till servern. När GET-metoden används är all formulärdata URL-kodad som frågesträngsparametrar. Med POST visas formulärdata i brödtexten i HTTP-begäranmeddelandet.

Skillnader i formulärinlämning

POST-förfrågningsmetoden begär att webbservern accepterar och lagrar data som finns inkluderade i meddelandets brödtext. Används ofta när du laddar upp en fil eller när du skickar in ett ifyllt webbformulär.

HTTP GET-förfrågningsmetoden hämtar information från servern. Som en del av en GET-begäran kan vissa data skickas i frågesträngen för URL:en, med angivande av söktermer, datumintervall eller annan information som identifierar begäran.

Som en del av en POST-förfrågan kan en godtycklig mängd data av vilken typ som helst skickas till servern i brödtexten i förfrågningsmeddelandet. Rubrikfältet i en POST-begäran indikerar vanligtvis internetmedietypen för meddelandetexten.

Den största skillnaden mellan GET- och POST-förfrågningar är att de motsvarar olika HTTP-förfrågningar som definieras i HTTP-specifikationerna. Processen för att skicka in båda metoderna startar på samma sätt: formulärdatauppsättningen skapas av webbläsaren och kodas sedan på det sätt som anges av enctype-attributet. För METHOD = "POST kan enctype-attributet vara multipart / form-data eller application / x-www-form-urlencoded, medan för METHOD =" GET " endast utlöses via application / x-www-form-urlencoded. Detta formulär data ställs in och skickas sedan till servern.

För att skicka in ett formulär med METHOD = "GET", konstruerar webbläsaren en URL genom att ta värdet av åtgärdsattributet och lägga till formulärdatauppsättningen, kodad med applikationen / x-www-form-urlenkodad innehållstyp). Webbläsaren behandlar sedan webbadressen som om den hänvisade till en länk (eller som om användaren hade skrivit in webbadressen manuellt). Webbläsaren delar upp URL:en i bitar och känner igen värden och skickar sedan en GET-förfrågan till den värden med resten av URL:en som argument. Det är viktigt att notera att denna process innebär att formulärdata är begränsade till ASCII-koder. Särskild försiktighet bör iakttas för att koda och avkoda andra typer av tecken när de överförs via en URL i ASCII-format.

En formulärinlämning med METHOD = "POST" gör att en POST-begäran skickas med värdet av action-attributet och meddelandet som genereras enligt innehållstypen som anges av enctype-attributet.

PHP

PHP är inbäddat i HTML. Detta innebär att PHP-kod kan infogas i en HTML-sida. PHP-kod läses eller tolkas av servern som är värd för sidan. Utdata från GET- och POST-funktionerna i PHP på en sida returneras vanligtvis som HTML som kan läsas av webbläsaren. Eftersom PHP-koden konverteras till HTML innan sidan laddas kan användare inte se PHP-koden på sidan. Detta gör PHP-sidor tillräckliga för att komma åt databaser och annan skyddad information.

Mest av PHP syntax lånat från andra språk som C, Java och Perl. PHP har dock ett antal unika funktioner och specialfunktioner. Målet med detta språk är att göra det möjligt för webbutvecklare att snabbt och enkelt skriva dynamiskt genererade sidor.

Wordpress

WordPress är gratis system innehållshantering som används för att skapa och underhålla webbplatser. Dess användarvänlighet och unika bloggfunktioner har gjort det till det mest populära bloggverktyget på internet.

WordPress-gränssnittet låter alla utan erfarenhet av webbutveckling skapa och publicera en webbplats. Inbyggda bloggverktyg ger ett enkelt sätt att hålla reda på enskilda inlägg, besökare och användarkommentarer.

Även om det finns tusentals tillgängliga WordPress mallar och plugins, POST GET-systemet i WordPress har fortfarande sina begränsningar. Eftersom detta är en mallbaserad tjänst bör användaren börja med en förbyggd webbplats istället för att skapa sidor från början. Det finns heller inget sätt att bädda in skript eller underhålla en databas med samma kontrollnivå som en anpassad webbplats erbjuder.

Verktyget POST_GET_ID () låter dig använda skript för att styra objektet, eftersom det har en unik identifierare, och när du skickar in det som ett formulär via dessa metoder kommer rullgardinsmenyn att skickas med unik identifierare vilket gör att skriptet märker vilken publikation som körs. Alternativt kan en dold variabel skickas som gör att skriptet kan se vilket inlägg som hör till vyn.

Detta inlägg är avsett att förklara principerna för att överföra data på Internet med två huvudmetoder: GET och POST. Jag skrev det som ett komplement till instruktionerna för skiftverksgeneratorn för de som knappt är intresserade av detaljerna ☺.

Gå till följande URL (detta är för visuell förklaring): http://calendarin.net/calendar.php?year=2016 Note on adressfält webbläsare: calendarin.net/calendar.php ? år = 2016 Huvudfilen är namngiven, följt av ett frågetecken (?) och en parameter "år" med värdet "2016". Allt som följer efter frågetecknet är alltså en GET-förfrågan. Det är enkelt. För att skicka mer än en parameter, men flera, måste de separeras med ett och-tecken (&). Exempel: calendarin.net/calendar.php ? år = 2016 & display = arbetsdagar och lediga dagar

Huvudfilen heter fortfarande, följt av ett frågetecken (?), sedan - parametern "år" med värdet "2016", sedan - et-tecken (&), sedan - parametern "display" med värdet "work". -dagar-och-lediga dagar".

GET-parametrar kan ändras direkt i webbläsarens adressfält. Om du till exempel ändrar värdet "2016" till "2017" och trycker på knappen, kommer du till kalendern för 2017.

Detta är överföringen av data på ett dolt sätt (sidans adress ändras inte); det vill säga att du kan se vad som överfördes endast med hjälp av ett program (skript). Till exempel, i följande verktyg för att räkna tecken i en text, överförs källdata med POST-metoden: http://usefulonlinetools.com/free/character-counter.php

Om du har några frågor, kommentarer och min e-post till din tjänst.

Utöver GET-metoden, som vi diskuterade i förra inlägget, finns det en annan metod för att skicka en förfrågan via HTTP-protokollet - POST-metoden. POST-metoden används också mycket ofta i praktiken.

Om det, för att komma åt servern med GET-metoden, räckte för oss att skriva in begäran i URL:en, fungerar allt enligt en annan princip i POST-metoden.

För att uppfylla denna typ av begäran måste vi klicka på knappen med attributet type = "submit", som finns på webbsidan. Observera att den här knappen finns i elementet med metodattributet inställt på post.

Tänk på denna HTML:

Skriv text:


Om användaren skriver in någon text i textfältet och klickar på knappen "Skicka" kommer textvariabeln med värdet på innehållet som användaren har angett att skickas till servern.

POST och GET-förfrågningar i enkla ordalag

Denna variabel kommer att skickas med POST-metoden.

Om du skriver i formuläret så här:

Då kommer data att skickas med GET-metoden.

Om, i fallet med en GET-begäran, mängden data som vi kunde överföra var begränsad av längden på webbläsarens adressfält, finns det ingen sådan begränsning i fallet med en POST-begäran, och vi kan överföra betydande belopp av information.

En annan skillnad mellan POST-metoden och GET-metoden, POST-metoden döljer alla variabler som skickas till den och deras värden i dess kropp (Entity-Body). När det gäller GET-metoden lagrades de i begäran-strängen (Request-URI).

Här är ett exempel på en POST-begäran:

POST / HTTP / 1.0 \ r \ n
Värd: www.site.ru \ r \ n
Referens: http://www.site.ru/index.html\r\n
Cookie: inkomst = 1 \ r \ n
Innehållstyp: applikation / x-www-form-urlenkodad \ r \ n
Innehållslängd: 35 \ r \ n
\ r \ n
login = Dima & lösenord = 12345

Genom att överföra data med POST-metoden blir det alltså mycket svårare för en angripare att fånga upp det, eftersom de är dolda, så POST-metoden anses vara säkrare.

Dessutom kan POST-metoden överföra inte bara text utan också multimediadata (bilder, ljud, video). Det finns en speciell Content-Type-parameter som bestämmer vilken typ av information som behöver överföras.

Slutligen används POST-variabeln för att hämta data som överförs med denna metod på servern.

Här är ett exempel på bearbetning i PHP:

echo $ _POST ['text'];
?>

I förra inlägget bestämde vi oss för vad webbläsaren (klienten) skickar HTTP-server förfrågningar och servern skickar HTTP-svar till klienten. Dessa förfrågningar och svar behandlas enligt vissa regler. Det finns något som syntaxen, hur och i vilken ordningsföljd som ska skrivas. Det måste finnas en väldefinierad struktur.

Låt oss ta en närmare titt på denna struktur, som används för att bygga förfrågningar och svar i HTTP-protokollet.

En HTTP-förfrågan består av tre huvuddelar, som kommer i exakt den ordning som visas nedan. Det finns en tom rad mellan rubrikerna och meddelandetexten (som en avgränsare), det är ett radmatningstecken.

Tom sträng (separator)

Lägg upp och få förfrågningar, vad är skillnaden mellan dem och vilken är bättre och för vilka ändamål?

meddelandetext (Entity Body) - valfri parameter

Frågesträng- anger överföringsmetoden, URL-adressen för åtkomst och versionen av HTTP-protokollet.

Rubriker- beskriva innehållet i meddelanden, överföra olika parametrar och annan information och information.

meddelandetext- detta är själva uppgifterna som överförs i begäran. Meddelandetexten är en valfri parameter och kan utelämnas.

När vi får en svarsförfrågan från servern är meddelandets brödtext oftast innehållet på webbsidan. Men när man gör förfrågningar till servern kan det också ibland förekomma, till exempel när vi överför data som vi fyllt i i formuläret respons till servern.

Mer detaljerat, varje del av begäran kommer vi att överväga i följande anteckningar.

Låt oss ta en riktig serverförfrågan som exempel. Jag har markerat varje del av begäran med sin egen färg: förfrågningsraden är grön, rubrikerna är orange, meddelandetexten är blå.

Begäran från webbläsaren:

Värd: webgyry.info

Cookie: wp-inställningar

Anslutning: hålla vid liv

I följande exempel finns meddelandets brödtext redan.

Serversvar:

Innehållstyp: text / html; teckenuppsättning = UTF-8

Överföringskodning: chunked

Anslutning: hålla vid liv

Keep-Alive: timeout = 5

X-Pingback: //webgyry.info/xmlrpc.php

namnlöst dokument

Dessa är de meddelanden som utbyts mellan klienten och servern över HTTP-protokollet.

Förresten, vill du veta om det finns någon mening med att något element på din webbplats använder "målen" för Yandex Metrics och Google Analytics?

Ta bort det som INTE fungerar, lägg till det som fungerar och dubbla ditt resultat.

En kurs om att sätta upp Yandex Metrica-mål ..

En kurs i att sätta upp Google Analytics-mål ..

HTTP-klienten skickar en förfrågan till servern i form av ett förfrågningsmeddelande, som har följande format:

  • Begäran sträng (obligatorisk)
  • Titel (valfritt element)
  • Tom sträng (krävs)
  • Meddelandetext (valfritt)

Låt oss ta en titt på var och en av dessa element separat.

Frågesträng

Förfrågningssträngen börjar med en metodtoken, följt av begäran-URI och protokollversion. Element separeras från varandra med mellanslag:

Överväga givet element i detalj

Begär metod

Detta element anger metoden som ska anropas på serversidan på den angivna URI:n.

Det finns åtta metoder i HTTP:

  • HUVUD
    Används för att hämta statusraden och titeln från servern av URI. Ändrar inte data.
  • SKAFFA SIG
    Används för att ta emot data från servern på angiven URI. Ändrar inte data.
  • POSTA
    Används för att skicka data till servern (som utvecklarinformation, etc.) med HTML-formulär.
  • SÄTTA
    Ersätter alla tidigare data på resursen med nyinlästa data.
  • RADERA
    Tar bort all aktuell data på resursen som anges av URI:n.
  • ANSLUTA
    Upprättar en tunnelanslutning till servern vid angiven URI.
  • ALTERNATIV
    Beskriver anslutningsegenskaperna för den angivna resursen.
  • SPÅR
    Tillhandahåller ett meddelande som innehåller en bakåtspårning av platsen för den angivna resurs-URI.

Begär URI

URI (Uniform Resource Identifier) ​​är identifieraren för den resurs som begäran skickas till. Det vanligaste URI-formatet visas nedan:

‘*’ används när HTTP-begäran inte är specifik för en specifik resurs, utan för en server. Används endast när metoden inte behöver appliceras på resursen. Till exempel,

absolut uri används när en HTTP-begäran görs till en proxy. Proxyn uppmanas att skicka förfrågan från den tillgängliga cachen och returnerar ett svar. Till exempel:

asbolutny_path | en källa används av de flesta chatso.

Lär dig arbeta med GET- och POST-förfrågningar

En specifik resurs för en specifik server efterfrågas. Till exempel vill en klient få en resurs från servern via port 80. Resursadressen är "www.proselyte.net" och skickar följande begäran:

Begär rubrikfält

Rubrikfält låter klienten kommunicera Ytterligare information om begäran och om sig själv till servern. Dessa fält fungerar som begärandemodifierare.

Nedan är en lista över de viktigaste rubrikfälten som kan användas:

  • Acceptera-Charset
  • Acceptera-kodning
  • Acceptera-språk
  • Tillstånd
  • Förvänta
  • Om-Match
  • Om-Ändrad-Sedan
  • Om-Ingen-Match
  • Om-intervall
  • Om-Omodifierad-Sedan
  • Räckvidd
  • Referent
  • Användaragent

Om vi ​​vill implementera vår egen klient och vår egen webbserver kan vi skapa våra egna header-fält.

Exempel på HTTP-begäran

Detta avslutar studien. HTTP-förfrågningar.
I nästa artikel ska vi titta på HTTP-svar.

Ett av sätten hur du kan skicka en HTTP-förfrågan till servern är en GET-förfrågan. Denna metod är den vanligaste och oftast görs förfrågningar till servern med den.

Det enklaste sättet att skapa en GET-förfrågan är att skriva in URL:en i webbläsarens adressfält.

Webbläsaren kommer att överföra följande information till servern:

GET / HTTP / 1.1
Värd: webgyry.info
Användaragent: Mozilla / 5.0 (Windows NT 6.1; rv: 18.0) Gecko / 20100101 Firefox / 18.0
Acceptera: text / html, applikation / xhtml + xml, applikation / xml; q = 0,9, * / *; q = 0,8
Acceptera-språk: ru-RU, ru; q = 0,8, en-US; q = 0,5, en; q = 0,3
Acceptera-kodning: gzip, deflate
Cookie: wp-inställningar
Anslutning: hålla vid liv

Ansökan består av två delar:

1. begäran rad

2.headers (meddelanderubriker)

Observera att GET-förfrågan inte har en meddelandetext. Men detta betyder inte att vi med dess hjälp inte kan överföra någon information till servern.

Skillnad mellan GET- och POST-metoder

Detta kan göras med hjälp av speciella GET-parametrar.

För att lägga till GET-parametrar till begäran måste du sätta ett "?"-tecken i slutet av URL:en. och efter det, börja fråga dem enligt följande regel:

parameter_name1 = parameter_value1 & parameter_name2 = parameter_value2 & ...

Avgränsaren mellan parametrarna är tecknet "&".

Till exempel, om vi vill skicka två värden till servern, användarnamnet och hans ålder, kan detta göras med följande rad:

http://site.ru/page.php?name=dima&age=27

När denna fråga exekveras går data till den så kallade QUERY_STRING miljövariabeln, från vilken den kan hämtas på servern med hjälp av serversidans webbprogrammeringsspråk.

Här är ett exempel på hur detta kan göras i PHP.

echo "Ditt namn:". $ _GET ["namn"]. "
»;
echo "Din ålder:". $ _GET ["ålder"]. "
»;
?>

Konstruktionen $ _GET ["parameter_name"] låter dig visa värdet på den angivna parametern.

Som ett resultat av att köra denna kod i webbläsaren kommer följande att visas:

Ditt namn: dima
Din ålder: 27

vi gör också en begäran till servern med GET-metoden.

Det här inlägget är ett svar på en fråga som ställdes i en kommentar till en av mina artiklar.

I den här artikeln vill jag berätta vad HTTP-metoderna GET / POST / PUT / DELETE och andra är, vad de uppfanns för och hur man använder dem i enlighet med REST.

HTTP

Så vad exakt är ett av de viktigaste protokollen på Internet? Jag skickar pedanterna till RFC2616, och jag ska berätta för resten som en människa :)

Detta protokoll beskriver kommunikation mellan två datorer (klient och server), baserat på meddelanden som kallas förfrågan och svar. Varje meddelande består av tre delar: en startrad, rubriker och en brödtext. I detta fall krävs endast startlinjen.

Startlinjerna för begäran och svaret har ett annat format - vi är bara intresserade av startraden för begäran, som ser ut så här:

METOD URI HTTP / VERSION ,

Där METHOD bara är HTTP-förfrågningsmetoden, är URI resursidentifieraren, VERSION är protokollversionen (av det här ögonblicket nuvarande version 1.1).

Rubriker är en samling namn-värde-par, separerade med kolon. Olika tjänstinformation överförs i rubrikerna: meddelandekodning, webbläsarnamn och version, adress från vilken klienten kom (Referrer) och så vidare.

Meddelandets brödtext är i själva verket den överförda informationen. I svaret är den överförda informationen som regel HTML-sidan som webbläsaren begärde, och i begäran, till exempel, i meddelandets brödtext, överförs innehållet i filerna som laddats upp till servern. Men som regel ingår inte meddelandetexten alls i begäran.

Exempel på HTTP-kommunikation

Låt oss titta på ett exempel.

Förfrågan:
GET /index.php HTTP / 1.1 Värd: example.com Användaragent: Mozilla / 5.0 (X11; U; Linux i686; ru; rv: 1.9b5) Gecko / 2008050509 Firefox / 3.0b5 Acceptera: text / html Anslutning: stäng
Den första raden är förfrågningsraden, resten är rubriker; meddelandetexten saknas

Svar:
HTTP / 1.0 200 OK Server: nginx / 0.6.31 Content-Language: ru Content-Type: text / html; charset = utf-8 Innehåll-Längd: 1234 Anslutning: stäng ... SJÄLV HTML-SIDA ...

Resurser och metoder

Låt oss gå tillbaka till startfrågesträngen och kom ihåg att den innehåller en sådan parameter som URI. Detta står för Uniform Resource Identifier - en enhetlig resursidentifierare. En resurs är som regel en fil på servern (ett exempel på URI i detta fall är "/styles.css"), men i allmänhet kan en resurs vara ett abstrakt objekt ("/ blogs / webdev /" - indikerar blocket "Webbutveckling", och inte för en specifik fil).

HTTP-förfrågningstypen (även kallad HTTP-metoden) talar om för servern vilken åtgärd vi vill vidta med resursen. Inledningsvis (i början av 90-talet) antogs att klienten bara kan vilja ha en sak från resursen - att få det, men nu kan du, med hjälp av HTTP-protokollet, skapa inlägg, redigera profilen, radera meddelanden och mycket mer. Och dessa handlingar är svåra att kombinera med termen "ta emot".

För att differentiera åtgärder med resurser på nivån för HTTP-metoder uppfanns följande alternativ:

  • GET - få en resurs
  • POST - skapa en resurs
  • PUT - resursuppdatering
  • DELETE - tar bort en resurs
Var uppmärksam på det faktum att HTTP-specifikationen inte tvingar servern att förstå alla metoder (av vilka det faktiskt finns mycket fler än 4) - endast GET krävs, och den talar inte heller om för servern vad den ska göra när den tar emot en begäran med en viss metod. Detta betyder att servern svarar på en DELETE /index.php HTTP / 1.1-förfrågan är inte skyldig att ta bort index.php-sidan på servern, precis som på GET /index.php HTTP / 1.1-förfrågan är inte skyldig att returnera index.php-sidan till dig, den kan radera den som :)

REST spelar in

REST (REpresentational State Transfer) - denna term myntades år 2000 av Roy Fielding - en av utvecklarna av HTTP-protokollet - som ett namn på en grupp principer för att bygga webbapplikationer. Generellt sett täcker REST ett bredare område än HTTP - det kan användas på andra nätverk med andra protokoll. REST beskriver principerna för klient-server-interaktion, baserat på begreppen "resurs" och "verb" (du kan förstå dem som subjekt och predikat). I fallet med HTTP definieras resursen av dess URI, och verbet är HTTP-metoden.

REST föreslår att man överger användningen av samma URI för olika resurser (det vill säga adresserna till två olika artiklar som /index.php?article_id=10 och /index.php?article_id=20 är inte ett REST-sätt) och använder olika HTTP-metoder för olika åtgärder. Det vill säga, en webbapplikation skriven med REST-metoden kommer att radera en resurs när den kommer åt den med HTTP DELETE-metoden (det betyder naturligtvis inte att du ska kunna radera allt och allt, men några programmets begäran om borttagning måste använda metoden HTTP DELETE).

REST ger programmerare möjligheten att skriva standardiserade och lite snyggare webbapplikationer än någonsin tidigare. Med REST kommer URI:n för att lägga till en ny användare inte att vara /user.php?action=create (GET / POST-metoden), utan helt enkelt /user.php (enbart POST-metoden).

Som ett resultat, kombinerar det befintliga HTTP-specifikationen och REST-metoden är äntligen meningsfull för de olika HTTP-metoderna. GET - returnerar en resurs, POST - skapar en ny, PUT - uppdaterar en befintlig, DELETE - tar bort.

problem?

Ja, det finns ett litet problem med att tillämpa REST i praktiken. Detta problem kallas HTML.

PUT/DELETE-förfrågningar kan skickas med XMLHttpRequest, genom att kontakta servern "manuellt" (säg genom curl eller till och med telnet), men du kan inte skapa ett HTML-formulär som skickar en fullständig PUT/DELETE-förfrågan.

Poängen är att HTML-specifikationen inte tillåter dig att skapa formulär som skickar data annat än via GET eller POST. Därför, för normal drift med andra metoder, måste du imitera dem på konstgjord väg. Till exempel, i Rack (mekanismen på grundval av vilken Ruby interagerar med webbservern; Rails, Merb och andra Ruby-ramverk är gjorda med Rack), kan du lägga till ett dolt fält med namnet "_method" i formuläret och ange namnet på metoden som värdet (till exempel "PUT") - i det här fallet kommer en POST-begäran att skickas, men Rack kommer att kunna låtsas att den fick en PUT, inte en POST.

Gemensamt för dem är att de fungerar på samma sätt. Det är tekniskt ingen skillnad mellan dem. Men det finns ideologiska skillnader.

Jag kommer att täcka dem i PHP-sammanhang. Vänligen notera att HTTP-protokollär indirekt relaterat till PHP eftersom det skapades för utbyte html-sidor PHP utökar bara kapaciteten för båda.

GET-begäran används för att ta emot data och POST för att skicka. (Som en påminnelse, de fungerar tekniskt på samma sätt).

Därför, i PHP-sammanhang, baserat på denna ideologi, gjorde de följande:
1. Superglobala arrayer ($ _GET, $ _POST) skapas som standard varje gång du startar PHP.
2. Om det finns ett frågetecken (?) i frågesträngen. Sedan allt som räknas efter honom parametrar GET-begäran, de presenteras i formatet "nyckel" = "värde" och et-tecken (&) används som avgränsare
Exempel:
Hämta /index.php?name=Andrey&efternamn=Galkin
detta är en frågesträng, det finns 2 parametrar. dessa parametrar kommer att hamna i $ _GET arrayen.
3. $ _POST fylls i på annat sätt. innehållet i denna array fylls i från "request headers". Det vill säga från en plats som är dold från synen i en explicit form. All rutin för att skapa sådana rubriker tas över av webbläsaren. Fast ibland redigeras något manuellt i rubrikerna.

Oftast används postbegäran i formulär (för att skicka in data).

Till exempel har vi ett inloggningsformulär med 2 fält login och lösenord.

Låt oss föreställa oss att vi använder GET-metoden. När vi sedan skickar in formuläret kommer vi att gå till följande adress /login.php?login=Andrey&password=123, håller med om att det inte alls är säkert att överföra sådan information på detta sätt. Vem som helst kan öppna din webbläsare och börjar ange webbplatsens adress, han kan se dina lösenord och inloggningar från historiken.

Men om vi angav med POST-metoden skulle vi få följande begäran:
POST /login.php (login = Andrey & lösenord = 123) vad som skulle döljas inom parentes och inte sparas i webbläsaren på något sätt.

I allmänhet, för att sammanfatta:
GET är att få en specifik sida på ett specifikt sätt (sortering, aktuell bloggsida, söksträng, etc.).
POST - för att skicka data som inte påverkar visningen av sidan, i den meningen att dessa data endast påverkar resultatet av skriptkörningen (inloggningar, lösenord, kreditkortsnummer, meddelanden, etc.).

Och en till god nyhet, de kan till exempel kombineras
POST /index.php?page=login (inloggning = Andrey & lösenord = 123) Jag tror att jag redan har förklarat tillräckligt vad som kommer att bli av det och vilka parametrar som kommer in i vilken array.