Ukryte funkcje HTTP

85

O jakich ukrytych funkcjach protokołu HTTP warto wspomnieć?

Przez ukryte funkcje rozumiem funkcje, które są już częścią standardu, ale są raczej nieznane lub nieużywane.

Tylko jedna funkcja na odpowiedź.

Gumbo
źródło

Odpowiedzi:

124

To musi być kod statusu 418 I'm a teapot , część protokołu Hyper Text Coffee Pot Control Protocol (rozszerzenie HTTP). Rozśmiesza mnie za każdym razem.

2.3.2 418 Jestem czajniczkiem

Każda próba zaparzenia kawy czajnikiem powinna skutkować wyświetleniem kodu błędu „418 Jestem czajniczkiem”. Powstały w ten sposób korpus jednostki MOŻE być krótki i tęgi.

Greg Beech
źródło
6
To jest niesamowite!
Josh
3
W rzeczywistości zaimplementowałem ten status w skrypcie, gdy żaden inny status nie jest odpowiedni.
powiek
4
Z RFC: „Wynikowa treść jednostki MOŻE być krótka i gruba”.
Piskvor opuścił budynek
2
Napisałem własny serwer HTTP i upewniłem się, że go zaimplementowałem.
Matt Joiner
Czy to nie był prawdziwy protokół, który napisali w celu wysyłania poleceń do tamtego ekspresu do kawy, jestem pewien, że gdzieś go czytałem! - Zbudowali ekspres do kawy, który akceptuje polecenia za pośrednictwem tego protokołu, więc w rzeczywistości jest to legalny protokół
RobertPitt
48

Fakt, że strona odsyłająca została błędnie wpisana i zdecydowano, że należy ją zachować.

Nathan Osman
źródło
42

Oczywista odpowiedź: metody PUT, DELETE, TRACE, OPTIONS, CONNECT

Większość ludzi wie o metodach GET i POST, ponieważ właśnie tego używają podczas tworzenia formularzy. Przeglądarki również często używają HEAD. Inne metody są znacznie mniej znane; są najczęściej używane przez bardziej specyficzne aplikacje.

Martijn
źródło
1
Dobra odpowiedź, czy mógłbyś podać więcej informacji na temat wszystkich metod?
Louis,
2
Możesz przeczytać o tym wszystko na różnych stronach, takich jak en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
Martijn.
1
Pechowo, ile przeglądarek obsługuje te metody? (Wiem, szkoda)
Pascal Qyy
Dlaczego nikt nie umieszcza PATCH na tych listach?
tobib
29

Czy ktoś kiedykolwiek widział wymaganą płatność 402 ?

raspi
źródło
17
Tak. W bramce HTTP <-> SMS. Jeśli zabraknie Ci przedpłaconego kredytu, zaczniesz otrzymywać 402 odpowiedzi.
Kornel
26
@ zildjohn01: To oznacza ... dramatyczną pauzę ... ŻYJEMY W PRZYSZŁOŚCI! ;)
Piskvor opuścił budynek
6
@Piskvor: Wspaniała obserwacja. Zaznaczę również, że odrzucam tę przyszłość, a to żałosne stosy oprogramowania.
Matt Joiner
3
„Przyszłość już tu jest, po prostu nie jest równomiernie rozłożona”.
XTL
25

204 Brak treści

Myślałem, że 204 jest tylko wtedy, gdy nie masz treści do wyświetlenia, ale specyfikacja wygląda na to, że istnieje dodatkowe zachowanie, które polega na tym, że agent użytkownika „nie zmienia widoku dokumentu”.

Zgodnie z HOWTO: Skonfiguruj Apache, aby zwracał HTTP 204 (brak treści) dla AJAX

FWIW, Google faktycznie robi coś podobnego. Za każdym razem, gdy użytkownik klika łącze w wynikach wyszukiwania, Google pinguje się, aby zarejestrować kliknięcie; kod odpowiedzi z polecenia ping to HTTP 204.

Ponadto 204 No Content proponuje, że jest to dobra technika w przypadku „błędów internetowych” lub „sygnałów nawigacyjnych”, jeśli chcesz zaoszczędzić na każdym ostatnim bajcie ruchu sieciowego, jaki możesz.

Kevin Hakanson
źródło
17

Kod odpowiedzi410 Gone :

(...) właściciele serwerów chcą, aby zdalne łącza do tego zasobu zostały usunięte. (...)

Pająki sieciowe (w szczególności Google) usuwają indeksowanie (zwykle podczas następnego indeksowania) strony, która zaczyna zwracać 410.

Piskvor opuścił budynek
źródło
16

W zawartości dynamicznej użyj nagłówka Last_Modified lub ETag

Czasami masz dynamiczną zawartość, która może być duża i / lub kosztowna do wygenerowania i która może się nie zmieniać w zależności od żądania. Możesz dodać nagłówek Last_Modified lub ETag do wygenerowanej odpowiedzi.

Na początku drogiego kodu dynamicznego możesz użyć If_Modified_Since lub If_None_Match, aby określić, czy żądający treści już ma, jest nadal aktualny. Jeśli zmieni status odpowiedzi na „304 Unmodified” i zakończ żądanie.

Niektóre technologie po stronie serwera formalnie zapewniają takie funkcje, ale możesz to zrobić nawet w skromnym ASP-Classic.

Zauważ, że różni się to od ustawiania nagłówków Cache-Control, Expires tym, że zapewnia klientowi zawsze aktualne informacje na żądanie.

AnthonyWJones
źródło
13

Możesz zażądać wznowienia (dużej) odpowiedzi HTTP (np. Pobrania pliku), używając nagłówków Rangei If-Rangeżądań z odpowiednio określonym zakresem bajtów i unikalnym identyfikatorem pliku lub znacznikiem czasu modyfikacji pliku. Jest to możliwe, jeśli serwer wysłał nagłówki Accept-Ranges: bytesi ETaglub Last-Modifiedodpowiedzi w odpowiedzi początkowej z odpowiednio powiadomieniem, że serwer obsługuje żądania zakresów bajtów, unikalnym identyfikatorem pliku i znacznikiem czasu modyfikacji pliku.

Początkowa odpowiedź może wyglądać następująco ( ETagzazwyczaj składa się z nazwy pliku, rozmiaru i znacznika czasu ostatniej modyfikacji):

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

Gdy pobieranie zostanie przerwane na przykład na 1 KB (1024 bajty), klient może je wznowić w następujący sposób:

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

Który powinien zwrócić tę odpowiedź z odpowiednimi bajtami w treści:

Accept-Ranges: bytes
ETag: file.ext_1234_1234567890
Content-Range: bytes 1024-1233/1234
BalusC
źródło
1 MB = 1024 KB, 1 KB = 1024 bajty, co daje 1 MB = 1024 * 1024 bajty
Maerlyn
12

ReST próbuje wykorzystać HTTP do granic swoich możliwości jako protokół interfejsu.

To nie jest ukryta funkcja , ale patrząc na dobrze zdefiniowane API ReST, można dość dobrze zrozumieć, jak powinien działać HTTP i znaleźć wspaniałe przykłady tego, co można osiągnąć za pomocą prostej kombinacji metod HTTP, kodów stanu i nagłówków do i od.

Boldewyn
źródło
9

Trailer (w przeciwieństwie do Header)

Ebrahim Mohammadi
źródło
8

Protokół umożliwia definiowanie własnych pól niestandardowych. Mogą one służyć do przenoszenia innych informacji, jeśli nie chcesz używać do tego plików cookie.

sybreon
źródło
1
Na pewno tego nie wiedziałem!
netrox
6

Status HTTP 100 (kontynuacja)

Klient może wysłać komunikat żądania z treścią żądania, aby określić, czy serwer pochodzenia jest skłonny zaakceptować żądanie.

W niektórych przypadkach wysłanie treści przez klienta może być niewłaściwe lub wysoce nieefektywne, jeśli serwer odrzuci wiadomość bez patrzenia na treść.

Może być używany do unikania ruchu od nieuczciwych klientów ... i / lub gdy przepustowość jest cennym towarem.

Jednak w celu pełnego wykorzystania tej funkcji istnieją pewne kryteria dotyczące klienta, serwerów i serwerów proxy HTTP1.1. Więcej informacji na temat połączeń HTTP można znaleźć w dokumencie HTTP / 1.1 RFC 2616 .

Robin Maben
źródło
3

Kody statusu :

  • Gdy wywoływany jest identyfikator URI http://www.domain.invalid/index.php?id=44 , jeśli query ( id=44) nie może zwrócić zasobu, dlaczego nie zwrócić kodu stanu 404?
  • Dlaczego wywoływany jest identyfikator URI, który akceptuje tylko liczby całkowite, dlaczego nie zwrócić kodu stanu ?http://www.domain.invalid/index.php?id=fooid400
  • Dlaczego po wprowadzeniu nieprawidłowego loginu / hasła prawie wszystkie aplikacje internetowe zwracają komunikat typu „Uwierzytelnianie nie powiodło się” z kodem stanu 200(ok, nie ma problemu, robisz to dobrze) 401?

Tak, kody statusu wydają się być rodzajem tajnej funkcjonalności HTTP dla niektórych twórców stron internetowych ... Ale zastanawiam się, czy najbardziej okultystyczną ze wszystkich "funkcji" tego protokołu nie jest jego RFC !

Pascal Qyy
źródło
2
Myślę, że 401dotyczy tylko uwierzytelniania HTTP, a nie innych rodzajów. Afaik powoduje, że większość przeglądarek prosi użytkownika o hasło http.
CodesInChaos
Masz rację i o to chodzi! Oto inna „ukryta” funkcja HTTP: HTTP-Authentication... ^^ Czy tak trudno jest z niej korzystać zamiast wymyślać koło na nowo?
Pascal Qyy,
1
@SOL. Qyy: W przypadku aplikacji internetowej ma duże znaczenie, czy baza danych użytkownika jest przechowywana w jakiejś bazie danych SQL, którą można łatwo manipulować, czy w jakimś (dość statycznym) pliku konfiguracyjnym serwera WWW, takim jak .htaccesspliki Apache - które prawdopodobnie są tylko webmaster może aktualizować. W związku z tym uwierzytelnianie HTTP nie jest w rzeczywistości odpowiednie do zarządzania prawami użytkownika aplikacji i logowaniem / wylogowywaniem.
stakx - już nie publikuje
4
@stakx: Jest łatwy w użyciu MySQL ( howtoforge.com/mod_auth_mysql_apache2_debian ), LDAP lub innych do przechowywania informacji HTTP-Authentication, a nawet PHP jest w stanie obsłużyć HTTP-Authentication( php.net/manual/en/features.http-auth.php ). Jeśli jesteś programistą WWW, musisz opanować podstawy administracji serwerami, tylko ze względów bezpieczeństwa! Jako webmaster musi mieć umiejętności webmastera / sysadmina, może z łatwością wykonywać te zadania.
Pascal Qyy
1
Ale tak czy inaczej nie chodzi o moją odpowiedź: dla mnie głównym problemem pozostają prawie systematyczne błędne kody statusu zwracane przez aplikacje internetowe, nawet odkładanie na bok uwierzytelniania HTTP.
Pascal Qyy