Serwlety - kody stanu HTTP
Format żądania HTTP i wiadomości odpowiedzi HTTP jest podobny i będzie miał następującą strukturę -
Początkowy wiersz stanu + CRLF (powrót karetki + znak nowego wiersza, czyli nowa linia)
Zero lub więcej linii nagłówka + CRLF
Pusta linia, czyli CRLF
Opcjonalna treść wiadomości, taka jak plik, dane zapytania lub dane wyjściowe zapytania.
Na przykład nagłówek odpowiedzi serwera wygląda następująco -
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
Wiersz statusu składa się z wersji HTTP (w przykładzie HTTP / 1.1), kodu statusu (w przykładzie 200) i bardzo krótkiej wiadomości odpowiadającej kodowi statusu (w przykładzie OK).
Poniżej znajduje się lista kodów stanu HTTP i powiązanych komunikatów, które mogą zostać zwrócone z serwera internetowego -
Kod | Wiadomość | Opis |
---|---|---|
100 | Kontyntynuj | Tylko część żądania została odebrana przez serwer, ale dopóki nie zostanie odrzucona, klient powinien kontynuować żądanie |
101 | Przełączanie protokołów | Serwer przełącza protokół. |
200 | dobrze | Żądanie jest OK |
201 | Utworzony | Żądanie zostało zakończone i został utworzony nowy zasób |
202 | Przyjęty | Żądanie zostało przyjęte do przetwarzania, ale przetwarzanie nie zostało zakończone. |
203 | Informacje nieautorytatywne | |
204 | Brak zawartości | |
205 | Resetuj zawartość | |
206 | Częściowa zawartość | |
300 | Wiele możliwości wyboru | Lista linków. Użytkownik może wybrać łącze i przejść do tej lokalizacji. Maksymalnie pięć adresów |
301 | Przeniesiony na stałe | Żądana strona została przeniesiona do nowego adresu URL |
302 | Znaleziony | Żądana strona została tymczasowo przeniesiona do nowego adresu URL |
303 | Zobacz inne | Żądaną stronę można znaleźć pod innym adresem URL |
304 | Niezmodyfikowany | |
305 | Użyj proxy | |
306 | Nie używany | Ten kod był używany w poprzedniej wersji. Nie jest już używany, ale kod jest zarezerwowany |
307 | Tymczasowe przekierowanie | Żądana strona została tymczasowo przeniesiona do nowego adresu URL. |
400 | Zła prośba | Serwer nie zrozumiał żądania |
401 | Nieautoryzowany | Żądana strona wymaga nazwy użytkownika i hasła |
402 | Płatność wymagana | Nie możesz jeszcze użyć tego kodu |
403 | Zabroniony | Dostęp do żądanej strony jest zabroniony |
404 | Nie znaleziono | Serwer nie może znaleźć żądanej strony. |
405 | Niedozwolona metoda | Metoda określona w żądaniu jest niedozwolona. |
406 | Niedopuszczalne | Serwer może tylko wygenerować odpowiedź, która nie została zaakceptowana przez klienta. |
407 | Wymagane uwierzytelnienie proxy | Aby można było obsłużyć to żądanie, musisz uwierzytelnić się na serwerze proxy. |
408 | Limit czasu żądania | Żądanie trwało dłużej, niż serwer był przygotowany do oczekiwania. |
409 | Konflikt | Żądanie nie mogło zostać ukończone z powodu konfliktu. |
410 | Odszedł | Żądana strona nie jest już dostępna. |
411 | Wymagana długość | „Długość treści” nie jest zdefiniowana. Serwer nie przyjmie żądania bez niego. |
412 | Nie udało się spełnić warunku wstępnego | Warunek wstępny podany w żądaniu uznany przez serwer za fałszywy. |
413 | Wymagana jednostka jest za duża | Serwer nie przyjmie żądania, ponieważ jednostka żądania jest zbyt duża. |
414 | Adres URL żądania jest za długi | Serwer nie przyjmie żądania, ponieważ adres URL jest za długi. Występuje po przekonwertowaniu żądania „post” na żądanie „get” z długimi informacjami o zapytaniu. |
415 | Nieobsługiwany typ nośnika | Serwer nie przyjmie żądania, ponieważ typ nośnika nie jest obsługiwany. |
417 | Oczekiwanie nie powiodło się | |
500 | Wewnętrzny błąd serwera | Żądanie nie zostało zakończone. Serwer spełnił nieoczekiwany warunek. |
501 | Nie zaimplementowano | Żądanie nie zostało zakończone. Serwer nie obsługiwał wymaganej funkcjonalności. |
502 | zła Brama | Żądanie nie zostało zakończone. Serwer otrzymał nieprawidłową odpowiedź z serwera nadrzędnego. |
503 | serwis niedostępny | Żądanie nie zostało zakończone. Serwer jest tymczasowo przeciążony lub wyłączony. |
504 | Limit czasu bramy | Upłynął limit czasu bramy. |
505 | Wersja HTTP nie jest obsługiwana | Serwer nie obsługuje wersji „protokołu http”. |
Metody ustawiania kodu stanu HTTP
Poniższych metod można użyć do ustawienia kodu stanu HTTP w programie serwletu. Te metody są dostępne z obiektem HttpServletResponse .
Sr.No. | Metoda i opis |
---|---|
1 | public void setStatus ( int statusCode ) Ta metoda ustawia dowolny kod stanu. Metoda setStatus przyjmuje jako argument int (kod stanu). Jeśli twoja odpowiedź zawiera specjalny kod statusu i dokument, pamiętaj, aby wywołać setStatus przed faktycznym zwróceniem jakiejkolwiek zawartości z PrintWriter . |
2 | public void sendRedirect(String url) Ta metoda generuje odpowiedź 302 wraz z nagłówkiem Location podającym adres URL nowego dokumentu |
3 | public void sendError(int code, String message) Ta metoda wysyła kod stanu (zwykle 404) wraz z krótką wiadomością, która jest automatycznie formatowana w dokumencie HTML i wysyłana do klienta. |
Przykład kodu stanu HTTP
Poniżej znajduje się przykład, który wyśle kod błędu 407 do przeglądarki klienta, a przeglądarka wyświetli komunikat „Potrzebujesz uwierzytelnienia !!!” wiadomość.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class showError extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set error code and reason.
response.sendError(407, "Need authentication!!!" );
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Teraz wywołanie powyższego serwletu spowoduje wyświetlenie następującego wyniku -
HTTP Status 407 - Need authentication!!!
type Status report
messageNeed authentication!!!
descriptionThe client must first authenticate itself with the proxy (Need authentication!!!).
Apache Tomcat/5.5.29