Коды состояния HTTP: Углубленное объяснение с примерами на Ruby

Коды состояния HTTP: Углубленное объяснение с примерами на Ruby

Содержание
  1. Информационный (1xx)
  2. Успешно (2xx)
  3. Перенаправление (3xx)
  4. Ошибка клиента (4xx)
  5. Ошибка сервера (5xx)
  6. Код статуса Описание
    1. 1xx - Информационный
    2. 2xx - Успешно
    3. 3xx - Перенаправление
    4. 4xx - Ошибки клиента
    5. 5xx - Ошибки сервера

Протокол передачи гипертекста HTTP (Hypertext Transfer Protocol) - это основа обмена данными во Всемирной паутине. Когда клиент (например, веб-браузер) отправляет запрос на веб-сервер, сервер отвечает кодом состояния HTTP, чтобы проинформировать клиента о результатах запроса. Эти коды состояния представляют собой трехзначные числа, которые дают ценную информацию о том, что произошло во время цикла “запрос-ответ”. В этой статье мы расскажем о наиболее распространенных кодах состояния HTTP в понятной форме и приведем примеры на примере языка программирования Ruby.

Информационный (1xx)

100 - Продолжение: Сервер получил начальную часть запроса, и клиент должен продолжить выполнение оставшейся части.

require 'net/http' uri = URI('http://example.com') http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Get.new(uri.request_uri) response = http.request(request) if response.is_a? Net::HTTPContinue puts "Продолжить: Сервер готов к приему данных" end

Успешно (2xx)

200 - OK: Запрос был выполнен успешно, и сервер отправил обратно запрошенные данные.

require 'net/http'
uri = URI('http://example.com')
response = Net::HTTP.get_response(uri)
if response.is_a? Net::HTTPOK
  puts "OK: Запрос прошел успешно"
end

201 - Создано: Запрос был успешным, и на сервере был создан новый ресурс.

require 'net/http'
require 'json'

uri = URI('http://example.com/resource')
data = { 'name' => 'Новый ресурс' }

http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new(uri.path, 'Content-Type' => 'application/json')
request.body = data.to_json

response = http.request(request)

if response.is_a? Net::HTTPCreated
  puts "Создан: Ресурс успешно создан"
end

Перенаправление (3xx)

301 - Moved Permanently: Запрашиваемый ресурс был навсегда перемещен на новый URL.

require 'net/http'
uri = URI('http://example.com/old-location')
response = Net::HTTP.get_response(uri)

if response.is_a? Net::HTTPMovedPermanently
  puts "Moved Permanently: Ресурс переместился в новое место"
end

302 - Found (или 303 - See Other): Ресурс временно переместился на новый URL.

require 'net/http'
uri = URI('http://example.com/temp-location')
response = Net::HTTP.get_response(uri)

if response.is_a?(Net::HTTPFound) || response.is_a?(Net::HTTPSeeOther)
  puts "Found/See Other: Ресурс временно перемещен"
end

Ошибка клиента (4xx)

400 - Плохой запрос: Сервер не может понять запрос клиента из-за неправильного синтаксиса или других ошибок.

require 'net/http'
uri = URI('http://example.com/invalid-resource')
response = Net::HTTP.get_response(uri)

if response.is_a? Net::HTTPBadRequest
  puts "Плохой запрос: Запрос клиента недействителен"
end

404 - Not Found: Запрашиваемый ресурс не найден на сервере.

require 'net/http'
uri = URI('http://example.com/nonexistent-resource')
response = Net::HTTP.get_response(uri)
if response.is_a? Net::HTTPNotFound
  puts "Не найдено: Ресурс не существует"
end

Ошибка сервера (5xx)

500 - Внутренняя ошибка сервера: Сервер столкнулся с ошибкой при обработке запроса.

require 'net/http'
uri = URI('http://example.com/error-resource')
response = Net::HTTP.get_response(uri)
if response.is_a? Net::HTTPInternalServerError
  puts "Внутренняя ошибка сервера: Сервер столкнулся с ошибкой"
end

503 - Сервис недоступен: Сервер временно не может обработать запрос.

require 'net/http'
uri = URI('http://example.com/unavailable-service')
response = Net::HTTP.get_response(uri)

if response.is_a? Net::HTTPServiceUnavailable
  puts "Сервис недоступен: Сервер не может обработать запрос"
end

Здесь приведена подробная таблица всех кодов состояния HTTP с их описанием:

Код статуса Описание

1xx - Информационный

100 Продолжить - Сервер получил первоначальный запрос, и клиент должен продолжить выполнение остальной части запроса.

101 Переключение протоколов - Сервер меняет протоколы по запросу клиента.

102 Обработка - Сервер обрабатывает запрос, но еще не завершил его.

2xx - Успешно

200 OK - Запрос успешно выполнен, и сервер отправляет обратно запрошенные данные.

201 Created - Запрос успешно выполнен, и на сервере создан новый ресурс.

202 Принято - запрос принят, но обработка еще не завершена.

204 No Content - запрос был успешно выполнен, но нет никакой дополнительной информации для отправки.

206 Partial Content (Частичное содержимое) - сервер предоставляет только часть ресурса из-за запроса диапазона.

3xx - Перенаправление

300 Множественный выбор - Запрос содержит несколько возможных вариантов ответов, и пользователь должен выбрать один из них.

301 Moved Permanently - запрашиваемый ресурс был навсегда перемещен на новый URL.

302 Found - ресурс временно перемещен на новый URL.

303 See Other - ресурс может быть найден по другому URL, и клиент должен получить его методом GET.

304 Not Modified - Ресурс не изменялся с указанной даты.

307 Временное перенаправление - запрос должен быть повторен с другим URI, но будущие запросы должны по-прежнему использовать исходный URI.

308 Постоянное перенаправление - Запрос и все последующие запросы должны быть повторены с использованием другого URI.

4xx - Ошибки клиента

400 Bad Request - сервер не может понять запрос клиента, обычно из-за неправильного синтаксиса или других ошибок.

401 Unauthorized - запрос требует аутентификации пользователя, и клиент должен предоставить действительные учетные данные.

403 Forbidden - сервер отказывается выполнять запрос, и у клиента нет разрешения на доступ к ресурсу.

404 Not Found - Запрашиваемый ресурс не найден на сервере.

405 Method Not Allowed - HTTP-метод в запросе не разрешен для указанного ресурса.

406 Not Acceptable (Неприемлемо) - запрашиваемый ресурс не может генерировать содержимое, приемлемое в соответствии с заголовками, отправленными в запросе.

408 Request Timeout (Таймаут запроса) - сервер прервал ожидание запроса.

409 Конфликт - Запрос не может быть завершен из-за конфликта с текущим состоянием целевого ресурса.

410 Исчез - Запрашиваемый ресурс больше не доступен, и у сервера нет адреса пересылки.

413 Слишком большая полезная нагрузка - сервер отказывается обрабатывать запрос, поскольку полезная нагрузка запроса слишком велика.

429 Слишком много запросов - пользователь отправил слишком много запросов за определенный промежуток времени.

5xx - Ошибки сервера

500 Internal Server Error - сервер столкнулся с ошибкой при обработке запроса.

501 Not Implemented - сервер не поддерживает функциональность, необходимую для выполнения запроса.

502 Bad Gateway - сервер, выступая в качестве шлюза или прокси, получил недопустимый ответ от сервера, к которому он обращался.

503 Service Unavailable - сервер временно не может обработать запрос, как правило, из-за перегрузки или технического обслуживания.

504 Gateway Timeout - сервер, выступающий в роли шлюза или прокси, не получил своевременного ответа от вышестоящего сервера или приложения.

505 HTTP Version Not Supported - сервер не поддерживает версию протокола HTTP, используемую в запросе.

Коды состояния HTTP важны для понимания результатов HTTP-запросов и ответов. Они помогают клиентам и серверам эффективно взаимодействовать и справляться с различными ситуациями. Используя эти коды в своих Ruby-приложениях, вы сможете разрабатывать более надежные и удобные веб-сервисы.