HTTP - odpowiedzi
Po otrzymaniu i zinterpretowaniu komunikatu żądania serwer odpowiada komunikatem odpowiedzi HTTP:
- A Status-line
- Zero or more header (General|Response|Entity) fields followed by CRLF
- An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
- Optionally a message-body
W poniższych sekcjach wyjaśniono każdą z jednostek używanych w komunikacie odpowiedzi HTTP.
Wiadomość Status-Line
Linia statusu składa się z wersji protokołu, po której następuje numeryczny kod statusu i powiązana fraza tekstowa. Elementy oddzielone są spacjami SP.
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
Wersja HTTP
Serwer obsługujący protokół HTTP w wersji 1.1 zwróci następujące informacje o wersji:
HTTP-Version = HTTP/1.1
Kod statusu
Element Status-Code to 3-cyfrowa liczba całkowita, gdzie pierwsza cyfra Status-Code określa klasę odpowiedzi, a ostatnie dwie cyfry nie pełnią żadnej roli w kategoryzacji. Pierwsza cyfra ma 5 wartości:
SN | Kod i opis |
---|---|
1 | 1xx: Informational Oznacza to, że żądanie zostało odebrane i proces jest kontynuowany. |
2 | 2xx: Success Oznacza to, że działanie zostało pomyślnie odebrane, zrozumiane i zaakceptowane. |
3 | 3xx: Redirection Oznacza to, że należy podjąć dalsze działania w celu uzupełnienia wniosku. |
4 | 4xx: Client Error Oznacza to, że żądanie zawiera nieprawidłową składnię lub nie może zostać spełnione. |
5 | 5xx: Server Error Oznacza to, że serwer nie spełnił pozornie ważnego żądania. |
Kody stanu HTTP można rozszerzać, a aplikacje HTTP nie muszą rozumieć znaczenia wszystkich zarejestrowanych kodów stanu. Lista wszystkich kodów statusu została podana w oddzielnym rozdziale w celach informacyjnych.
Pola nagłówka odpowiedzi
Przestudiujemy General-header i Entity-header w osobnym rozdziale, kiedy nauczymy się pól nagłówka HTTP. Na razie sprawdźmy, jakie są pola nagłówka odpowiedzi.
Pola nagłówka odpowiedzi umożliwiają serwerowi przekazanie dodatkowych informacji o odpowiedzi, których nie można umieścić w wierszu stanu. Te pola nagłówka zawierają informacje o serwerze i dalszym dostępie do zasobu identyfikowanego przez identyfikator URI żądania.
Accept-Ranges
Age
ETag
Location
Proxy-Authenticate
Retry-After
Server
Vary
WWW-Authenticate
Możesz wprowadzić własne pola na wypadek, gdybyś miał napisać własnego klienta i serwer WWW.
Przykłady wiadomości odpowiedzi
Teraz połączmy to wszystko razem, aby utworzyć odpowiedź HTTP na żądanie pobrania pliku hello.htm strona z serwera WWW działającego w witrynie tutorialspoint.com
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>
Poniższy przykład przedstawia komunikat odpowiedzi HTTP zawierający stan błędu, gdy serwer WWW nie może znaleźć żądanej strony:
HTTP/1.1 404 Not Found
Date: Sun, 18 Oct 2012 10:36:20 GMT
Server: Apache/2.2.14 (Win32)
Content-Length: 230
Connection: Closed
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>404 Not Found</title>
</head>
<body>
<h1>Not Found</h1>
<p>The requested URL /t.html was not found on this server.</p>
</body>
</html>
Poniżej znajduje się przykład komunikatu odpowiedzi HTTP pokazującego stan błędu, gdy serwer WWW napotkał nieprawidłową wersję HTTP w danym żądaniu HTTP:
HTTP/1.1 400 Bad Request
Date: Sun, 18 Oct 2012 10:36:20 GMT
Server: Apache/2.2.14 (Win32)
Content-Length: 230
Content-Type: text/html; charset=iso-8859-1
Connection: Closed
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.</p>
<p>The request line contained invalid characters following the protocol string.</p>
</body>
</html>