Новые коды состояния HTTP

На рассмотрение в IETF поданы спецификации новых кодов состояния HTTP, которые более точно описывают некоторые типичные ситуации.

428 Precondition Required

429 Too Many Requests

431 Request Header Fields Too Large

511 Network Authentication Required

Код состояния 428 (precondition required) означает, что серверу требуются условия выполнения запроса. Это типичная ситуация, когда клиент получает данные по GET, модифицирует их и отправляет назад на сервер через PUT, но к тому времени они уже модифицированы другим клиентом, из-за чего возникает конфликт. Требуя обусловленного запроса, сервер защищается от возникновения конфликта. При этом обязательно должны быть указаны условия для корректной отправки данных на сервер.

HTTP/1.1 428 Precondition Required
Content-Type: text/html

<html>
 <head>
  <title>Precondition Required</title>
 </head>
 <body>
  <h1>Precondition Required</h1>
  <p>This request is required to be conditional;
   try using "If-Match".</p>
 </body>
</html>

Код состояния 429 (too many requests) означает, что пользователь отправил слишком много запросов в заданный период времени. Ответ должен содержать объяснение нарушенного условия и может содержать заголовок Retry-After с указанием времени, которое нужно подождать перед повтором.

HTTP/1.1 429 Too Many Requests
Content-Type: text/html
Retry-After: 3600

<html>
 <head>
  <title>Too Many Requests</title>
 </head>
 <body>
  <h1>Too many Requests</h1>
  <p>I only allow 50 requests per hour to this Web site per
   logged in user. Try again soon.</p>
 </body>
</html>

Код состояния 431 (request header fields too large) используется тогда, когда сервер отказывает в обработке запроса из-за того, что один или несколько заголовков в сумме превышают норму. Во втором случае в ответе должно содержаться указание, какой именно заголовок вызвал проблему.

HTTP/1.1 431 Request Header Fields Too Large
Content-Type: text/html

<html>
 <head>
  <title>Request Header Fields Too Large</title>
 </head>
 <body>
  <h1>Request Header Fields Too Large</h1>
  <p>The "Example" header was too large.</p>
 </body>
</html>

Код состояния 511 (network authentication required) означает, что нужно выполнить аутентификацию, при этом в ответе должна содержаться инструкция о том, как это сделать, например, с помощью HTML-формы по указанному адресу. Ошибку 511 возвращает не целевой сервер, а прокси, который не пускает пользователя в сеть (например, маршрутизатор в зоне платного Wi-Fi при неавторизованном доступе).

Например, пользователь отправляет HTTP-запрос по TCP на порт 80.

GET /index.htm HTTP/1.1
Host: www.example.com

Логин-сервер возвращает такой ответ.

HTTP/1.1 511 Network Authentication Required
Refresh: 0; url=https://login.example.net/
Content-Type: text/html

<html>
 <head>
  <title>Network Authentication Required</title>
 </head>
 <body>
  <p>You need to <a href="https://login.example.net/">
   authenticate with the local network</a> in order to get
   access.</p>
 </body>
</html>
Версия для печатиВерсия для печати

Рубрики: 

  • 1
  • 2
  • 3
  • 4
  • 5
Всего голосов: 0
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!