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ź.

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.


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


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.


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 ?


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.


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.


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.


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

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.



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.


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 .


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 !


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.