wat is SERVER_PROTOCOL?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ozzie PHP

Ozzie PHP

03/04/2014 00:13:01
Quote Anchor link
Hi guys,

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
 
PHP hulp

PHP hulp

25/04/2024 07:49:35
 
Frank Nietbelangrijk

Frank Nietbelangrijk

03/04/2014 00:22:42
Quote Anchor link
Even gegoogled op 'http accept':

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
 
Ozzie PHP

Ozzie PHP

03/04/2014 00:29:48
Quote Anchor link
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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

03/04/2014 00:31:57
Quote Anchor link
Denk aan de oude modems van vroeger: die probeerde eerst een verbinding te leggen in de hoogste snelheid die ze zelf ondersteunden maar als dat niet lukte omdat het modem aan de andere kant van de lijn dat niet ondersteunde dan gingen ze telkens een tandje lager totdat het wel lukte.

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.


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
 
Ozzie PHP

Ozzie PHP

03/04/2014 00:38:30
Quote Anchor link
Oké. Sorry dat ik het nog niet helemaal begrijp, maar dit is nieuw voor mij.

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?
 
- SanThe -

- SanThe -

03/04/2014 00:39:19
 
Frank Nietbelangrijk

Frank Nietbelangrijk

03/04/2014 00:45:42
Quote Anchor link
Grappig Ozzie,

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
 
- SanThe -

- SanThe -

03/04/2014 00:48:54
Quote Anchor link
Het is blijkbaar gewoon standaard:
Vanaf circa 1997 is de standaard op het World Wide Web dan ook verschoven van HTTP 1.0 naar HTTP 1.1 .
 
Ozzie PHP

Ozzie PHP

03/04/2014 00:51:13
Quote Anchor link
Oké, ik begrijp ongeveer wat je bedoelt. Maar het is dus wel uiteindelijk de server die bepaalt wat er wordt gesproken, en dus niet de browser?

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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

03/04/2014 00:53:36
Quote Anchor link
Klopt San. Puur in de HTML is er op een paar extra elementen na maar weinig veranderd. Maar wat brengt de toekomst? Dat weten we dus niet. Stel dat de grote spelers op de markt de koppen bij elkaar steken en met elkaar bepalen dat er een heel andere HTML versie ontwikkeld gaat worden die niet backwards compatible is?
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
 
- SanThe -

- SanThe -

03/04/2014 00:55:20
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

03/04/2014 00:58:00
Quote Anchor link
>> ... Dan gaat dit verhaal wel spelen.

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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

03/04/2014 01:00:36
Quote Anchor link
Best aardig om dat eens te lezen inderdaad :-)
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

03/04/2014 08:45:00
Quote Anchor link
HyperText Transfer Protocol
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.
 
Dos Moonen

Dos Moonen

03/04/2014 09:44:38
Quote Anchor link
De enige correcte use cases waar je SERVER_PROTOCOL voor wilt gebruiken zijn dingen als "Voor het POST/REDIRECT/GET pattern sturen we een 303 status code voor HTTP 1.1 verbindingen, en een 302 voor HTTP 1.0 clients aangezien 303 pas in HTTP 1.1 is toegevoegd."
http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
Gewijzigd op 03/04/2014 09:46:25 door Dos Moonen
 
Ward van der Put
Moderator

Ward van der Put

03/04/2014 10:58:59
Quote Anchor link
Als je serverlogs erop napluist, zul je zien dat HTTP/1.0 in het wild wel degelijk nog voorkomt. Ik zou daarom inderdaad de use cases die Dos noemt aanhouden en die, waar HTTP/1.1 onontbeerlijk is, uitbreiden met de header 505 HTTP Version Not Supported uit HTTP/1.1.

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
if ($something_missing) {
    if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.0') {
        header('HTTP/1.0 404 Not Found');
    }
else {
        header('HTTP/1.1 404 Not Found');
    }
}

?>
 
Ozzie PHP

Ozzie PHP

03/04/2014 11:35:57
Quote Anchor link
Ward, ik heb dus een method gemaakt waarmee ik het protocol ophaal, en mijn idee zou dan (op basis van jouw voorbeeld) dit zijn:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if ($something_missing) {
    header($this->server->get_protocol() . ' 404 Not Found');
}

?>

Dat zou ook moeten werken lijkt me.
 
Ward van der Put
Moderator

Ward van der Put

03/04/2014 11:45:31
Quote Anchor link
Ja en nee. Er zijn twee belangrijke verschillen:

• 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.
 
Ozzie PHP

Ozzie PHP

03/04/2014 11:48:20
Quote Anchor link
Ah oké.

Maar beide situaties kunnen dus op 1 server voorkomen, correct? Dat hangt dus af van de browser?
 
Ward van der Put
Moderator

Ward van der Put

03/04/2014 11:58:29
Quote Anchor link
Ja, een request in HTTP/1.0 hoor je formeel te beantwoorden in HTTP/1.0. Je kunt het eventueel echter afdoen met een 505 HTTP Version Not Supported, maar dat is (zoals elke fout uit de 500-reeks) dan een serverfout.

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.
 
Ozzie PHP

Ozzie PHP

03/04/2014 12:06:26
Quote Anchor link
Oké, thanks. Ik zal het in gedachten houden.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.