HTTP ist ein zustandsfreies Anwendungsprotokoll für verteilte Informationssysteme.
Firefox ruft die Startseite von Google auf.
GET / HTTP/1.1 Host: www.google.com User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.2) … Accept: text/html,application/xhtml+xml,*/*;q=0.8 Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Cookie: NID=32=…
Googles Apache Webserver antwortet mit einer Erfolgsmeldung.
HTTP/1.1 200 OK Date: Wed, 17 Mar 2010 13:11:53 GMT Server: Apache Expires: -1 Cache-Control: private, max-age=0 Content-Type: text/html; charset=UTF-8 Content-Encoding: gzip Content-Length: 4520 X-XSS-Protection: 0
HTTP | CRUD | SQL | Beschreibung |
---|---|---|---|
OPTIONS | Nenne mir die Methoden einer Ressource im Allow-Header | ||
POST | CREATE | INSERT | Erzeuge eine neue Ressource, ich erwarte eine 201 |
HEAD | Gib mir nur die Kopfzeilen | ||
GET | READ | SELECT | Liefere eine Ressource, siehe Accept-* |
PUT | UPDATE | UPDATE | Ändere eine Ressource, siehe Content-* |
DELETE | DELETE | DELETE | Lösche eine Ressource |
Header | Beispiel | Beschreibung | |
---|---|---|---|
Date | Tue, 15 Nov 1994 | Sendezeit | |
Accept | */* | Unterstützte MIME-Typen | |
Accept-Charset | * | Unterstützte Zeichenkodierungen | |
Accept-Encoding | gzip | Unterstützte Kompressionsverfahren | |
Accept-Language | de | Landessprache des Anwenders | |
Authorization | Basic … | Kredentialien für WWW-Authenticate | |
Cache-Control | max-age=3600 | Direktiven für Caching | |
Connection | keep-alive | Verbindung offen halten | |
Cookie | Version=1; … | Cookie-Daten, siehe Set-Cookie | |
Content-Length | 348 | Länge der Nachricht in Oktetten | |
Content-Type | text/plain | MIME-Typ der Nachricht | |
Expect | 100-continue | Erwartete Antwort | |
From | user@example.net | Adresse meines Anwenders | |
Host | example.com | Hostname (für namensbasierte virtuelle Hosts) | |
If-Match | etag | Führe die Anfrage nur aus, wenn du die gleiche Version der Ressource hast | |
If-None-Match | etag | Führe die Anfrage nur aus, wenn du eine andere Version der Ressource hast | |
If-Range | etag | Ändere diesen Bereich, wenn die Ressource nicht geändert wurde | |
If-Modified-Since | Sat, 29 Oct 1994 | Daten nur senden, wenn die Ressource seitdem geändert wurde | |
If-Unmodified-Since | Sat, 29 Oct 1994 | Daten nur senden, wenn die Ressource nicht geändert wurde | |
Keep-Alive | no | Verbindung für weitere Anfragen offen halten | |
Max-Forwards | 10 | Maximaltiefe für Caches und Proxies | |
Pragma | no-cache | Implementierungsabhängige Direktiven | |
Proxy-Authorization | Basic … | Kredentialien für Proxy-Authenticate | |
Range | bytes=0-499 | Untermenge der Ressource anfordern | |
Referer | http://example.org | Rückverweis | |
TE | trailers | Unterstützte Transfer-Encodings | |
Upgrade | HTTP/2.0 | Wechsel auf ein anderes Protokoll | |
User-Agent | Mozilla/5.0 | Identifikation des Browsers | |
Warning | 199 Miscellaneous | Hinweis auf potentielle Probleme mit den geseneten Daten |
Header | Beispiel | Beschreibung | |
---|---|---|---|
Date | Tue, 15 Nov 1994 | Wann ich glaube die Antwort zu senden | |
Last-Modified | Tue, 15 Nov 1994 | Die Ressource wurde zuletzt geändert zu diesem Zeitpunkt | |
Expires | Thu, 01 Dec 1994 | Die Antwort gilt nur bis zu diesem Zeitpunkt | |
Server | Apache/1.3.27 … | So lautet meine Identifikation | |
Accept-Ranges | bytes | Ich unterstütze diese Formate für Teilbereiche | |
Allow | HEAD,GET | Die Ressource unterstützt nur diese Methoden, sonst 405 | |
Content-Length | 500 | Ich sende Daten mit so vielen Oktetten | |
Content-Range | bytes 0-99/248 | Beginn und Ende eines Teilbereichs für Range | |
Content-Type | text/html | Die Daten sind mit diesem MIME-Typ und Zeichensatz kodiert. Siehe Accept | |
Content-Language | de | Die Daten sind in dieser Sprache verfasst. Siehe Accept-Language | |
Content-MD5 | Q2h…5IQ== | Die Base64-kodierte MD5-Summe der Daten | |
Content-Location | /index.html | Du findest die Ressource auch dort | |
Content-Encoding | gzip | Ich komprimiere die Daten mit diesme Verfahren. Siehe Accept-Encoding | |
Transfer-Encoding | chunked | Ich sende Daten mit dieser Kodierung | |
ETag | W/"etag" | So identifiziert sich diese Version der Ressource | |
Link | </feed>; rel=meta | Die Daten beziehen sich auf eine andere Ressource | |
Location | http://example.org | Sieh mal unter dieser URL nach | |
P3P | CP="…" | ? | |
Pragma | no-cache | Implementierungsabhängige Direktiven | |
Refresh | 5; url="http://…" | Öffne nach einer Wartezeit diese URL | |
Retry-After | 120 | Versuche es nach einer Wartezeit noch einmal | |
Set-Cookie | …; Version=1 | Sende mit bitte immer dieses Cookie | |
Trailer | Content-MD5 | Diese Header kommen erst im Trailer | |
Vary | * | Hinweis für Proxies | |
Warning | 199 Misc | Die gesendeten Daten könnten fehlerhaft sein | |
WWW-Authenticate | Basic | Weise dich bitte mit Authorization aus, sonst 401 |
Status | Beschreibung | ||
---|---|---|---|
Informational | |||
100 | Continue | Du kannst jetzt die Daten aus der Expect-Anfrage senden | |
101 | Switching Protocols | Ich bin auf das Protokoll aus der Upgrade-Anfrage gewechselt | |
Successful | |||
200 | OK | Alles klar, ich sende die angeforderte Daten | |
201 | Created | Ich habe die Ressource erzeugt und sende dir die URI im Location-Header | |
202 | Accepted | Ich bearbeite die Anfrage. Den aktuellen Status findest du im Nachrichtentext | |
203 | Non-Authoritative Information | Ich bin zwar nur ein Proxy, aber ich denke, alles ist gut | |
204 | No Content | Ich sende keinen Nachrichtentext | |
205 | Reset Content | Ich habe die Anfrage bearbeitet, setze bitte jedwedes Formular zurück | |
206 | Partial Content | Die Range-Anfrage war okay, ich sende den in Content-Range angegebenen Ausschnitt | |
Redirection | |||
300 | Multiple Choices | Ich hätte mehrere Vorschläge, die primäre URI findest du im Location-Header, weitere URIs im Nachrichtentext | |
301 | Moved Permanently | Die Ressource ist umgezogen, wohin siehe Location-Header oder folge dem Hyperlink im Nachrichtentext | |
302 | Found | Ich habe die Ressource woanders gefunden, die URI steht im Location-Header und als Hyperlink im Nachrichtentext | |
303 | See Other | Ich leite dich (nach einem POST ) weiter, siehe Location-Header und Hyperlink im Nachrichtentext | |
304 | Not Modified | Die Ressource hat sich gegenüber der Version aus dem If-*-Header nicht verändert, ich sende keinen Nachrichtentext | |
305 | Use Proxy | Verwende bitte einen Proxy, welchen siehe Location-Header | |
306 | – | ||
307 | Temporary Redirect | Vorübergehende Weiterleitung, siehe Location-Header | |
Client Error | |||
400 | Bad Request | Ich habe die Anfrage nicht verstanden | |
401 | Unauthorized | Du musst Dich erst ausweisen, wiederhole die Anfrage mit einem WWW-Authenticate-Header | |
402 | Reserviert für Bezahldienste | ||
403 | Forbidden | Das darfst Du nicht, die Begründung steht in der Antwort | |
404 | Not Found | Ich kenne die angefragte Ressource nicht | |
405 | Method Not Allowed | Die Ressource erlaubt dir die Methode nicht, schau im Allow-Header nach | |
406 | Not Acceptable | Ich unterstütze keinen der von dir im Accept-*-Header genannten MIME-Typen | |
407 | Proxy Authentication Required | Du musst dich gegenüber dem Proxy ausweisen, wiederhole die Anfrage mit Proxy-Authenticate-Header | |
408 | Request Timeout | Ich konnte die Anfrage nicht in angemessener Zeit bearbeiten | |
409 | Conflict | Ich konnte die Ressource nach PUT nicht rekonstruieren | |
410 | Gone | Die Ressource wurde gelöscht | |
411 | Length Required | Wiederhole die Anfrage mit einem Content-Length-Header | |
412 | Precondition Failed | Erwartung aus Expect nicht erfüllt, sende bitte keine Daten | |
413 | Request Entity Too Large | Die Content-Length kann ich nicht verarbeiten | |
414 | Request-URI Too Long | Die URL mir uns zu lang | |
415 | Unsupported Media Type | Den Content-Type unterstütze ich nicht | |
416 | Requested Range Not Satisfiable | Der Ausschnitt aus deiner If-Range-Anfrage passt nicht, siehe Content-Range | |
417 | Expectation Failed | Ich erfülle die Erwartung aus der Expect-Anfrage nicht | |
451 | Unavailable For Legal Reasons | Übermittlung aufgrund einer juristischen Aufforderung Dritter unterdrückt. (Zensur) | |
Server Error | |||
500 | Internal Server Error | Ich bin defekt | |
501 | Not Implemented | Die Ressource unterstützt die angefragte Methode nicht | |
502 | Bad Gateway | Der Server (oder nächsthöhere Proxy) meldet einen Fehler | |
503 | Service Unavailable | Wiederhole die Anfrage bitte nach Retry-After Sekunden | |
504 | Gateway Timeout | Der Server (oder nächsthöhere Proxy) antwortet mir nicht | |
505 | HTTP Version Not Supported | Ich unterstütze diese Protokollversion nicht, siehe Begründung im Nachrichtentext |
Das Common Gateway Interface bietet eine einfache Schnittstelle, um serverseitig dynamische Webseiten zu erzeugen. Der Webserver nimmt Anfragen entgegen und ruft anhand der URL, ein Programm auf, welches auf der Standardausgabe die gewünschten Daten liefert. Alle nötigen Informationen werden als Umgebungsvariablen übergeben.
Variable | Quelle | Beispiel | Beschreibung |
---|---|---|---|
Anfrage | |||
REQUEST_METHOD | Anfrage | GET | Methode in der Anfrage |
REQUEST_URI | Anfrage | /myapp/do.pl/some/path?foo=bar | URL in der Anfrage (ohne Hostname) |
SCRIPT_NAME | Anfrage | /myapp/do.pl | Pfad bis einschließlich des Skriptnamens |
SCRIPT_FILENAME | Config | /var/lib/cgi-bin/do.pl | Lokaler Pfad zum Skript |
PATH_INFO | Anfrage | /some/path | Pfad zwischen Skriptname und Query |
PATH_TRANSLATED | Anfrage | /var/www/some/path | Pfad im Dateisystem |
QUERY_STRING | Anfrage | foo=bar | Zeichenkette nach dem ? |
Client | |||
HTTP_REFERER | Header | http://localhost/index.html | URL der verweisenden Seite |
HTTP_USER_AGENT | Header | Mozilla | Identifikation des Browsers |
HTTP_ACCEPT | Header | text/html,*.*;q=0.8 | Bekannte MIME-Typen |
HTTP_ACCEPT_CHARSET | Header | utf-8,*;q=0.8 | Bekannte Zeichensätze |
HTTP_ACCEPT_ENCODING | Header | gzip,deflate | Bekannte Kodierungen |
REMOTE_ADDR | Netzwerk | 127.0.0.1 | Adresse des Clients |
REMOTE_PORT | Netzwerk | 1234 | Portnummer des Clients |
REMOTE_HOST | Netzwerk | localhost | Hostname des Clients, wenn eine DNS-Abfrage aktiv ist |
REMOTE_IDENT | Netzwerk | example | Identifikation des Clients, wenn dort ein Ident-Daemon läuft |
REMOTE_USER | Header | phrank | Benutzernamen für Authorisierung |
Server | |||
SERVER_ADDR | Netzwerk | 127.0.0.1 | Adresse des Servers |
SERVER_PORT | Netzwerk | 80 | Portnummer des Daemons |
SERVER_NAME | Config | www.example.com | Hostname des Servers |
SERVER_ADMIN | Config | webmaster@example.com | Adresse des Administrators |
SERVER_SIGNATURE | Config | Identifikation des Servers | |
SERVER_SOFTWARE | Config | Apache/1.3.27 | Name und Version des Daemons |
SERVER_PROTOCOL | Anfrage | HTTP/1.1 | Protokoll und Version |
GATEWAY_INTERFACE | Config | CGI/1.1 | CGI-Version |