Kā izskatās saņemšanas pieprasījums. Izmantojot GET un POST metodes
Mūsdienās visbiežāk tiek izmantotas tikai divas HTTP metodes: GET un POST. Taču izrādījās, ka pat starp šīm divām “priedēm” tīmekļa izstrādātājiem izdodas apmaldīties. Tam ir izskaidrojums: abas metodes var izmantot, lai iegūtu vienu un to pašu rezultātu. Taču jāatceras, ka jebkuras metodes nepārdomāta izmantošana var radīt postošas sekas, tostarp lielas slodzes uz kanālu un drošības caurumiem.
Lai no tā izvairītos, pietiek vienkārši sīkāk izprast šo metožu mērķus un atšķirības.
Ja iedziļināsies metožu nosaukumu nozīmē, daudz kas kļūs skaidrāks. GET (no angļu valodas uz saņemt), t.i. jāizmanto datu vaicāšanai. POST (no angļu valodas send pa pastu) - izmanto datu nosūtīšanai uz serveri. Šķiet, ka viss ir ārkārtīgi vienkārši un skaidri. Bet, kurš vēlas izstrādāt vietnes, kas ir nedaudz sarežģītākas nekā vizītkaršu vietne ar vienu atsauksmju veidlapu, labāk ir labāk iepazīt šo problēmu.
Droši un nedroši HTTP pieprasījumi
HTTP 1.1 specifikācija ievieš divus jēdzienus: drošs un nedrošs pieprasījums vai precīzāk, metode.
Drošas metodes ir metodes, kas var tikai pieprasīt informāciju. Tie nevar mainīt pieprasīto resursu, kā arī nevar radīt nevēlamus rezultātus lietotājam, citiem vai serverim. Drošu piemēri ir tīmekļa lapas vai attēla HTML koda pieprasīšana. Drošas metodes ietver HEAD un GET.
Piezīme
Patiesībā amatnieki, protams, var nodarīt kaitējumu ar GET pieprasījumiem. Piemēram, vaicājumu cilpas.
Nedroši vaicājumi, kā visi jau ir uzminējuši, var izraisīt sliktas sekas, ja tos izmantos atkārtoti. Šādi pieprasījumi var mainīt pieejamā resursa saturu. Šādu pieprasījumu piemēri: ziņojumu sūtīšana, reģistrācija, tiešsaistes maksājumi. Nedrošās metodes ietver POST, PUT, DELETE.
Idempotentas metodes
Idempotence ir metožu īpašība, kas ar daudziem atkārtotiem izsaukumiem atgriezīs to pašu rezultātu, izņemot gadījumus, kad informācija ir novecojusi. Tas nozīmē, ka, piekļūstot vienam un tam pašam URL, visi lietotāji redzēs vienu un to pašu tīmekļa lapu, attēlu, video utt. Šī īpašība ir metodēm GET, PUT, DELETE.
Tagad sīkāk aplūkosim pašas GET un POST metodes: uzrakstīsim katrai īsu “kopsavilkumu”.
GŪT
- paredzēts datu saņemšanai no servera;
- pieprasījuma pamatteksts ir tukšs;
- apstrādāts servera pusē ātrāk un ar mazāku servera resursu patēriņu tukšā pieprasījuma korpusa dēļ;
- mainīgo lielumu pārsūtīšana notiek adreses joslā (tā to redz lietotājs; tehniski dati tiek pārsūtīti vaicājuma rindā) un tāpēc ir redzama informācija par mainīgajiem un to vērtībām (dati nav aizsargāti);
- spēj pārsūtīt uz serveri nelielu datu apjomu: ir ierobežojumi URL garumam, kas ir atkarīgs no pārlūkprogrammas, piemēram, IE6 = 2Kb. Yahoo! izstrādātāji iesaka koncentrēties uz šo numuru;
- var pārsūtīt tikai ASCII rakstzīmes;
- šādu pieprasījumu var nokopēt un saglabāt (piemēram, grāmatzīmēs);
- pieprasījumu var saglabāt kešatmiņā (to var kontrolēt);
- lai vēl vairāk samazinātu kanāla un servera slodzi, ir pieejami nosacījumi un daļēji pieprasījumi;
- nepārtrauc HTTP savienojumu (ja serverī ir iespējots KeepAlive režīms).
POSTĪT
- paredzēts datu nosūtīšanai uz serveri;
- datu pārsūtīšana notiek pieprasījuma pamattekstā;
- servera puses apstrāde ir lēnāka un “smagāka” nekā GET, jo papildus galvenēm ir jāanalizē arī pieprasījuma pamatteksts;
- spēj pārsūtīt lielu datu apjomu;
- spēj pārsūtīt failus;
- ar POST metodi ģenerētu lapu nevar saglabāt kā grāmatzīmes;
- pārtrauc HTTP savienojumu;
- Lai pārsūtītu pat ļoti nelielu informācijas apjomu, lielākā daļa pārlūkprogrammu nosūta vismaz divas TCP paketes: galveni un pēc tam pieprasījuma pamattekstu.
Izrādās, ka šīs divas metodes nav tik līdzīgas. Viena vai otra izmantošana ir jānosaka pēc veicamā uzdevuma, nevis tam, vai GET tiek izmantots pēc noklusējuma vai ar to ir vieglāk strādāt. GET, protams, vairumā gadījumu ir labāks risinājums, it īpaši, veidojot ātru AJAX, taču neaizmirstiet par tā trūkumiem. Es sev izveidoju vienkāršu algoritmu-piezīmi par metodes izvēli.
Šī ziņa ir atbilde uz jautājumu, kas uzdots vienā no maniem rakstiem.
Šajā rakstā vēlos pastāstīt, kas ir HTTP metodes GET/POST/PUT/DELETE un citas, kāpēc tās tika izgudrotas un kā tās izmantot saskaņā ar REST.
HTTP
Tātad, kāds ir viens no galvenajiem interneta protokoliem? Pedantus nosūtīšu uz RFC2616, pārējo pastāstīšu cilvēcīgi :)Šis protokols apraksta mijiedarbību starp diviem datoriem (klientu un serveri), kas veidota, pamatojoties uz ziņojumiem, ko sauc par pieprasījumu (Request) un atbildi (Response). Katrs ziņojums sastāv no trim daļām: sākuma līnijas, galvenes un pamatteksta. Šajā gadījumā ir nepieciešama tikai starta līnija.
Pieprasījuma un atbildes sākuma rindiņām ir dažādi formāti - mūs interesē tikai pieprasījuma sākuma līnija, kas izskatās šādi:
METODES URI HTTP/ VERSIJA ,
Kur METHOD ir HTTP pieprasījuma metode, URI ir resursa identifikators, VERSION ir protokola versija (pašreizējā versija ir 1.1).
Virsraksti ir nosaukumu un vērtību pāru kolekcija, kas atdalīta ar kolu. Virsraksti sniedz dažādu pakalpojumu informāciju: ziņojuma kodējumu, pārlūkprogrammas nosaukumu un versiju, adresi, no kuras klients nāca (novirzītājs) un tā tālāk.
Ziņojuma pamatteksts ir faktiskie pārsūtāmie dati. Atbildē pārsūtītie dati, kā likums, ir pārlūkprogrammas pieprasītā HTML lapa, un pieprasījumā, piemēram, ziņojuma pamattekstā, tiek pārsūtīts serverī augšupielādēto failu saturs. Taču, kā likums, pieprasījumā vispār nav ziņojuma pamatteksta.
HTTP mijiedarbības piemērs
Apskatīsim piemēru.Pieprasīt:
GET /index.php HTTP/1.1 Host: example.com Lietotāja aģents: Mozilla/5.0 (X11; U; Linux i686; ru; rv: 1.9b5) Gecko/2008050509 Firefox/3.0b5 Akceptēt: text/html Savienojums: aizvērt
Pirmā rinda ir vaicājuma rinda, pārējās ir galvenes; trūkst ziņojuma pamatteksta
Atbilde:
HTTP/1.0 200 OK Serveris: nginx/0.6.31 Satura valoda: ru Satura veids: text/html; charset=utf-8 Satura garums: 1234 Savienojums: aizvērt ... PATI HTML LAPA...
Resursi un metodes
Atgriezīsimies pieprasījuma sākuma rindiņā un atcerēsimies, ka tajā ir tāds parametrs kā URI. Tas nozīmē Uniform Resource Identifier — vienotu resursu identifikatoru. Resurss parasti ir fails serverī (piemērs URI šajā gadījumā ir “/styles.css”), taču kopumā resurss var būt arī kāds abstrakts objekts (“/blogs/webdev/” - punkti uz “Web” bloka izstrādi”, nevis uz konkrētu failu).HTTP pieprasījuma veids (saukts arī par HTTP metodi) norāda serverim, kādu darbību mēs vēlamies veikt ar resursu. Sākotnēji (90.gadu sākumā) tika pieņemts, ka klients no resursa var vēlēties tikai vienu lietu - to saņemt, bet tagad, izmantojot HTTP protokolu, var izveidot ierakstus, rediģēt profilu, dzēst ziņas un daudz ko citu. Un šīs darbības ir grūti apvienot ar terminu “kvīts”.
Lai atšķirtu darbības no resursiem HTTP metožu līmenī, tika izgudrotas šādas iespējas:
- GET - iegūt resursu
- POST - resursu izveide
- PUT — resursu atjauninājums
- DELETE — resursa dzēšana
Sāk spēlēt REST
REST (REpresentational State Transfer) ir termins, ko 2000. gadā ieviesa Rojs Fīldings, viens no HTTP protokola izstrādātājiem, kā tīmekļa lietojumprogrammu veidošanas principu grupas nosaukumu. Kopumā REST aptver plašāku apgabalu nekā HTTP – to var izmantot arī citos tīklos ar citiem protokoliem. REST apraksta klienta un servera mijiedarbības principus, pamatojoties uz jēdzieniem “resurss” un “darbības vārds” (var saprast kā subjektu un predikātu). HTTP gadījumā resurss tiek identificēts pēc tā URI, un darbības vārds ir HTTP metode.REST iesaka atteikties no viena un tā paša URI izmantošanas dažādiem resursiem (tas ir, divu dažādu rakstu adreses, piemēram, /index.php?article_id=10 un /index.php?article_id=20 — tas nav REST veids) un izmantojot dažādas HTTP metodes dažādām darbībām. Tas ir, tīmekļa lietojumprogramma, kas rakstīta, izmantojot REST pieeju, izdzēsīs resursu, piekļūstot tam ar HTTP DELETE metodi (tas, protams, nenozīmē, ka ir jādod iespēja izdzēst visu un visus, bet jebkura lietojumprogrammas dzēšanas pieprasījumam ir jāizmanto HTTP DELETE metode).
REST sniedz programmētājiem iespēju rakstīt standartizētas un nedaudz skaistākas tīmekļa lietojumprogrammas nekā iepriekš. Izmantojot REST, jauna lietotāja pievienošanas URI būs nevis /user.php?action=create (GET/POST metode), bet gan vienkārši /user.php (stingri POST metode).
Rezultātā, apvienojot esošo HTTP specifikāciju un REST pieeju, dažādas HTTP metodes beidzot iegūst jēgu. GET - atgriež resursu, POST - izveido jaunu, PUT - atjaunina esošu, DELETE - dzēš.
Problēmas?
Jā, ar REST lietošanu praksē ir neliela problēma. Šo problēmu sauc par HTML.PUT/DELETE pieprasījumus var nosūtīt, izmantojot XMLHttpRequest, manuāli sazinoties ar serveri (teiksim, caur curl vai pat caur telnet), taču nevar izveidot HTML veidlapu, kas nosūta pilnvērtīgu PUT/DELETE pieprasījumu.
Lieta ir tāda, ka HTML specifikācija neļauj jums izveidot veidlapas, kas iesniedz datus, izņemot, izmantojot GET vai POST. Tāpēc, lai normāli strādātu ar citām metodēm, tās ir mākslīgi jāatdarina. Piemēram, programmā Rack (mehānisms, uz kura pamata Ruby mijiedarbojas ar tīmekļa serveri; Rails, Merb un citi Ruby ietvari tiek veidoti, izmantojot Rack) veidlapai var pievienot slēptu lauku ar nosaukumu "_method" un kā vērtību norādiet metodes nosaukumu (piemēram, "PUT") — šajā gadījumā tiks nosūtīts POST pieprasījums, bet Rack varēs izlikties, ka saņēmis PUT, nevis POST.
Šodien gribēju nedaudz iedziļināties primitīvās lietās un aprakstīt to, ko var atrast globālajā tīmeklī lielos daudzumos un bez lielām grūtībām. Mēs praktiski runāsim par HTTP protokola svētumu: POST un GET pieprasījumiem.
Daudzi jautās, kāpēc? Es atbildēšu īsi un skaidri: ne visi zina, kas tas ir un kāpēc tas ir vajadzīgs, un tie, kas vēlas par to uzzināt (lai gan IT jomā maz saprot), bieži vien nevar saprast, kas rakstīts daudzos, daudzos šim veltītajos rakstos. temats. Mēģināšu ar pirkstiem izskaidrot, kas ir POST un GET pieprasījumi un kam tie tiek izmantoti.
Tātad, sāksim savu ceļojumu pasakā...
Ja lasāt šo ziņojumu, tad vismaz zināt, kā izskatās internets un kas ir interneta vietne. Izlaižot visas globālā tīmekļa darba sarežģītības, mēs darbosimies ar tādiem jēdzieniem kā lietotājs un vietne. Lai ko arī teiktu, šīm divām vienībām ir kaut kādā veidā jāsadarbojas vienai ar otru. Piemēram, cilvēki sazinās savā starpā ar žestiem, emocijām un runu, dzīvnieki izdod kaut kādas skaņas, bet kas notiek, kad “sazinās” cilvēks un interneta resurss? Šeit ir informācijas apmaiņas gadījums, ko var pārnest uz cilvēka sarunu “Jautājums-Atbilde”. Turklāt gan lietotājs, gan vietne var uzdot jautājumus un atbildes. Kad mēs runājam par vietni, tās jautājumi un atbildes, kā likums, vienmēr tiek izteiktas interneta lapas veidā ar vienu vai otru tekstu. Ja runa ir par lietotāju, tad viss notiek pateicoties GET un POST pieprasījumiem (protams ne tikai, bet mēs par tiem runājam).
Tādējādi mēs noskaidrojām, ka mūsu tematiskie objekti ir nepieciešami, lai “sazinātos” ar vietnēm. Turklāt gan GET, gan POST pieprasījumus var izmantot, lai “uzdotu jautājumus” vietnei un “atbildētu” uz tiem. Kā viņi atšķiras? Viss ir pavisam vienkārši. Tomēr, lai izskaidrotu atšķirības, mums būs jāņem vērā piemērs, kuram mēs izmantosim tiešsaistes veikala plāna vietni.
Jūs, iespējams, bieži pamanījāt, meklējot kaut ko tiešsaistes veikalos, ka, meklējot, izmantojot filtrus, vietnes adrese no skaistā “http://magaazin.ru” pārvēršas par biedējošu “http://magaazin.ru/?category = kurpes&izmērs=38". Tātad viss, kas nāk aiz simbola "?", ir jūsu pieprasījums vietnei, un, lai būtu pilnīgi precīzs, šajā gadījumā jūs jautājat vietnei, kas tajā atrodas kategorijā "Apavi" no izmēriem "38" (šis piemērs ir ņemts no manas galvas, patiesībā viss var neizskatīties tik acīmredzami). Rezultātā mēs varam paši uzdot jautājumus, norādot tos vietnes adreses joslā. Acīmredzot šai metodei ir vairāki trūkumi. Pirmkārt, ikviens, kas atrodas blakus lietotājam pie datora, var viegli izspiegot visus datus, tāpēc šāda veida pieprasījumu izmantošana paroļu pārsūtīšanai ir ļoti nevēlama. Otrkārt, ir ierobežots virknes garums, ko var pārsūtīt no vietnes adreses lauka, kas nozīmē, ka nebūs iespējams pārsūtīt daudz datu. Tomēr neapšaubāma GET pieprasījumu izmantošanas priekšrocība ir tās lietošanas vienkāršība un iespēja ātri meklēt vietni, kas ir īpaši noderīga izstrādes laikā, taču tas ir cits stāsts...
Tagad parunāsim par POST pieprasījumiem. Gudri lasītāji, iespējams, ir sapratuši, ka galvenā atšķirība starp šo pieprasījumu un tā ekvivalentu ir pārsūtīto datu slepenība. Ja mēs uzskatām tiešsaistes veikalu, spilgts piemērs, kur tiek izmantots POST pieprasījums, ir reģistrācija vietnē. Vietne pieprasa jūsu datus, jūs aizpildāt šos datus un, noklikšķinot uz pogas “Reģistrēties”, nosūtāt savu atbildi. Turklāt šie dati nekādā veidā netiks parādīti ārēji. Ir arī vērts atzīmēt, ka var pieprasīt diezgan lielu informācijas daudzumu - un POST pieprasījumam nav ierobežojumu. Nu, ja pieskaraties mīnusam, tad šādu pieprasījumu nevar ātri ģenerēt. To nevar izdarīt bez īpašām prasmēm. Lai gan patiesībā viss nav tik sarežģīti, bet tas atkal ir cits stāsts.
Apkoposim. POST un GET pieprasījumi ir nepieciešami “saziņai” starp lietotāju un vietni. Tie būtībā ir gandrīz pretēji viens otram. Dažu vaicājumu veidu izmantošana ir atkarīga no konkrētās situācijas, un tikai viena veida vaicājumu izmantošana ir ārkārtīgi neērta.
Šis ieraksts ir paredzēts, lai izskaidrotu datu pārraides principus internetā, izmantojot divas galvenās metodes: GET un POST. Uzrakstīju to kā papildinājumu maiņu grafika ģeneratora instrukcijai tiem, kurus diez vai interesēs sīkāk ☺.
Dodieties uz šo adresi (tas ir vizuālam skaidrojumam): http://calendarin.net/calendar.php?year=2016 Pievērsiet uzmanību pārlūkprogrammas adreses joslai: calendarin.net/calendar.php ?gads=2016 Galvenais fails tiek nosaukts, aiz tā ir jautājuma zīme (?) un parametrs "year" ar vērtību "2016". Tātad viss, kas seko jautājuma zīmei, ir GET pieprasījums. Tas ir vienkārši. Lai nodotu vairāk nekā vienu parametru, tie ir jāatdala ar & (&). Piemērs: calendarin.net/calendar.php ?year=2016&display=work-days-and-days-off
Galvenais fails joprojām tiek nosaukts, kam seko jautājuma zīme (?), pēc tam parametrs “year” ar vērtību “2016”, tad & (&), pēc tam parametrs “display” ar vērtību “work-days-”. un-dienas" -off".
GET parametrus var mainīt tieši pārlūkprogrammas adreses joslā. Piemēram, mainot vērtību "2016" uz "2017" un nospiežot taustiņu, tiks atvērts 2017. gada kalendārs.
Šī ir slēpta datu pārsūtīšana (lapas adrese nemainās); tas ir, jūs varat redzēt tikai to, kas tika pārsūtīts, izmantojot programmu (skriptu). Piemēram, šajā rīkā rakstzīmju skaitīšanai tekstā sākotnējie dati tiek pārsūtīti, izmantojot POST metodi: http://usefulonlinetools.com/free/character-counter.php
Ja jums ir kādi jautājumi, komentāri un mans e-pasts ir jūsu rīcībā.
Papildus GET metodei, par kuru mēs runājām iepriekšējā ziņojumā, ir vēl viena metode pieprasījuma nosūtīšanai, izmantojot HTTP protokolu - POST metode. Arī praksē ļoti bieži tiek izmantota POST metode.
Ja, lai sazinātos ar serveri, izmantojot GET metodi, mums vajadzēja tikai ievadīt pieprasījumu URL, tad POST metodē viss darbojas pēc cita principa.
Lai izpildītu šāda veida pieprasījumu, mums ir jānoklikšķina uz pogas ar atribūtu type="submit", kas atrodas tīmekļa lapā. Lūdzu, ņemiet vērā, ka šī poga atrodas elementā
![](https://i0.wp.com/steptosleep.ru/wp-content/uploads/2018/06/92221.png)
Ja lietotājs teksta laukā ievada kādu tekstu un noklikšķina uz pogas “Iesniegt”, teksta mainīgais tiks nosūtīts uz serveri ar lietotāja ievadītā satura vērtību.
POSTĪT un SAŅEMT pieprasījumus vienkāršiem vārdiem
Šis mainīgais tiks nosūtīts, izmantojot POST metodi.
Ja veidlapu rakstāt šādi: