Skillnaden mellan get- och post-förfrågningar. Skapar POST- och GET-förfrågningar


Nuförtiden används oftast bara två HTTP-metoder: GET och POST. Men det visade sig att även bland dessa två "tallar" lyckas webbutvecklare gå vilse. Det finns en förklaring till detta: båda metoderna kan användas för att få samma resultat. Men vi måste komma ihåg att tanklös användning av någon av metoderna kan leda till katastrofala konsekvenser, inklusive tunga laster till kanalen och säkerhetshål.

För att undvika detta räcker det att helt enkelt förstå mer detaljerat syftena och skillnaderna med dessa metoder.

Om man fördjupar sig i betydelsen av metodnamn kommer mycket att bli tydligare. GET (från engelska till att ta emot), d.v.s. ska användas för att söka efter data. POST (från engelska skicka via post) - används för att skicka data till servern. Allt verkar vara extremt enkelt och tydligt. Men vem vill utveckla hemsidor lite mer komplicerade än en visitkortswebbplats med en form? respons, det är bättre att lära känna frågan bättre.

Säkra och osäkra HTTP-förfrågningar

HTTP 1.1-specifikationen introducerar två koncept: säker och osäker begäran, eller mer exakt, metod.

Säkra metoder är metoder som bara kan begära information. De kan inte ändra den begärda resursen, och de kan inte heller leda till oönskade resultat för användaren, andra eller servern. Exempel på säkra är att begära HTML-koden för en webbsida eller bild. Säkra metoder inkluderar HEAD och GET.

Anteckningen

I verkligheten kan hantverkare naturligtvis orsaka skada med GET-förfrågningar. Till exempel frågeloopar.

Osäkra frågor, som alla redan har gissat, kan potentiellt leda till dåliga konsekvenser om de används igen. Sådana förfrågningar kan ändra innehållet i den resurs som nås. Exempel på sådana förfrågningar: skicka meddelanden, registrering, onlinebetalningar. Osäkra metoder inkluderar POST, PUT, DELETE.

Idempotenta metoder

Idempotens är en egenskap hos metoder som, med många upprepade anrop, kommer att returnera samma resultat, förutom i de fall då informationen är inaktuell. Detta innebär att när de kommer åt samma URL kommer alla användare att se samma webbsida, bild, video osv. Metoderna GET, PUT, DELETE har denna egenskap.

Låt oss nu titta närmare på själva GET- och POST-metoderna: låt oss skriva en kort "sammanfattning" för var och en.

SKAFFA SIG

  • utformad för att ta emot data från servern;
  • begärandekroppen är tom;
  • bearbetas snabbare på serversidan och med mindre förbrukning av serverresurser på grund av den tomma förfrågningskroppen;
  • Variabler skickas in adressfält(så här ser användaren det, tekniskt sett tillhandahålls data i frågeraden) och därför är information om variablerna och deras värden synlig (data är inte skyddade);
  • kan överföra en liten mängd data till servern: det finns begränsningar för längden på webbadressen, vilket beror på webbläsaren, till exempel IE6 = 2Kb. Yahoo!-utvecklare rekommenderar att du fokuserar på detta nummer;
  • kan bara överföra ASCII-tecken;
  • en sådan begäran kan kopieras och sparas (till exempel i bokmärken);
  • begäran kan cachelagras (detta kan kontrolleras);
  • för att ytterligare minska belastningen på kanalen och servern finns villkorliga och partiella förfrågningar tillgängliga;
  • sliter inte HTTP-anslutning(med keepAlive-läge aktiverat på servern).

POSTA

  • avsedd för att skicka data till servern;
  • dataöverföring sker i huvuddelen av begäran;
  • Bearbetning på serversidan är långsammare och "tyngre" än GET, eftersom förutom rubriker måste förfrågningskroppen analyseras;
  • kapabel att överföra stora mängder data;
  • kapabel att överföra filer;
  • en sida genererad med POST-metoden kan inte sparas som bokmärken;
  • bryter HTTP-anslutningen;
  • För att överföra även en mycket liten mängd information, skickar de flesta webbläsare minst två TCP-paket: en rubrik och sedan en text av begäran.

Det visar sig att dessa två metoder inte är så lika. Användningen av en eller annan bör bestämmas av den aktuella uppgiften, och inte av det faktum att GET används som standard eller är lättare att arbeta med. GET är naturligtvis ett bättre alternativ i de flesta fall, särskilt när du bygger snabb AJAX, men glöm inte dess nackdelar. För mig själv gjorde jag en enkel algoritmanteckning om valet av metod.

Du kanske har märkt att på de flesta webbplatser kan du se följande adresser:

Http://site/index.php?blog=2

Här, även utan att känna till php, kan du gissa att vi kommer åt en fil index.php Men få människor vet vad som kommer efter frågetecknet. Det är ganska enkelt: ?blogg=2 Detta är en deklaration av den globala variabeln "$_GET["blogg"]" med värdet "2". Således skickar jag in en variabel i skriptet som ansvarar för att visa information från databasen. Låt oss skriva ett litet manus där du tydligt kan se allt:

if(isset($_GET["blogg"])) (
echo $_GET["blogg"];
}
?>

Vi använder villkorsoperatorn if() och följande rad används som villkor:

Isset($_GET["blogg"])

isset() låter dig ta reda på om variabeln som anges inom parentes existerar, det vill säga villkoret som jag beskrev i koden låter så här: Om variabeln $_GET["blogg"] finns, visa då innehållet i denna variabel på skärmen. Här är vad som hände:

Jag tror att det är uppenbart att en global variabel skapas $_GET med identifieraren som vi deklarerade i adressfältet ( V I detta fall med id "blogg")

Nu vill jag klargöra en punkt. Anta att vi behöver deklarera två variabler, hur gör man detta? Den första variabeln deklareras efter frågetecknet "?" Den andra variabeln deklareras efter "&"-tecknet ( För att vara ärlig så vet jag inte vad det här tecknet är), här är en exempeldeklaration av tre variabler:

Http://site/index.php?a=1&b=2&c=3

Här är utdatakoden:

if(isset($_GET["a"]) AND isset($_GET["b") OCH isset($_GET["c"])) (
echo $_GET["a"]."
";
echo $_GET["b"]."
";
echo $_GET["c"]."
";
}
?>

Tillståndet låter så här:

Om det finns en global variabel $_GET["a"] och en global variabel $_GET["b"] och en global variabel $_GET["c"] visar du dem på skärmen, här är resultatet:

Blanketter

Innan vi kommer till posta förfrågningar måste du förstå vad formulär är? Varför är det nödvändigt? Eftersom den globala variabeln $_POST[""] skapas genom formulär. Vad är form? Dessa är fält där användaren kan ange viss information. Det finns enradsfält, stora fält och även radioknappar och kryssrutor. Låt oss titta på allt i ordning...

Formuläret är en tagg:


formelement

Formuläret har attribut, jag kommer att lista de vanligaste:

Låt oss skapa ett formulär:


formelement

Jag ställer in filen som en hanterarfil test.php eftersom det är i den jag skriver exempel åt dig. Jag ställer in sändningsmetoden för att posta eftersom det här är metoderna som används i 99,9 % av fallen. Jag gav också vårt formulär ett namn - form

Låt oss nu kasta oss in i formelementens värld. Det första du behöver förstå är att nästan alla element är en tagg den enda skillnaden är i attributet typ vid dessa taggar. Låt mig lista de formulärelement som används:

Jag är säker på att du har sett sådana fält mer än en gång, så här är vad de säger: "inga kommentarer"

Låt oss nu skapa ett litet utbildningsformulär som vi kommer att arbeta vidare med. Vår uppgift är att skapa ett litet frågeformulär som berättar namnet på personen som fyller i det, kön, vilket land de kommer ifrån, favoritfärg och ett textfält där användaren kan lägga till något om sig själv. Här är vad jag fick:

Ditt efternamn Förnamn Patronym:

Vad är ditt kön:
M
OCH

Vilket land är du från



Favoritfärg(er):

Svart:
Röd:
Vit:
Annan:

Om mig:




Observera att nästan varje tagg har ett attribut värde, vad är det för? Den registrerar data som du ska överföra till en annan sida. Jag hoppas att det är klart

Om vi ​​nu kör den här koden i webbläsaren kommer vi att se följande:

För formuläret använde jag attributet handling med mening test.php detta innebär, som jag redan sagt, att data från formuläret kommer att överföras till filen test.php.

POST-förfrågan

Nu ska vi skriva php-kod vilket gör att vi kan se informationen vi angett. Var lagras uppgifterna? När det gäller get-begäran fanns vår data i den globala variabeln $_GET[""]. När du gör en postbegäran kommer data att lagras i den globala variabeln $_POST[""]. I hakparentes, måste anges, som i fallet med global få variabel, identifierare. Frågan är, var kan jag få tag i denna identifierare? Det är därför vi behöver namnattributet på formelement! Det är dessa namn som fungerar som vår nyckel i den globala postarrayen. Nåväl, låt oss börja beskriva skriptet:

if(isset($_POST["skicka in"])) (
echo "Fullständigt namn: ".$_POST["fio"]."
";
echo "Kön: ".$_POST["sex"]."
";
echo "Bostadsland: ".$_POST["stad"]."
";

Echo "Favoritfärg(er):
";
echo $_POST["färg_1"]."
";
echo $_POST["färg_2"]."
";
echo $_POST["färg_3"]."
";
echo $_POST["color_4"]."
";
echo "Om dig själv: ".$_POST["om"]."


";
}
?>

If-villkoret vi skrev säger: Om det finns en global variabel $_POST["submit"] så visar vi data på skärmen. Den här globala variabeln skapas om vi klickade på knappen Skicka, det är därför in i detta exempel namnattributet krävs i knappen. Du kanske undrar varför knappens namnattribut är valfritt? Det är ganska enkelt. Vanligtvis övervakar programmeraren inte knapptryckningen, utan övervakar snarare data som skickas. För korrekt funktion av till exempel ett kontaktformulär är det nödvändigt att spåra inte klickningen på en knapp, utan korrektheten av den information som angetts, och att ta reda på om denna information överhuvudtaget har angetts. I vårt exempel kontrollerade vi inte den skickade informationen, utan spårade helt enkelt knapptryckningen, för att förenkla exemplet... Det här är vad vi fick:

Slutsats

Tja, idag har vi tittat på två metoder för att överföra data mellan skript, och vi har också bekantat oss med formulär. Jag hoppas verkligen att denna information kommer att vara användbar för dig åtminstone någonstans. Om du har några frågor eller funderingar, skriv kommentarer. Lycka till, det var allt för idag!

P.S.: Skulle du vilja datorspel blivit ännu mer realistisk? directx 11 för Windows 7 kan laddas ner gratis på Windows i! Njut av underbar grafik!

Jag ville länge skriva en artikel där jag skulle prata om skillnaden mellan POST-metoden och GET-metoden, men på något sätt dök andra ämnen upp och jag bytte till dem. Och nu, äntligen, är det dags att täcka detta ämne, eftersom folk ofta helt enkelt inte vet vad är skillnaden mellan POST och GET.

För att visa tydligare skillnaden mellan POST och GET, ger jag en tabell som visar vilka egenskaper de skiljer sig åt.

Baserat på denna egenskap kan vi komma fram till när vi ska använda POSTA, och när SKAFFA SIG. Till exempel om användaren vill bokmärka den genererade sidan. Då bör generation ske senast GET-förfrågan, annars kommer du inte att kunna bokmärka sidan. Ett annat exempel: när du skickar inloggning och lösenord kan du inte ställa in metoden SKAFFA SIG, eftersom det är baserat på att överföra data via adressfältet. Annars, efter att ha tryckt på knappen " Skicka in", kommer något i stil med detta att visas i adressfältet: " http://mysite.ru/login.php?log=User&pass=123456", - och vem som helst kan se lösenordet, vilket naturligtvis inte bör tillåtas. Därför måste du här använda metoden POSTA.

Glöm inte heller att storleken på data som kan skickas av metoden POSTA, en storleksordning större än när den sänds med metoden SKAFFA SIG. Analysera generellt denna tabell och dra en slutsats: vilken dataöverföringsmetod bör användas i ett särskilt fall. För min egen räkning kommer jag att lägga till det 80% fall måste användas POSTA, men glöm inte att detta är långt ifrån 100% .

Om du har några frågor eller vill kommentera den här artikeln kan du lämna din kommentar längst ner på sidan.

Kommentarer (15):

dsmts 12.05.2013 14:00:18

God eftermiddag Jag behöver något sånt här när jag omdirigerar: header("Plats: test.php"); $_POST-värdet skickades till den här sidan. Sidan från vilken detta värde ska överföras har inga formulär. De där. den bearbetar helt enkelt data och genererar en specifik begäran. På det här ögonblicket Jag har överföringen gjord med hjälp av cookies. Men jag är inte säker på om det är säkert. Eller har jag fel? Den data som överförs ska inte vara synlig för användare.

Svar

Alex_ 23.11.2013 23:56:10

God dag:), Mikhail! Jag försöker skriva ett plugin i PHP och upptäckte naturligtvis att jag saknar kunskap. Därav frågan: om en viss webbplats (betalningssystem), efter mina handlingar på min sida, skickar mig data till webbplatsen på en specifik sida med POST-metoden, ska jag se dem om jag skriver print_r($_POST) i skriptet ? ? Bara i mitt fall, till exempel print_r($_SERVER); du kan se vilken data som finns i $_SERVER-arrayen, men $_POST är tom, det vill säga antingen kommer inte data fram eller så har jag en profan bild av hur saker och ting verkligen är.

Svar

23.11.2013 23:59:31

Hej Alexander Vanligtvis betalningssystemöverföra data i omvänd ordning i krypterad form och med säkra protokoll. Så allt beror på betalningssystemet. Skriver du en betalningsmodul för ett specifikt system? Vänligen förtydliga dina frågor annars kommer jag inte att kunna hjälpa dig.

Svar

Alex_ 24.11.2013 02:00:41

Hej Alexander, tack för ditt svar. Jag skriver ett plugin för cms Wordpress, jag arbetar med betalningssystemet interkassa.com. Om köpet lyckas omdirigeras det till den framgångsrika betalningssidan http://my_site/success. Enligt dokumentationen kommer data som är synliga för mig till denna sida. Det vill säga, i inställningarna valde jag GET-överföringsmetoden och en lång url kommer, denna länk och i den parametrarna http://my_site/success/?&ik_payment_id=1&ik_paysystem_alias=yandexdengir, allt är som det ska. Jag försökte välja POST-överföringsmetoden, sedan i skriptet jag skrev, till exempel, if (isset($_POST["ik_trans_id"])) echo $_POST["ik_trans_id"]. Och det fungerade. Sedan började jag arbeta med STATUS url för då kommer ik_sign_hash, som genereras av intercash med hjälp av en hemlig nyckel (som är känd för mig och intercash) och den här gången if (isset($_POST["ik_sign_hash"]) inte fungerar eftersom det inte finns på min sida Det finns ett plugin (det gör inte allt som vi skulle vilja) skrivet i OOP (jag är fortfarande långt ifrån nivån på den som skrev detta, kanske är det därför det inte är självklart. för mig vad som används där). Den hemliga nyckeln(i plugin-inställningarna) och ett e-postmeddelande skickades med ett meddelande om felaktigt överförd data (hasharna stämde inte) och en begäran om att kontakta webbplatsens administratör. Något sådant.

Svar

24.11.2013 02:09:28

Tja, jag har inte sett din plugin, så jag kommer inte att säga något specifikt. När det gäller den enkla implementeringen...Jag har inte studerat interkassa API. Du kan se en enkel lösning här: http://goo.gl/rFnpNc I huvudsak är det samma i alla system. Jag brukar jobba med en robotkassa eller onpei, så ursäkta mig. I allmänhet är strukturen ungefär så här Du måste skriva en implementering i enlighet med API-dokumentationen http://www.interkassa.com/faq.php se Interkassa-avsnittet genom en programmerares och administratörs ögon + Där. i den sista frågan finns teknisk dokumentation för nedladdning och småsaker om API i allmänhet

Svar

Alex_ 24.11.2013 02:16:40

Tack, Alexander. Jag såg, jag läste allt det här, jag har försökt i flera dagar nu och jag googlar det och jag tror att jag kanske inte förstår något :). http://goo.gl/rFnpNc - och det här är ett plugin av Andrey Morkovin, inte helt skrivet (förmodligen för att inte avslöja alla hemligheter är manuset nu betalt). Flera videolektioner har skapats utifrån det om hur man skriver plugins på WP. Denna plugin http://www.icprojects.net/paid-downloads-plugin.html är tillgänglig i betalda och gratis version. I gratisversionen är endast PAYPAL-betalning tillgänglig. men allt finns där och om du ändrar ett par värden blir Interkassa-läget i betaversionen tillgängligt.

Svar

24.11.2013 02:23:00

Ja, jag är medveten om detta, det var bara ett plugin som låg runt om det var komplett eller inte, det kanske finns en version som kostar $40. kringspridda. Jag kommer i alla fall inte att rekommendera något specifikt. Läs Interkassa API-dokumentation Och algoritmerna är desamma överallt. Skriv en hanterare som skickar data i krypterad form och som tar emot och dekrypterar den i samma form. Du kan titta på Levchuks lösning i hans wppage ;) Om jag har tid ska jag titta på det här ämnet mer detaljerat

1. HTTP-protokoll. Introduktion

Jag skulle vilja klargöra en liten sak direkt. Det fruktansvärda ordet protokoll är inget annat än en överenskommelse mellan många människor, bara i ett vackert ögonblick bestämde folk sig: "Låt oss göra det på det här sättet, och då kommer allt att bli bra." Det finns inget att vara rädd för, allt är helt enkelt upprörande och vi ska nu avslöja denna skam. Så, vad är HTTP-protokollet och vad används det till?

1.1 Klient och server

Det finns inga mirakel i världen, och speciellt i programmeringsvärlden och Internet! Acceptera detta som en orubblig sanning. Och om programmet inte fungerar eller inte fungerar som önskat, är det troligen antingen felskrivet eller innehåller fel. Så, hur ber webbläsaren servern att skicka något till den? Ja, väldigt enkelt! Du behöver bara slappna av lite och börja njuta av processen :-)

1.2. Skriver vår första HTTP-förfrågan

Om du tycker att allt är för komplicerat så har du fel. Människan är designad på ett sådant sätt att hon helt enkelt inte är kapabel att skapa något komplext, annars kommer hon själv att bli förvirrad i det :-) Så det finns en webbläsare och det finns en webbserver. Webbläsaren är alltid initiativtagaren till datautbyte. En webbserver kommer aldrig helt enkelt att skicka något till någon så att den skickar något till webbläsaren – webbläsaren måste be om det. Enklaste HTTP Förfrågan kan till exempel se ut så här:


Hämta http://www.php.net/ HTTP/1.0rnrn


* GET (översatt från engelska betyder "get") - typen av begäran, typen av begäran kan vara olika, till exempel POST, HEAD, PUT, DELETE (vi kommer att titta på några av dem nedan).
* http://www.php.net/ - URI (adress) från vilken vi vill få åtminstone lite information (naturligtvis hoppas vi att lära oss HTML-sidan).
* HTTP/1.0 - typen och versionen av protokollet som vi kommer att använda när vi kommunicerar med servern.
* rn - slutet av raden, som måste upprepas två gånger varför kommer att bli tydligt lite senare.

Du kan utföra denna begäran mycket enkelt. Kör programmet telnet.exe, skriv in www.php.net som värd, ange port 80 och skriv helt enkelt denna begäran genom att trycka på Enter två gånger som rnrn. Som svar får du HTML-kod startsida webbplats www.php.net.

1.3 Begärans struktur

Låt oss titta på vad en HTTP-förfrågan består av. Allt är ganska enkelt. Låt oss börja med att en HTTP-förfrågan är en helt meningsfull text. Vad består den av i det allmänna fallet? Vi kommer att överväga HTTP 1.0-protokollet. Så :


Begäran - Rad [ Allmänt - Rubrik | Begäran - Header | Entity - Header ] rn [ Entity - Body ]


* Request-Line - begäran rad
*

Formatera : "Method Request-URI HTTP-Versionrn"
* Metod -
metoden med vilken Request-URI-resursen kommer att behandlas kan vara GET, POST, PUT, DELETE eller HEAD.
* Request-URI - en relativ eller absolut länk till en sida med en uppsättning parametrar, till exempel /index.html eller http://www.myhost.ru/index.html eller /index.html?a=1&b= qq. I det senare fallet kommer servern att skickas en begäran med en uppsättning variabler a och b med motsvarande värden, och "&"-tecknet - ett et-tecken - fungerar som en separator mellan parametrarna.
* HTTP-version - version HTTP-protokoll och, i vårt fall, "HTTP/1.0".

Vi är extremt intresserade av GET- och POST-behandlingsmetoder. Med GET-metoden kan du enkelt skicka parametrar till skriptet, och med POST-metoden kan du emulera formulärinlämning.

För GET-metoden kan Request-URI se ut så här: "/index.html?param1=1¶m2=2".

* General-Header - huvuddelen av rubriken.
Formatera:
Kan bara ha två parametrar: Datum eller Pragma. Datum - Greenwich-datum i formatet "Veckodag, Dag Månad År TT:MM:SS GMT", till exempel "tis, 15 nov 1994 08:12:31 GMT" - datum då begäran skapades. Pragma kan ha ett enda no-cache-värde, vilket inaktiverar sidcache.

* Request-Header - en del av rubriken som beskriver begäran.

Request-Header kan ha följande parametrar : Tillåt, Auktorisering, Från, Om-Ändrad-Since, Refererer, User-Agent.
I det här kapitlet kommer vi inte att beakta parametern Authorization, eftersom den används för att komma åt privata resurser, vilket inte behövs särskilt ofta. Du kan lära dig hur du skapar en auktoriserad åtkomsthuvud själv på www.w3c.org.

* Tillåt - ställer in acceptabla bearbetningsmetoder.
Format: "Tillåt: GET | HEADn".
Parametern ignoreras när POST-bearbetningsmetoden specificeras i Request-Line. Anger acceptabla bearbetningsmetoder för begäran. Proxyservrar ändrar inte parametern Tillåt och den når servern oförändrad.

* Från - e-postadress vem som skickade begäran.
Format: "Från: adderssrn".
Till exempel, "Från: [e-postskyddad]".

* If-Modified-Since - indikerar att begäran inte har ändrats sedan ett och annat tillfälle.
Format: "If-Modified-Since: datern"
Används endast för GET-behandlingsmetoden. Datumet anges i GMT i samma format som för parametern Date i General-Header.

* Referrer - en absolut länk till sidan från vilken begäran initierades, det vill säga en länk till sidan från vilken användaren kom till vår.
Format: "Referrer: urln".
Exempel: "Referrer: www.host.ru/index.htmln".
* User-Agent - webbläsartyp.
Till exempel: "User-Agent: Mozilla/4.0n"

* Entity-Header - en del av rubriken som beskriver Entity-Body-data.
Den här delen av begäran anger parametrar som beskriver sidans kropp. Entity-Header kan innehålla följande parametrar: Tillåt, Content-Encoding, Content-Length, Content-Type, Expires, Last-Modified, extension-header.

* Tillåt - en parameter som liknar Tillåt från General-Header.

* Content-Encoding - Entity-Body datakodningstyp.
Format: "Innehållskodning: x-gzip | x-compress | annan typ".
Exempel: "Content-Encoding: x-gzipn". Tecknet "|". betyder ordet "eller", det vill säga det eller det eller det osv.
En annan typ kan indikera hur data är kodad, till exempel för POST-metoden: "Content-Encoding: application/x-www-form-urlencodedn".

* Content-Length - antalet byte som skickas till Entity-Body. Content-Length-värdet har en helt annan betydelse för data som skickas i MIME-format, där det fungerar som en parameter för att beskriva en del av datan - "external/entity-body". Giltiga tal är heltal från noll och uppåt.
Exempel: "Content-Length: 26457n".

* Content-Type - typ av överförd data.
Till exempel: "Content-Type: text/htmln".

* Går ut - Tid då sidan ska tas bort från webbläsarens cache.
Format: "Upphörer: daterad". Datumformatet är detsamma som datumformatet för datumparametern från General-Header.

* Senast ändrad - tid sista ändring skickade data.
Format: "Senast ändrad: daterad". Datumformatet är detsamma som datumformatet för datumparametern från General-Header.

* Extension-header - en del av rubriken, som till exempel kan vara avsedd att bearbetas av en webbläsare eller annat program som tar emot dokumentet. I den här delen kan du beskriva dina parametrar i formatet "ParameterName: parametervaluen". Dessa parametrar kommer att ignoreras om klientprogrammet inte vet hur de ska behandlas.
Till exempel: "Cookie: r=1rn" - sätter välkända cookies för sidan.

Och nu, efter sådana fruktansvärda ord, låt oss försöka lugna oss lite och förstå vad vi behöver? Naturligtvis kommer vi att förstå med exempel.

Låt oss föreställa oss att vi behöver få en sida från webbplatsen genom att skicka cookies, annars kommer vi helt enkelt att skickas som objudna gäster, och dessutom är det känt att du får komma åt den här sidan först efter att du har besökt huvudsidan för webbplats.

2 GET-metoden

Låt oss skriva vår begäran.


HÄMTA http:
Värd: www. webbplats. springa

Cookie: inkomst = 1rn
rn


Denna förfrågan talar om för oss att vi vill få innehållet på sidan på http://www.site.ru/news.html med hjälp av GET-metoden. Värdfältet indikerar det denna sida finns på servern www.site.ru, referensfältet indikerar att vi kom för nyheter från sidans huvudsida, och fältet Cookie indikerar att vi tilldelades en sådan och en sådan cookie. Varför är fälten Host, Referer och Cookie så viktiga? Eftersom vanliga programmerare, när du skapar dynamiska webbplatser, kontrollera datafälten som visas i skript (inklusive PHP) i form av variabler. Vad är det här för? För att till exempel förhindra att sajten blir rånad, d.v.s. de ställde inte in ett program på den för automatisk nedladdning, eller så att en person som besöker webbplatsen alltid skulle komma till den bara från huvudsidan, etc.

Låt oss nu föreställa oss att vi behöver fylla i formulärfälten på sidan och skicka en begäran från formuläret, låt det finnas två fält i det här formuläret: inloggning och lösenord (inloggning och lösenord) - och, naturligtvis, vet vi inloggningen och lösenord.


HÄMTA http: //www.site.ru/news.html?login=Petya%20Vasechkin&password=qq HTTP/1.0rn
Värd: www. webbplats. springa
Referent: http://www.site.ru/index.htmlrn
Cookie: inkomst = 1rn
rn


Vår inloggning är "Petya Vasechkin" Varför ska vi skriva Petya%20Vasechkin? Det här är för att Särskilda symboler kan kännas igen av servern som tecken på närvaron av en ny parameter eller slutet på en begäran, etc. Därför finns det en algoritm för att koda parameternamn och deras värden för att undvika felsituationer i begäran. Full beskrivning av denna algoritm kan hittas här, och PHP har rawurlencode och rawurldecode-funktioner för kodning respektive avkodning. Jag skulle vilja notera att PHP gör avkodningen själv om kodade parametrar skickades i begäran. Detta avslutar det första kapitlet av min bekantskap med HTTP-protokollet. I nästa kapitel kommer vi att titta på byggnadsförfrågningar som POST (översatt från engelska som "skicka"), som kommer att vara mycket mer intressant, eftersom exakt den här typen förfrågningar används när data skickas från HTML-formulär.

3. POST-metoden.

I fallet med en HTTP POST-begäran finns det två alternativ för att överföra fält från HTML-formulär, nämligen att använda algoritmen application/x-www-form-urlencoded och multipart/form-data. Skillnaderna mellan dessa algoritmer är ganska betydande. Faktum är att den första typen av algoritm skapades för länge sedan, när HTML-språk har ännu inte tillhandahållit möjligheten att överföra filer via HTML-formulär. Så låt oss titta på dessa algoritmer med exempel.

3.1 Innehållstyp: application/x-www-form-urlencoded.

Vi skriver en begäran som liknar vår GET-begäran om att överföra inloggning och lösenord, som diskuterades i föregående kapitel:


LÄGGA IN http: //www.site.ru/news.html HTTP/1.0rn
Värd: www. webbplats. springa
Referent: http://www.site.ru/index.htmlrn
Cookie: inkomst = 1rn
Innehåll - Typ : ansökan / x - www - form - urlencodedrn
Innehåll - Längd: 35 miljoner kronor
rn


Här ser vi ett exempel på hur du använder rubrikfälten Content-Type och Content-Length. Content-Length anger hur många byte dataområdet kommer att uppta, vilket är separerat från rubriken av en annan nyrad rn. Men parametrarna som tidigare placerades i Request-URI för en GET-begäran finns nu i Entity-Body. Det kan ses att de är bildade på samma sätt, du behöver bara skriva dem efter titeln. Jag vill påpeka en sak till viktig poäng, ingenting hindrar, samtidigt med uppsättningen parametrar i Entity-Body, att placera parametrar med andra namn i Request-URI, till exempel:


LÄGGA IN http: //www.site.ru/news.html?type=user HTTP/1.0rn
.....
rn
login = Petya % 20Vasechkin & lösenord = qq


3.2 Innehållstyp: multipart/form-data

Så snart internetvärlden insåg att det skulle vara trevligt att skicka filer via formulär, började W3C-konsortiet slutföra POST-format begäran. Vid den tiden, MIME-formatet (Multipurpose Internet Mail Extensions - multi-purpose protokolltillägg för att skapa E-postmeddelanden), därför, för att inte uppfinna hjulet på nytt, bestämde vi oss för att använda en del av detta format generera meddelanden för att skapa POST-förfrågningar i HTTP-protokollet.

Vilka är de största skillnaderna mellan det här formatet och typen application/x-www-form-urlencoded?

Den största skillnaden är att Entity-Body nu kan delas in i sektioner, som är åtskilda av gränser (gräns). Det som är mest intressant är att varje avsnitt kan ha sin egen rubrik för att beskriva den data som lagras i den, d.v.s. Du kan överföra data på en begäran olika typer(hur in Postbrev Du kan överföra filer samtidigt med text).

Så låt oss börja. Låt oss överväga samma exempel igen med överföring av inloggning och lösenord, men nu i ett nytt format.


LÄGGA IN http: //www.site.ru/news.html HTTP/1.0rn
Värd: www. webbplats. springa
Referent: http://www.site.ru/index.htmlrn
Cookie: inkomst = 1rn

Innehåll - Längd: 209 rn
rn
-- 1BEF0A57BE110FD467Arn
Innehåll - Disposition : form - data ; namn = "logga in" rn
rn
Petya Vasechkinrn
-- 1BEF0A57BE110FD467Arn
Innehåll - Disposition : form - data ; namn = "lösenord" rn
rn
qqrn
-- 1BEF0A57BE110FD467A -- rn


Låt oss nu förstå vad som står. :-) Jag har medvetet markerat några rn-tecken i fet stil så att de inte smälter samman med data. Om du tittar noga kommer du att lägga märke till gränsfältet efter Content-Type. Detta fält anger sektionsavgränsaren - kantlinje. Gränsen kan vara en sträng bestående av latinska bokstäver och siffror, samt några andra symboler (tyvärr kommer jag inte ihåg vilka). I brödtexten läggs "--" till i början av gränsen, och begäran slutar med en gräns, till vilken tecknen "--" också läggs till i slutet. Vår begäran har två avsnitt, den första beskriver inloggningsfältet och den andra beskriver lösenordsfältet. Content-Disposition (datatypen i avsnittet) säger att detta kommer att vara data från formuläret, och namnfältet anger namnet på fältet. Det är här sektionshuvudet slutar och vad som följer är sektionsdataområdet där fältvärdet är placerat (du behöver inte koda värdet!).

Jag skulle vilja göra dig uppmärksam på det faktum att du inte behöver använda Content-Length i avsnittsrubriker, men i förfrågningshuvudet bör du och dess värde är storleken på hela Entity-Body, som visas efter andra rn följande Innehållslängd: 209rn. De där. Entity-Body separeras från rubriken med en extra radbrytning (som också kan ses i avsnitt).

Låt oss nu skriva en begäran om att överföra en fil.


LÄGGA IN http: //www.site.ru/postnews.html HTTP/1.0rn
Värd: www. webbplats. springa
Referent: http://www.site.ru/news.htmlrn
Cookie: inkomst = 1rn
Content-Type: multipart/form-data; gräns = 1BEF0A57BE110FD467Arn
Innehåll - Längd: 491rn
rn
-- 1BEF0A57BE110FD467Arn
Innehåll - Disposition : form - data ; namn = "news_header" rn
rn
Exempel newsrn
-- 1BEF0A57BE110FD467Arn
Innehåll - Disposition : form - data ; name = "nyhetsfil" ; filnamn = "news.txt" rn
Innehåll - Typ : applikation / oktett - streamrn
Innehåll - Överföring - Kodning : binaryrn
rn
Här är nyheterna, som finns i nyhetsfilen. txtrn
-- 1BEF0A57BE110FD467A -- rn


I det här exemplet skickar det första avsnittet nyhetstiteln och det andra avsnittet skickar filen news.txt. Om du är uppmärksam kommer du att se fälten filnamn och innehållstyp i det andra avsnittet. Filnamnsfältet anger namnet på filen som skickas, och fältet Content-Type anger typen av denna fil. Applikation/oktettström anger att detta är en standarddataström, och Content-Transfer-Encoding: binär anger att detta är binär data, inte kodad på något sätt.

En mycket viktig punkt. Majoritet CGI-skript skriven av smarta människor, så de gillar att kontrollera typen av den inkommande filen, som är i Content-Type. För vad? Oftast används uppladdning av filer på webbplatser för att ta emot bilder från besökaren. Så webbläsaren själv försöker bestämma vilken typ av fil besökaren vill skicka och infogar lämplig innehållstyp i begäran. Skriptet kontrollerar det vid mottagandet, och om det till exempel inte är en gif eller jpeg ignorerar det den här filen. När du skapar en begäran "manuellt", ta därför hand om Content-Type-värdet så att det ligger närmast formatet för den överförda filen.

Bild/gif för gif
bild/jpeg för jpeg
bild/png för png
bild/tiff för tiff (som används extremt sällan, formatet är för rymligt)

I vårt exempel genereras en begäran där textfil. En begäran om överföring av en binär fil genereras på samma sätt.

4. Efterskrift.

Jag tror att det inte är värt att prata i detalj om att skicka förfrågningar till servern. Detta är en fråga om ren RHP-teknik :-). Det räcker med att noggrant läsa avsnittet om funktioner för att arbeta med sockets, eller om funktionerna i CURL-modulen i den officiella PHP-dokumentationen.

Från ovanstående hoppas jag att det nu är klart varför frågan är: "Hur kan jag generera en POST-förfrågan med hjälp av rubrikfunktionen?" - meningslöst. Header(string)-funktionen lägger endast till en post i begäranshuvudet, men inte till begärandekroppen.

Tillbaka

GET- och POST-metoder i HTTP och HTTPS är de två mest populära metoderna som används för att överföra data från klient till server med HTTP (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 betydande skillnader mellan dem.

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, är vikten av att förstå GET metoder och POST. I den här artikeln kommer vi att titta på vad HTTP GET-metoden är, vad HTTP POST-metoden är, när varje begäran ska användas och vad skillnaden är mellan dem. Låt oss titta på varje koncept separat.

Vad är HTML?

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



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

<Тело>

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

Den första raden anger vilken typ av innehåll som finns i dokumentet., Och , som alla ingår i exemplet ovan. Sidtiteln, metadata och länkar till ankarfiler placeras mellan det faktiska sidinnehållet placeras mellan taggarna .

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, kommer HTML5-sidan att ha mindre kod. Detta beror på det faktum 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 serverspråk skript som PHP eller ASP. Dock till och med dynamiska sidor måste formateras med använder HTML. Därför genererar skriptspråk ofta HTML-kod som skickas till webbläsaren.

HTTP Hypertext Transfer Protocol är designat 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å begäransmetoder GET och POST

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

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

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

Översättningen av GET och POST betyder bokstavligen mottagande och efterbearbetning.

Mer om HTTP

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

HTTP använder en server-klient-modell. Klienten kan vara en hemdator, bärbar dator eller mobilenhet. En HTTP-server är vanligtvis ett webbhotell med programvara webbserver som Apache eller IIS. När en användare går in på en webbplats skickar webbläsaren en förfrågan till motsvarande webbserver och svarar med kod HTTP-tillstånd. Om URL:en är giltig och anslutningen beviljas 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 (behörighet krävs);

    500 — Internt fel server (kallas ofta felaktig konfiguration server).

POST och GET i HTTP

HTTP definierar GET-kommandon och POST, som används för att behandla 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, en förlängning av HTTP som är utformad för säkra dataöverföringar.

Webbadresser som börjar med "http://" finns tillgängliga på standardprotokoll hypertextöverföringar och standard till port 80. URL:er 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 utförs av datorer och andra elektroniska enheter när de är påslagna. Testresultat kan visas på skärmen, visas via blinkande lysdioder eller helt enkelt spelas in internt. I datorsystem utförs POST-operationen i början av startsekvensen. Om alla tester går igenom fortsätter resten av startprocessen automatiskt.

OS Mac-enheter och Windows 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 meddelandet "På PC" kan visas på din bildskärm. POST-fel visas ofta på BIOS-informationsskärmen. De kan visas som kryptiska koder som "08" eller som Systemmeddelande, till exempel "Fel system minne när de fördrivits." På Mac-fel POSTs indikeras ofta med en enkel grafik, till exempel en trasig mappikon, vilket indikerar det startenhet hittades inte.

Fysiska manifestationer

I vissa fall kanske datorskärmen inte ens slås på innan POST-fel. Om detta händer kan felkoder visas genom att blinka LED-indikatorer eller ljudsignaler. Till exempel, Apple iMac spelar tre toner i följd, pausar i fem sekunder och upprepar sedan tonerna 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 bara används datortekniker regelbundet. Det är dock en bra akronym eftersom det hjälper dig 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. Du kan sedan vidta lämplig åtgärd - ta bort minnesmodulen eller ominstallation grafikkort och sedan starta om utrustningen.

SKAFFA SIG

POST är också en variabel överföringsmetod HTML-formulär från en webbsida till en annan utan att visa dem i adressfältet. Alternativ metod- 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 meddelandets brödtext. 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 method=POST eller method=GET (standard) på elementet . Den angivna metoden avgör hur formulärdata skickas till servern. När GET-metoden används kodas all formulärdata i URL:en som frågesträngsparametrar. Med POST visas formulärdata i brödtexten i HTTP-begäranmeddelandet.

Skillnader i formpresentation

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

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

Som en del av en POST-begäran kan en godtycklig mängd data av vilken typ som helst skickas till servern i meddelandets brödtext. Rubrikfältet i en POST-begäran indikerar vanligtvis Internetmedietypen för meddelandetexten.

Huvudskillnaden mellan GET- och POST-förfrågningar är att de motsvarar olika HTTP-förfrågningar som definieras i HTTP-specifikationerna. Inlämningsprocessen för båda metoderna börjar 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 det för METHOD="GET" endast triggas via application/x-www-form-urlencoded This formulärdata 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 det i formulärets datamängd, kodat med innehållstypen application/x-www-form-urlencoded). Webbläsaren behandlar sedan denna URL som om den länkade till en länk (eller som om användaren hade skrivit in URL:en manuellt). Webbläsaren delar upp URL:en i delar 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 dessa formulär är begränsade till ASCII-koder. Särskild uppmärksamhet Du bör vara uppmärksam på att koda och avkoda andra typer av tecken när du skickar dem till en ASCII-URL.

Att skicka in ett formulär med METHOD="POST" gör att en POST-begäran skickas med hjälp av action-attributvärdet och ett meddelande som genereras enligt innehållstypen som specificeras av enctype-attributet.

PHP

PHP är inbyggt i HTML. Detta innebär att PHP-kod kan infogas på en HTML-sida. PHP-koden läses eller tolkas av servern som är värd för sidan. Utdata från GET- och POST-funktioner i PHP på en sida returneras vanligtvis som HTML-kod som kan läsas av webbläsaren. Eftersom PHP-kod konverteras till HTML innan sidan laddas kan användare inte se PHP-koden på sidan. Det gör det PHP-sidor tillräckligt 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. Syftet 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 hjälpt det att bli 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 koll enskilda meddelanden, besökare och användarkommentarer.

Även om det finns tusentals WordPress-mallar och plugins tillgängliga, POST-system GET i WordPress har fortfarande sina begränsningar. Eftersom det är en mallbaserad tjänst måste användaren börja med en förbyggd webbplats istället för att skapa sidor från grunden. Dessutom finns det ingen möjlighet att infoga skript eller underhålla en databas med samma kontrollnivå som en anpassad webbplats erbjuder.

POST_GET_ID()-verktyget tillåter skript att manipulera objektet eftersom det har ett unikt ID och när det skickas som ett formulär via dessa metoder kommer rullgardinsmenyn att skickas med ett unikt ID som gör att skriptet kan se vilket inlägg som körs. Alternativt kan en dold variabel skickas som gör att skriptet kan se vilket inlägg som hör till vyn.







2024 gtavrl.ru.