Versteckte Funktionen von HTTP

85

Welche versteckten Funktionen von HTTP sind Ihrer Meinung nach erwähnenswert?

Mit versteckten Funktionen meine ich Funktionen, die bereits Teil des Standards sind, aber weitgehend unbekannt oder nicht verwendet.

Nur eine Funktion pro Antwort bitte.

Gumbo
quelle

Antworten:

124

Es muss der 418 sein. Ich bin ein Teekannen- Statuscode, Teil des Hyper Text Coffee Pot Control Protocol (eine Erweiterung von HTTP). Bringt mich jedes Mal zum Lachen.

2.3.2 418 Ich bin eine Teekanne

Jeder Versuch, Kaffee mit einer Teekanne zuzubereiten, sollte den Fehlercode "418 Ich bin eine Teekanne" ergeben. Der resultierende Entitätskörper kann kurz und dick sein.

Greg Beech
quelle
6
Das ist fantastisch!
Josh
3
Ich habe diesen Status tatsächlich in ein Skript implementiert, wenn kein anderer Status angemessen ist.
Augenlidlosigkeit
4
Aus dem RFC: "Der resultierende Entitätskörper kann kurz und stabil sein."
Piskvor verließ das Gebäude
2
Ich habe meinen eigenen HTTP-Server geschrieben und sichergestellt, dass dies implementiert wird.
Matt Joiner
War dies nicht ein echtes Protokoll, das sie geschrieben hatten, um Befehle an die Kaffeemaschine zu senden? Ich bin sicher, dass ich das irgendwo gelesen habe! - Sie haben eine Kaffeemaschine gebaut, um Befehle über dieses Protokoll anzunehmen. Es ist also ein legitimes Protokoll.
RobertPitt
48

Die Tatsache, dass der Überweiser falsch geschrieben wurde und entschieden wurde, dass die Rechtschreibfehler beibehalten werden sollten.

Nathan Osman
quelle
42

Offensichtliche Antwort: PUT, DELETE, TRACE, OPTIONS, CONNECT-Methoden

Die meisten Leute kennen die GET- und POST-Methoden, weil sie diese beim Erstellen von Formularen verwenden. Browser verwenden auch häufig HEAD. Die anderen Methoden sind viel weniger bekannt; Sie werden hauptsächlich von spezifischeren Anwendungen verwendet.

Martijn
quelle
1
Gute Antwort, können Sie weitere Informationen zu allen Methoden bereitstellen?
Louis
2
Sie können alles darüber auf verschiedenen Websites lesen, wie z. B. en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
Martijn
1
Pech, wie viele Browser unterstützen diese Methoden? (Ich weiß, es ist schade)
Pascal Qyy
Warum nimmt niemand PATCH in diese Listen auf?
Tobib
29

Hat jemand jemals gesehen, dass 402 Zahlung erforderlich ist ?

Raspi
quelle
17
Ja. Im HTTP <-> SMS-Gateway. Wenn Ihnen das vorausbezahlte Guthaben ausgeht, erhalten Sie 402 Antworten.
Kornel
26
@ zildjohn01: Das bedeutet ... dramatische Pause ... DASS WIR IN DER ZUKUNFT LEBEN! ;)
Piskvor verließ das Gebäude
6
@Piskvor: Geniale Beobachtung. Ich werde auch darauf hinweisen, dass ich diese Zukunft ablehne und es sich um erbärmliche Software-Stacks handelt.
Matt Joiner
3
"Die Zukunft ist schon da, sie ist einfach nicht gleichmäßig verteilt."
XTL
25

204 Kein Inhalt

Ich dachte, 204 wäre nur, wenn Sie keinen Inhalt zum Anzeigen haben, sondern die Spezifikation sieht so aus, als ob es ein zusätzliches Verhalten gibt, dass der Benutzeragent "seine Dokumentansicht nicht ändert".

Gemäß HOWTO: Konfigurieren Sie Apache so, dass ein HTTP 204 (kein Inhalt) für AJAX zurückgegeben wird

FWIW, Google macht tatsächlich etwas Ähnliches. Jedes Mal, wenn ein Nutzer in seinen Suchergebnissen auf einen Link klickt, pingt Google sich selbst an, um den Klick aufzuzeichnen. Der Antwortcode vom Ping ist ein HTTP 204.

Außerdem schlägt 204 No Content vor, dass dies eine gute Technik für "Web-Bugs" oder "Beacons" ist, wenn Sie bis zum letzten Byte des Netzwerkverkehrs sparen möchten, den Sie können.

Kevin Hakanson
quelle
17

Antwortcode410 Gone :

(...) Serverbesitzer möchten, dass Remoteverbindungen zu dieser Ressource entfernt werden. (...)

Web-Spider (insbesondere Google) deindizieren (normalerweise beim nächsten Crawlen) eine Seite, die 410 zurückgibt.

Piskvor verließ das Gebäude
quelle
16

Verwenden Sie in dynamischen Inhalten den Header Last_Modified oder ETag

Manchmal haben Sie dynamische Inhalte, deren Erstellung groß und / oder kostspielig sein kann und die sich möglicherweise nicht von Anforderung zu Anforderung ändern. Sie können Ihrer generierten Antwort einen Last_Modified- oder ETag-Header hinzufügen.

Oben in Ihrem teuren dynamischen Code können Sie mit If_Modified_Since oder If_None_Match feststellen, ob der Inhaltsanforderer noch aktuell ist. Wenn dies der Fall ist, ändern Sie den Antwortstatus in "304 Unmodified" und beenden Sie die Anforderung.

Einige serverseitige Technologien bieten solche Funktionen formal, aber Sie können die oben genannten Funktionen auch in ASP-Classic verwenden.

Beachten Sie, dass dies von der Einstellung von Cache-Control, Expires-Headern dadurch abweicht, dass sichergestellt wird, dass der Client auf Anfrage immer über die neuesten Informationen verfügt.

AnthonyWJones
quelle
13

Sie können beantragen wieder einen (großen) HTTP - Antwort (zB Datei - Download) mit Rangeund If-RangeRequest - Header mit jeweils dem angegebenen Byte - Bereich und der einzigartigen Dateikennung oder der Dateiänderung Zeitstempel. Dies ist möglich, wenn der Server das Accept-Ranges: bytesund ETagoder gesendet hatLast-Modified Header Antwortheader bei der ersten Antwort mit der Benachrichtigung gesendet hat, dass der Server Bytebereichsanforderungen unterstützt, der eindeutigen Dateikennung und dem Zeitstempel für die Dateimodifikation.

Die erste Antwort kann folgendermaßen aussehen (die ETagbesteht normalerweise aus Dateiname, Größe und Zeitstempel der letzten Änderung):

Accept-Ranges: bytes
ETag: file.ext_1234_1234567890
Content-Range: bytes 0-1233/1234

Wenn der Download beispielsweise bei 1 KB (1024 Byte) abgebrochen wird, kann der Client ihn wie folgt fortsetzen:

If-Range: file.ext_1234_1234567890
Range: bytes=1024-

Welches sollte diese Antwort mit den entsprechenden Bytes im Körper zurückgeben:

Accept-Ranges: bytes
ETag: file.ext_1234_1234567890
Content-Range: bytes 1024-1233/1234
BalusC
quelle
1Mbyte = 1024 kbytes, 1kbyte = 1024 Bytes, was 1Mbyte = 1024 * 1024 Bytes
ergibt
12

ReST versucht, HTTP als Schnittstellenprotokoll an seine Grenzen zu bringen.

Es ist keine versteckte Funktion , aber wenn man sich gut definierte ReST-APIs ansieht, kann man einen guten Überblick darüber bekommen, wie HTTP funktionieren soll, und wunderbare Beispiele dafür finden, was mit einer einfachen Kombination von HTTP-Methoden, Statuscodes und Headern erreicht werden kann und her.

Boldewyn
quelle
9

Trailer (im Gegensatz zu Header)

Ebrahim Mohammadi
quelle
8

Mit dem Protokoll können Sie Ihre eigenen benutzerdefinierten Felder definieren. Diese können verwendet werden, um andere Informationen zu übertragen, wenn Sie keine Cookies dafür verwenden möchten.

Sybreon
quelle
1
Das wusste ich sicher nicht!
Netrox
6

HTTP 100 (Weiter) Status

Ein Client kann eine Anforderungsnachricht mit einem Anforderungshauptteil senden, um festzustellen, ob der Ursprungsserver bereit ist, die Anforderung anzunehmen.

In einigen Fällen kann es für den Client unangemessen oder höchst ineffizient sein, den Text zu senden, wenn der Server die Nachricht ablehnt, ohne den Text zu betrachten.

Könnte verwendet werden, um Datenverkehr von unerwünschten Clients zu vermeiden .. und / oder wo Bandbreite ein kostbares Gut ist.

Für die vollständige Nutzung dieser Funktion gibt es jedoch einige Kriterien für HTTP1.1-Clients, -Server und -Proxys. Weitere Informationen zu HTTP-Verbindungen finden Sie im HTTP / 1.1-RFC 2616 .

Robin Maben
quelle
3

Statuscodes :

  • Wenn URI http://www.domain.invalid/index.php?id=44 aufgerufen wird und die query ( id=44) keine Ressource zurückgeben konnte, warum nicht einen Statuscode zurückgeben 404?
  • Wenn URI http://www.domain.invalid/index.php?id=foo aufgerufen wird, während idnur Ganzzahlen akzeptiert werden, warum nicht einen Statuscode zurückgeben 400?
  • Warum geben fast alle Webanwendungen, wenn Sie das falsche Login / Passwort eingeben, eine Nachricht wie "Authentifizierung fehlgeschlagen" mit dem Statuscode 200(ok, kein Problem, Sie machen es gut) zurück 401?

Ja, Statuscodes scheinen für einige Webentwickler eine Art geheime Funktionalität von HTTP zu sein ... Aber ich frage mich, ob das okkulteste aller "Merkmale" dieses Protokolls nicht sein RFC ist !

Pascal Qyy
quelle
2
Ich denke, 401ist nur für die HTTP-Authentifizierung und nicht für andere Arten. Afaik veranlasst die meisten Browser, den Benutzer nach einem http-Passwort zu fragen.
CodesInChaos
Du hast recht, und das ist der Punkt! Hier ist eine andere "versteckte" Funktion von HTTP: HTTP-Authentication... ^^ Ist es so schwer, sie zu verwenden, anstatt das Rad neu zu erfinden?
Pascal Qyy
1
@G. Qyy: Für eine Webanwendung macht es einen großen Unterschied, ob ihre Benutzerdatenbank in einer SQL-Datenbank gespeichert ist, die leicht manipuliert werden kann, oder in einer (ziemlich statischen) Webserver-Konfigurationsdatei, wie z. B. Apache- .htaccessDateien - wahrscheinlich nur eine Webmaster kann aktualisieren. Daher ist die HTTP-Authentifizierung für die Verwaltung der Benutzerrechte und der An- und Abmeldung einer Anwendung nicht besonders geeignet.
stakx - nicht mehr
4
@stakx: Es ist einfach, MySQL ( howtoforge.com/mod_auth_mysql_apache2_debian ), LDAP oder andere zum Speichern von Informationen zu verwenden HTTP-Authentication, und sogar PHP kann damit umgehen HTTP-Authentication( php.net/manual/en/features.http-auth.php ). Wenn Sie ein Webentwickler sind, müssen Sie die Grundlagen der Serververwaltung nur aus Sicherheitsgründen erlernen! Da Webentwickler über Kenntnisse als Webmaster / Systemadministrator verfügen müssen, kann er diese Aufgaben problemlos ausführen.
Pascal Qyy
1
Trotzdem geht es hier nicht um meine Antwort: Für mich bleibt das Hauptproblem die fast systematische Integration von Statuscodes, die von Web-Apps zurückgegeben werden, selbst wenn die HTTP-Authentifizierung beiseite gelegt wird.
Pascal Qyy