wat is SERVER_PROTOCOL?
Wat houdt de $_SERVER variabele 'SERVER_PROTOCOL' in?
Op php.net staat:
Quote:
Name and revision of the information protocol via which the page was requested; i.e. 'HTTP/1.0';
Als ik het goed begrijp gaat het om een protocol waarmee server en client met elkaar "praten".
Maar nu ben ik benieuwd wie dat protocol bepaalt. Zegt de server tegen de client "ik gebruik dit protocol, dus jij moet dat ook gebruiken" of is het de client die tegen de server zegt "ik gebruik dit protocol, dus jij moet dat ook gebruiken"? Of is het geen van beiden?
Wie weet hoe dit in elkaar zit?
Gewijzigd op 03/04/2014 00:14:04 door Ozzie PHP
Eerste alinea van de derde hit in google:
When a web browser make a request it sends information to the server about what it is looking for in headers. One of these headers is the Accept header. The Accept header tells the server what file formats, or more correctly MIME-types, the browser is looking for.
http://www.newmediacampaigns.com/blog/browser-rest-http-accept-headers
De $_SERVER variabele heet SERVER_PROTOCOL. Dat zou dus suggereren dat de server het protocol, HTTP/1.0 bepaalt. Maar zeker weten doe ik het niet.
Hier werkt dat ongeveer ook zo maar is het nog niet zo een issue omdat alle browsers alle HTML varianten nog ondersteunen. Behalve misschien browsers van heel oude besturingssystemen maar wie gebruikt die nog?
Toevoeging op 03/04/2014 00:33:36:
Ozzie PHP op 03/04/2014 00:29:48:
Thanks Frank. Dit gaat (volgens mij) over de accept header, en niet over het protocol.
De $_SERVER variabele heet SERVER_PROTOCOL. Dat zou dus suggereren dat de server het protocol, HTTP/1.0 bepaalt. Maar zeker weten doe ik het niet.
De $_SERVER variabele heet SERVER_PROTOCOL. Dat zou dus suggereren dat de server het protocol, HTTP/1.0 bepaalt. Maar zeker weten doe ik het niet.
nee de header is het medium waarmee die informatie geleverd wordt maar het gaat wel degelijk over het protocol.
Toevoeging op 03/04/2014 00:35:44:
ik zie het dus zo:
de browser begint het gesprek en geeft in de header aan wat ie wel en niet lust.
de server houdt daar rekening mee en geeft vervolgens antwoord aan de browser wat ie op zijn bord krijgt
Dus de browser probeert eerst het hoogst mogelijke protocol wat hij ondersteunt, dan een stapje lager, dan weer lager, net zolang totdat ie "beet" heeft bij de server?
Maar... als ik je dus goed begrijp, bepaalt uiteindelijk de SERVER welk protocol er wordt gebruikt? Dus stel de browser ondersteunt HTTP/1.1 en de server gaat maar tot HTTP/1.0, dan wordt HTTP/1.0 gebruikt. Echter als de browser als hoogste HTTP/1.0 ondersteunt en de server ondersteunt HTTP/1.1, dan wordt HTTP/1.0 gebruikt. Op die manier?
http://nl.wikipedia.org/wiki/Hypertext_Transfer_Protocol
http://nl.wikipedia.org/wiki/HyperText_Transfer_Protocol_Secure
even een andere weg:
Jij spreekt engels en nederlands. Ik spreek nederlands en frans. In welke taal gaan we communiceren?
Stel nou dat jij de server bent en ik de client:
Frank: hey Ozzie ik spreek Nederlands, je parle francais. Mijn Frans is beter dan mijn Nederlands
Ozzie: Ok ik spreek geen Frans dus ondanks dat Frans beter is voor jou spreek toch Nederlands tegen jou.
In de praktijk zal de server dus voor de hoogste versie kiezen die de browser ondersteund.
Althans zo zou het moeten zijn
Gewijzigd op 03/04/2014 00:48:14 door Frank Nietbelangrijk
Vanaf circa 1997 is de standaard op het World Wide Web dan ook verschoven van HTTP 1.0 naar HTTP 1.1 .
Dus de browser zegt, ik spreek frans en nederlands. De server bepaalt vervolgens: oké, dan spreken we vanaf nu nederlands. Correct?
Toevoeging op 03/04/2014 00:51:59:
@SanThe: ja, dat las ik ook... maar ik vraag me dus af bij wie het initiatief ligt.
Dan gaat dit verhaal wel spelen.
Toevoeging op 03/04/2014 00:54:55:
Ja correct Ozzie want uiteindelijk geeft de server ook direct antwoord terug volgens een bepaald protocol en dan heeft de browser het daar maar mee te doen.
Gewijzigd op 03/04/2014 01:02:38 door Frank Nietbelangrijk
Lees de info op die http link. Daar staat de reden van het omstaan van http 1.1 en als ik het daar goed begrijp zal er nu geen http 1.0 meer gebruikt worden i.v.m. het probleem met ip-nummers.
Precies. Ik heb een method waarmee ik het protocol ophaal, maar ik vroeg me dus af of dat door de browser of de server wordt bepaald.
>> ... en als ik het daar goed begrijp zal er nu geen http 1.0 meer gebruikt worden i.v.m. het probleem met ip-nummers.
Ik zou dus wel altijd de $_SERVER variabele gebruiken en niet hardcoded HTTP/1.1 precies om de reden die Frank noemt.
Best aardig om dat eens te lezen inderdaad :-)
Het is dus een standaard waarin vastgelegd hoe client en server met elkaar moeten communiceren.
En dan is HTTP 1.1 de huidige standaard.
En dat heeft helemaal niets te maken met de inhoud van de verzonden gegevens.
Dus wat Ozzie met het gebruikte protocol wil doen, is mij een raadsel.
http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
Gewijzigd op 03/04/2014 09:46:25 door Dos Moonen
Vooral robots, spiders en crawlers lijken HTTP/1.0 nog te gebruiken, dus ook dat is een use case waarin je beide smaken wilt/kunt ondersteunen:
Code (php)
Dat zou ook moeten werken lijkt me.
• HTTP/1.1 kent veel meer headers. Bijvoorbeeld 410 Gone komt wel voor in HTTP/1.1 maar niet in HTTP/1.0.
• HTTP/1.1 gebruikt soms andere headers dan HTTP/1.0. De verreweg belangrijkste noemde Dos al: het is 302 Moved Temporarily in HTTP/1.0 maar 302 Found in HTTP/1.1.
Maar beide situaties kunnen dus op 1 server voorkomen, correct? Dat hangt dus af van de browser?
Bij moderne browsers en robots zal het geen issue zijn, wel bij verouderde software. Ik zie vooral twee categorieën user-agents nog wel eens HTTP/1.0 gebruiken: robots, crawlers of spiders en tools voor uiteenlopende soorten feeds (RSS, CSV, XML en dergelijke).
Sommige softwarebouwers keren hun protocolkeuze kennelijk om.
Oké, thanks. Ik zal het in gedachten houden.