Содержание
Протокол передачи гипертекста 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-приложениях, вы сможете разрабатывать более надежные и удобные веб-сервисы.