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

Полную таблицу со всеми существующими кодами ответов вы можете найти, перейдя по этой ссылке.