Vra

Van wat ek kan versamel, daar is drie kategorieë:

  1. Nog nooit gebruik GET en gebruik POST
  2. Nog nooit gebruik POST en gebruik GET
  3. Dit maak nie saak watter een jy gebruik.

Is ek korrek in die veronderstelling dat dié drie gevalle?As dit so is, wat is'n paar voorbeelde van elk geval?

Was dit nuttig?

Oplossing

Gebruik POST vir vernietigende aksies soos die skepping (Ek is bewus van die ironie), redigering, en skrap, omdat jy 'n POST aksie in die adres bar van jou browser nie kan tref. Gebruik GET wanneer dit veilig is om 'n persoon toelaat om 'n aksie te roep. So 'n URL soos:

http://myblog.org/admin/posts/delete/357

As jy na 'n bevestiging bladsy, eerder as om die item eenvoudig die verwydering van. Dit is baie makliker om ongelukke te vermy hierdie manier.

POST is ook meer veilig as GET, omdat jy nie inligting te steek in 'n URL. En so die gebruik van GET as die method vir 'n HTML-vorm wat 'n wagwoord of ander sensitiewe inligting versamel is nie die beste idee.

Een laaste opmerking: POST kan 'n groter bedrag van inligting as GET oordra. 'Post' het geen grootte beperkings vir oordraagbare data, terwyl 'kry' is beperk tot 2048 karakters.

Ander wenke

In kort

  • Gebruik GET vir safe and idempotent versoeke
  • Gebruik POST vir neither safe nor idempotent versoeke

In besonderhede Daar is 'n behoorlike plek vir elke. Selfs as jy nie volg REST beginsels, kan 'n baie verkry word uit die leer oor rus en hoe 'n hulpbron-georiënteerde benadering werk.

  

'n rustige aansoek sal use GETs vir operasies wat beide safe and idempotent is.

'n safe operasie is 'n operasie wat not change the data nie versoek.

'n idempotent werking is een waarin die uitslag maak nie saak hoeveel keer jy dit versoek sal be the same.

Dit spreek vanself dat, as kry gebruik vir veilig bedrywighede hulle outomaties ook idempotente . Tipies van 'n te kry, is gebruik vir die herwinning van 'n hulpbron ( 'n vraag en die gepaardgaande antwoorde op stapel oorloop byvoorbeeld) of versameling van hulpbronne.

  

'n rustige app sal PUTs gebruik vir bedrywighede wat not safe but idempotent is.

Ek weet die vraag is oor te kry en post, maar ek sal terugkeer na pos in 'n tweede.

Tipies n PUT word gebruik vir 'n hulpbron (redigering van 'n vraag of 'n antwoord op stapel oorloop byvoorbeeld) te wysig.

  

'n POST sal gebruik word vir 'n operasie wat neither safe or idempotent.

Tipies van 'n POST sal gebruik word om 'n nuwe hulpbron byvoorbeeld 'n nuwe SO vraag (maar in sommige ontwerpe 'n PUT sal ook gebruik word vir hierdie) te skep.

As jy die plaas nie twee keer jy sal uiteindelik die skep van twee nuwe vrae.

  

Daar is ook 'n DELETE operasie, maar ek vermoed ek kan laat dat daar:)

Bespreking

In praktiese terme moderne webblaaiers tipies net ondersteuning te kry en na betroubaar (jy kan al hierdie bedrywighede via JavaScript oproepe uit te voer, maar in terme van die aangaan data in vorms en druk stuur jy oor die algemeen het die twee opsies). In 'n REST aansoek sal die POST dikwels oorheers word om die PUT verskaf en DELETE oproepe ook.

Maar, selfs al is jy nie volgende REST beginsels, dit kan nuttig wees om te dink in terme van die gebruik van te kry vir die herwinning / besigtiging inligting en post vir die skep / redigering inligting.

Jy moet nooit gebruik te kry vir 'n operasie wat data verander. As 'n soektog 'n skakel na jou kwaad op, of die kliënt boekmerke kruip kan dit groot moeilikheid spel.

Gebruik kry as jy nie omgee nie die versoek herhaal (dit wil sê dit nie staat verander).

Gebruik POST as die operasie doen verander staat die stelsel se.

kort weergawe

Kies: Gewoonlik gebruik vir voorgelê navrae, of enige versoek waar jy wil hê dat die gebruiker in staat wees om weer trek die presiese bladsy

.

Die voordele van AOO:

  • URLs veilig kan geboekmerk.
  • Pages kan veilig herlaai.

Die nadele van AOO:

NA: Gebruik vir hoër sekuriteit versoeke waar data kan gebruik word om 'n databasis of 'n bladsy wat jy wil nie iemand om boekmerk te verander.

Die voordele van die post:

  • Naam waarde pare word nie vertoon in url. (Security + = 1)
  • Unlimited aantal naam-waarde pare kan per pos aangeneem. Reference.

Die nadele van post:

  • Page daardie pos data gebruik kan nie boekmerk. (As jy dit so verkies.)

Langer weergawe

Direk vanaf die HyperText Transfer Protocol - HTTP / 1.1 :

  

9.3 AOO

     

Die GET-metode beteken haal enige inligting (in die vorm van 'n entiteit) is geïdentifiseer deur die Versoek-URI. Indien die versoek-URI verwys na 'n data vervaardiging proses, dit is die geproduseer data wat sal teruggestuur word as die entiteit in die reaksie en nie die bronteks van die proses, tensy daardie teks gebeur met die produksie van die proses wees.

     

Die semantiek van die GET-metode verander na 'n "voorwaardelike GET" indien die versoek boodskap sluit in 'n As-verander-sedert, As-gemodifiseer-Sedert As-wedstryd, As-Geen-wedstryd, of As-reeks kop veld . Dat 'n voorwaardelike GET-metode versoek dat die entiteit, net versprei ingevolge beskryf deur die voorwaardelike kop veld (s) omstandighede oorgedra word. Die voorwaardelike GET-metode is daarop gemik om onnodige netwerk te verminder deur toe te laat kas entiteite te verfris sonder dat verskeie versoeke of oordrag van data wat reeds deur die kliënt.

     

Die semantiek van die GET-metode verander na 'n "gedeeltelike GET" indien die versoek boodskap sluit in 'n Range kop veld. 'N Gedeeltelike AOO versoeke dat slegs 'n gedeelte van die entiteit oorgedra word, soos beskryf in artikel 14,35. Die gedeeltelike GET-metode is daarop gemik om onnodige netwerk te verminder deur toe te laat gedeeltelik-opgespoor entiteite wat voltooi moet word sonder die oordrag van data wat reeds deur die kliënt.

     

Die antwoord op 'n GET-versoek is cacheable as en slegs as dit voldoen aan die in artikel 13. beskryf vereistes vir HTTP caching

     

Sien artikel 15.1.3 vir sekuriteit oorwegings wanneer dit gebruik word vir vorms.

     

9.5 POST

     

Die POST-metode is gebruik om te versoek dat die oorsprong bediener aanvaar die   entiteit ingesluit in die versoek as 'n nuwe ondergeskikte van die hulpbron   word geïdentifiseer deur die Versoek-URI in die Versoek-Line. NA is ontwerp   om voorsiening te maak 'n eenvormige metode om die volgende funksies te dek:

     
      
  • Annotation van bestaande hulpbronne;

  •   
  • Boodskappe stuur 'n boodskap aan 'n bord, nuusgroep, poslys,   of 'n soortgelyke groep van artikels

  •   
  • Die verskaffing van 'n blok van data, soos die resultaat van die indiening van 'n   vorm, om 'n data-hantering proses;

  •   
  • Die uitbreiding van 'n databasis deur 'n aanhegnavraag operasie.

  •   
     

Die werklike funksie wat uitgevoer word deur die POST-metode word bepaal deur die   bediener en is gewoonlik afhanklik van die Versoek-URI. Die gepos entiteit   is ondergeskik aan dat URI in dieselfde manier as wat 'n lêer is ondergeskikte   om 'n gids wat dit, 'n nuus artikel is ondergeskik aan 'n   nuusgroep waarop dit gepos is, of 'n rekord is ondergeskik aan 'ndatabasis.

     

Die aksie wat uitgevoer word deur die POST-metode kan nie lei tot 'n   hulpbron wat uitgeken kan word aan 'n URI. In hierdie geval, óf 200   (OK) of 204 (geen inhoud) is die gepaste reaksie status,   na gelang van die vraag of die reaksie sluit 'n entiteit wat   beskryf die resultaat.

Die eerste belangrikste ding is die betekenis van KRY versus NA:

  • Kies moet gebruik word om ... te kry ... 'n paar inligting uit die bediener,
  • terwyl POST moet gebruik word om 'n paar inligting om die bediener stuur.

Daarna het 'n paar dinge wat jy kan opgemerk:

  • Die gebruik van AOO, jou gebruikers kan die "terug" -knoppie gebruik in hul leser, en hulle kan boekmerk bladsye
  • Daar is 'n beperking in die grootte van die parameters wat jy kan slaag as AOO (2KB vir 'n paar weergawes van Internet Explorer, as ek dit nie mis) , die limiet is veel meer vir POST, en oor die algemeen is afhanklik van opset die bediener se.

In elk geval, ek dink nie ons kan "live" sonder AOO: dink aan hoeveel URL's wat jy gebruik met parameters in die soektog string, elke dag - sonder KRY, sal almal wat nie werk nie; -)

Behalwe vir die verskil lengte beperkings in baie webblaaiers, daar is ook 'n semantiese verskil. Kry veronderstel "veilig" te wees in die sin dat hulle lees net bedrywighede wat nie die bediener staat hoef te verander. Poste sal tipies verander staat en sal waarskuwings op herindiening gee. Soekenjins 'web crawlers kan maak verwerf maar moet nooit poste maak.

Gebruik kry as jy wil om data te lees sonder om staat, en gebruik POST as jy wil staat te werk op die bediener.

My algemene reël is om te gebruik wanneer jy maak is versoeke om die bediener wat is nie van plan om staat te verander. Poste is gereserveer vir versoeke om die bediener wat staat verander.

Een praktiese verskil is dat blaaiers en webservers het'n beperking op die aantal karakters wat kan bestaan in'n URL.Dit verskil van die aansoek om aansoek, maar dit is beslis moontlik om dit te tref as wat jy het textareas in jou vorm.

Nog'n gotcha met Kry - hulle kry deur soekenjins geïndekseer en ander outomatiese stelsels.Google het een keer het'n produk wat sou pre-haal skakels op die bladsy wat jy lees, sodat hulle sal vinniger wees om te laai as jy kliek op die skakels.Dit veroorsaak groot verwoesting op webwerwe wat skakels soos delete.php?id=1 - mense verloor hul hele sites.

Gebruik kry wanneer jy die URL wil die toestand van die bladsy weerspieël. Dit is nuttig vir die lees van dinamiese gegenereerde bladsye, soos dié hier gesien. A POST gebruik moet word in 'n vorm om data in te dien, soos wanneer ek op die "Post Jou antwoord" knoppie. Dit produseer ook 'n skoonmaker URL aangesien dit nie 'n parameter string na die pad te genereer.

As gevolg GETs is suiwer URLs, hulle kan die kas deur die webblaaier en kan beter gebruik vir dinge soos konsekwent gegenereerde beelde wees. (Stel 'n periode)

Een voorbeeld van die Gravatar bladsy: http://www.gravatar.com/avatar / 4c3be63a4c2f539b013787725dfce802? d = monsterid

Kies mag effens beter prestasie yeild, sommige webservers skryf POST inhoud om 'n tydelike lêer voor oproep van die hanteerder.

Nog 'n ding om te oorweeg is die beperking op grootte. Kry word beperk deur die grootte van die URL, 1024 bytes deur die standaard, alhoewel blaaiers meer kan ondersteun.

meer data oordrag van as wat 'n POST moet gebruik om 'n beter leser verenigbaarheid kry.

Selfs minder as wat limiet is 'n probleem, as 'n ander plakkaat geskryf, iets in die URL kon eindig in ander dele van die Brower se UI, soos geskiedenis.

Daar is niks wat jy nie kan doen nie per-se. Die punt is dat jy nie veronderstel om te verander die bediener staat op 'n HTTP GET. HTTP gevolmagtigdes aanvaar dat sedert HTTP GET nie dan die staat verander of 'n gebruiker beroep HTTP GET een keer of 1000 keer maak geen verskil. Die gebruik van hierdie inligting wat hulle veronderstel dit veilig is om 'n cached weergawe van die eerste HTTP GET terugkeer. As jy die HTTP spesifikasie breek jy die risiko breaking HTTP kliënt en gevolmagtigdes in die natuur. Moet dit nie doen:)

Dit deurkruis in die konsep van rus en hoe die web is kinda bedoel op gebruik. Daar is 'n uitstekende podcast op Software Engineering radio dat 'n in diepte gesprek oor die gebruik van gee Kry en Post.

kry, is gebruik om data van die bediener, waar 'n update aksie nie moet nodig wees trek. Die idee is dat jy moet in staat wees om dieselfde GET-versoek oor en oor gebruik en het dieselfde inligting teruggekeer. Die URL het die kry inligting in die soektog string, omdat dit veronderstel was om in staat wees om maklik gestuur word na ander stelsels en mense soos 'n adres op waar om iets te vind.

Post is veronderstel om gebruik te word (ten minste deur die res argitektuur wat die web kinda is gebaseer op) vir stoot inligting aan die bediener / vertel van die bediener na 'n aksie uit te voer. Voorbeelde soos: Werk hierdie data, skep hierdie rekord.

1.3 Quick Kontrolelys vir keuse van HTTP GET of POST

Gebruik kry as:

    The interaction is more like a question (i.e., it is a safe operation such as a query, read operation, or lookup).

Gebruik POST as:

    The interaction is more like an order, or
    The interaction changes the state of the resource in a way that the user would perceive (e.g., a subscription to a service), or
    The user be held accountable for the results of the interaction.

Bron .

  

i dont sien 'n probleem met behulp van kry al is, ek gebruik dit vir 'n eenvoudige dinge waar dit sinvol om dinge op die navraag string te hou.

Deur dit te gebruik om die staat te werk - soos 'n GET van delete.php?id=5 om 'n bladsy verwyder - is baie riskant. Mense het bevind dat wanneer web Google se versneller begin voorafhaal URLs op bladsye - dit druk al die 'delete' links en uitgewis data mense se. Dieselfde kan gebeur met soekenjins.

POST kan groot data beweeg terwyl AOO kan nie.

Maar oor die algemeen is dit nie oor 'n shortcomming van AOO, eerder 'n konvensie as jy wil om jou webwerf / webapp mooi te gedra.

Het jy 'n blik op http://www.w3.org/2001 /tag/doc/whenToUseGet.html

Van RFC 2616 :

  

9.3
  Die GET-metode beteken haal enige inligting (in die vorm van   'n entiteit) is geïdentifiseer deur die   Versoek-URI. Indien die versoek-URI verwys   'n-data vervaardiging proses, dit is die   geproduseer data wat sal teruggestuur word   as die entiteit in die reaksie en nie   die bronteks van die proses, tensy   wat teks gebeur met die produksie van wees   die proses.

  

9.5 Stuur
die pos metode word gebruik om te versoek dat die oorsprong bediener   aanvaar die entiteit ingesluit in die   versoek as 'n nuwe ondergeskikte van die   resource geïdentifiseer deur die Versoek-URI   in die Versoek-Line. NA is ontwerp   om voorsiening te maak 'n eenvormige metode om die dek   volgende funksies:

     
      
  • Annotation van bestaande hulpbronne;
  •   
  • Plaas 'n boodskap aan 'n bord, nuusgroep, poslys, of   soortgelyke groep van artikels
  •   
  • Die verskaffing van 'n blok van data, soos die resultaat van die indiening van 'n vorm, 'n   data-hantering proses;
  •   
  • Die uitbreiding van 'n databasis deur 'n aanhegnavraag operasie.
  •   
     

Die werklike funksie wat uitgevoer word deur die   POST-metode word bepaal deur die   bediener en is gewoonlik afhanklik van die   Versoek-URI. Die gepos entiteit is   ondergeskik aan dat URI in dieselfde   manier dat 'n lêer is ondergeskik aan 'n   gids waarin dit voorkom, 'n nuus   artikel is ondergeskik aan 'n nuwe groep   waaraan dit gepos, of 'n rekord   ondergeskik aan 'n databasis.

     

Die aksie wat uitgevoer word deur die POST   metode kan nie lei tot 'n hulpbron   wat geïdentifiseer kan word deur 'n URI. in   hierdie geval, óf 200 (OK) of 204 (Geen   Inhoud) is die gepaste reaksie   status, afhangende van of   die reaksie sluit 'n entiteit wat   beskryf die resultaat.

Ek gebruik POST as ek nie wil hê mense moet die soektog string sien of wanneer die soektog string kry groot. Ook POST word benodig vir lêers wat gelaai is.

Ek het nie 'n probleem sien met behulp van KRY al is, gebruik ek dit vir eenvoudige dinge waar dit sinvol om dinge op die soektog string te hou.

Die gebruik van AOO sal toelaat skakel na 'n spesifieke bladsy moontlik te waar POST nie sou werk nie.

Eenvoudige weergawe van die post gesit word DELETE

  • gebruik te kry - as jy wil enige hulpbron soos Lys van data wat gebaseer is op enige id of Naam kry
  • gebruik POST - wanneer jy wil enige data te server stuur. Hou ook in gedagte pos is swaar gewig werking as gevolg van updation ons moet eerder gebruik geneem van post intern pos sal nuwe hulpbron te skep
  • gebruik geneem - wanneer jy

Die oorspronklike bedoeling was dat AOO is gebruik vir die kry van data terug en post was om enigiets wees. Die reël wat ek gebruik, is dat as ek iets terug is stuur na die bediener, gebruik ek pos. As ek net 'n beroep 'n URL om terug te kry data, ek gebruik AOO.

Lees die artikel oor HTTP in die Wikipedia . Dit sal verduidelik wat die protokol is en wat dit doen:

  

     

Versoeke 'n voorstelling van die gespesifiseerde hulpbron. Let daarop dat AOO moet nie gebruik word vir operasies wat newe-effekte, soos die gebruik van dit vir die neem van aksies in web aansoeke veroorsaak. Een van die redes hiervoor is dat AOO arbitrêr mag gebruik word deur robotte of crawlers, wat nie nodig sal hê om die newe-effekte wat 'n versoek moet veroorsaak oorweeg.

en

  

Stuur   Voorlê data te verwerk (bv van 'n HTML-vorm) om die geïdentifiseerde hulpbron. Die data is opgeneem in die liggaam van die versoek. Dit kan lei tot die skepping van 'n nuwe hulpbron of die updates van bestaande hulpbronne of beide.

Die W3C het 'n dokument genaamd URIs, Addressability, en die gebruik van HTTP KRY en post wat verduidelik wanneer om watter te gebruik. Met verwysing na

  

1.3 Quick Kontrolelys vir keuse van HTTP GET of POST

     
      
  • Gebruik kry as:      
        
    • Die interaksie is meer soos 'n vraag (dit wil sê, dit is 'n   veilige werking soos 'n navraag, lees operasie, of lookup).
    •   
  •   

en

  
      
  • Gebruik POST as:      
        
    • Die interaksie is meer soos 'n bevel, of
    •   
    • Die interaksie verander die staat van die hulpbron in 'n manier dat die gebruiker sal sien (bv 'n inskrywing op 'n diens), of     o Die gebruiker verantwoordelik vir die resultate van die interaksie gehou word.
    •   
  •   
     

Maar, voordat die finale besluit om te gebruik HTTP GET of POST asseblief ook oorweeg oorwegings vir sensitiewe data en praktiese oorwegings.

'n Praktiese voorbeeld sou wees wanneer jy 'n HTML-vorm in te dien. Jy spesifiseer óf post of kry vir die vorm aksie. PHP sal vul $ _GET en $ _POST dienooreenkomstig.

In PHP, POST datalimiet word gewoonlik deur jou php.ini stel. GET is beperk deur bediener / leser instellings ek glo -. gewoonlik rondom 255 grepe

Van w3schools.com :

  

Wat is HTTP?

     

Die HyperText Transfer Protocol (HTTP) is ontwerp om te aktiveer   kommunikasie tussen kliënte en bedieners.

     

HTTP werk as 'n versoek-reaksie protokol tussen 'n kliënt en bediener.

     

'n webblaaier mag die kliënt, en 'n aansoek op 'n rekenaar wees wat   gashere 'n webwerf kan die bediener wees.

     

Voorbeeld: 'n kliënt (browser) lê 'n HTTP versoek om die bediener;   dan die bediener gee 'n reaksie op die kliënt. die reaksie   bevat status inligting oor die versoek en kan ook bevat die   versoek inhoud.

     

Twee metodes HTTP Versoek: KRY en post

     

Twee algemene metodes om 'n versoek-reaksie tussen 'n kliënt en   bediener is:. KRY en post

     

te kry - Versoeke data uit 'n bepaalde bron POST - voorlê data te   verwerk tot 'n bepaalde bron

Hier het ons onderskei die groot verskille:

betree beeld beskrywing hier

Wel een groot ding is iets wat jy oor GET gaan word blootgestel via die URL in te dien. In die tweede plek as Ceejayoz sê, daar is 'n beperking op karakters vir 'n URL.

Nog 'n verskil is dat POST vereis oor die algemeen twee HTTP bedrywighede, terwyl kry net vereis een.

Edit: Ek moet verduidelik - vir 'n gemeenskaplike ontwikkeling patrone. Oor die algemeen reageer op 'n pos met 'n regop HTML webblad is 'n twyfelagtige ontwerp vir 'n verskeidenheid van redes, waarvan een is die irriterende "moet jy hierdie vorm weer in te dien, doen wat jy wil om dit te doen?" op te druk op die terug knoppie.

As beantwoord word deur ander, daar is 'n beperking op url grootte met te kry, en lêers kan met net post ingedien word.

Ek wil graag dat 'n mens voeg kan dinge toe te voeg tot 'n databasis met 'n get en uit te voer aksies met 'n post. Wanneer 'n script 'n pos of 'n get ontvang, kan dit doen wat die skrywer wil om dit te doen. Ek glo die gebrek aan begrip is afkomstig van die bewoording van die boek gekies het of hoe jy dit lees.

'n script skrywer moet gebruik poste aan die databasis te verander en te gebruik kry net vir herwinning van inligting.

Scripting taal verskaf baie middele waarmee toegang tot die versoek. Byvoorbeeld, PHP laat die gebruik van $_REQUEST om óf 'n pos of 'n get te haal. 'N Mens moet hierdie ten gunste van die meer spesifieke $_GET of $_POST vermy.

In web ontwikkeling, daar is 'n baie meer ruimte vir interpretasie. Daar is wat 'n mens moet en wat 'n mens kan doen, maar watter een is beter is dikwels vir debat. Gelukkig, in hierdie geval, daar is geen dubbelsinnigheid. Jy moet gebruik poste om data te verander, en jy moet Gebruik kry om inligting te herwin.

Gorgapor, mod_rewrite nog gebruik dikwels GET. Dit laat net 'n vriendeliker URL vertaal in 'n URL met 'n GET navraag string.

HTTP Post data het nie 'n gespesifiseerde limiet op die bedrag van data, waar as verskillende blaaiers het verskillende grense vir AOO se. Die RFC 2068 lui soos volg:

  

Servers moet versigtig wees oor   afhangende van URI lengtes bo 255   grepe, want 'n paar ouer kliënt of   proxy implementering kan nie behoorlik   ondersteun hierdie lengtes

spesifiek jy moet die reg HTTP konstrukte vir wat hulle gebruik vir. HTTP GET se moet nie newe-effekte hê en veilig kan verfris en gestoor deur HTTP Volmagte, ens.

HTTP POST se gebruik wanneer jy wil data teen 'n url hulpbron te dien.

'n Tipiese voorbeeld vir die gebruik van HTTP GET is op 'n Search, maw Soek? Query = my + navraag 'N Tipiese voorbeeld vir die gebruik van 'n HTTP POST is die indiening van terugvoer om 'n aanlyn vorm.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top