HTTP (Hypertext Transfer Protocol) - это основа передачи данных во Всемирной паутине. Когда клиент (например, веб-браузер) отправляет запрос на веб-сервер, сервер отвечает кодом состояния HTTP, чтобы сообщить клиенту об итогах запроса. Эти коды состояния представляют собой трехзначные числа, которые предоставляют ценную информацию о том, что произошло во время цикла "запрос-ответ". В этой статье мы подробно объясним наиболее распространенные коды состояния HTTP и приведем примеры их использования на языке программирования Ruby.
Информационные коды (1xx)
100 - Continue: Сервер получил начальную часть запроса, и клиент должен продолжить с остальной частью.
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 "Continue: Server is ready for more data"
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: Request was successful"
end
201 - Created: Запрос был успешным, и на сервере был создан новый ресурс.
require 'net/http'
require 'json'
uri = URI('http://example.com/resource')
data = { 'name' => 'New Resource' }
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 "Created: Resource successfully created"
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: Resource has moved to a new location"
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: Resource temporarily moved"
end
Коды ошибок клиента (4xx)
400 - Bad Request: Сервер не может понять запрос клиента из-за неверного синтаксиса или других ошибок.
require 'net/http'
uri = URI('http://example.com/invalid-resource')
response = Net::HTTP.get_response(uri)
if response.is_a? Net::HTTPBadRequest
puts "Bad Request: Client's request is invalid"
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 "Not Found: Resource does not exist"
end
Коды ошибок сервера (5xx)
500 - Internal Server Error: Сервер столкнулся с ошибкой при обработке запроса.
require 'net/http'
uri = URI('http://example.com/error-resource')
response = Net::HTTP.get_response(uri)
if response.is_a? Net::HTTPInternalServerError
puts "Internal Server Error: Server encountered an error
503 - Service Unavailable: Сервер временно не может обработать запрос.
require 'net/http'
uri = URI('http://example.com/unavailable-service')
response = Net::HTTP.get_response(uri)
if response.is_a? Net::HTTPServiceUnavailable
puts "Service Unavailable: Server cannot handle the request"
end
Полную таблицу со всеми существующими кодами ответов вы можете найти, перейдя по этой ссылке.