class WEBrick::HTTPResponse
An HTTP response. This is filled in by the service or do_* methods of a WEBrick
HTTP Servlet.
Attributes
Body may be:
-
a String;
-
an IO-like object that responds to
#read
and#readpartial
; -
a Proc-like object that responds to
#call
.
In the latter case, either chunked=
should be set to true
, or header['content-length']
explicitly provided. Example:
server.mount_proc '/' do |req, res| res.chunked = true # or # res.header['content-length'] = 10 res.body = proc { |out| out.write(Time.now.to_s) } end
Configuration for this response
Filename of the static file in this response. Only used by the FileHandler servlet.
Response header
HTTP Response version
Is this a keep-alive response?
Response reason phrase (“OK”)
Request HTTP version for this response
Request method for this response
Request URI for this response
Bytes sent in this response
Response status code (200)
Set the response body proc as an streaming/upgrade response.
Public Class Methods
Creates a new HTTP response object. WEBrick::Config::HTTP is the default configuration.
# File lib/webrick/httpresponse.rb, line 117 def initialize(config) @config = config @buffer_size = config[:OutputBufferSize] @logger = config[:Logger] @header = Hash.new @status = HTTPStatus::RC_OK @reason_phrase = nil @http_version = HTTPVersion::convert(@config[:HTTPVersion]) @body = +"" @keep_alive = true @cookies = [] @request_method = nil @request_uri = nil @request_http_version = @http_version # temporary @chunked = false @filename = nil @sent_size = 0 @bodytempfile = nil end
Public Instance Methods
Retrieves the response header field
# File lib/webrick/httpresponse.rb, line 155 def [](field) @header[field.downcase] end
Sets the response header field
to value
# File lib/webrick/httpresponse.rb, line 162 def []=(field, value) @chunked = value.to_s.downcase == 'chunked' if field.downcase == 'transfer-encoding' @header[field.downcase] = value.to_s end
Enables chunked transfer encoding.
# File lib/webrick/httpresponse.rb, line 214 def chunked=(val) @chunked = val ? true : false end
Will this response body be returned using chunked transfer-encoding?
# File lib/webrick/httpresponse.rb, line 207 def chunked? @chunked end
The content-length header
# File lib/webrick/httpresponse.rb, line 170 def content_length if len = self['content-length'] return Integer(len) end end
Sets the content-length header to len
# File lib/webrick/httpresponse.rb, line 179 def content_length=(len) self['content-length'] = len.to_s end
The content-type header
# File lib/webrick/httpresponse.rb, line 186 def content_type self['content-type'] end
Sets the content-type header to type
# File lib/webrick/httpresponse.rb, line 193 def content_type=(type) self['content-type'] = type end
Iterates over each header in the response
# File lib/webrick/httpresponse.rb, line 200 def each @header.each{|field, value| yield(field, value) } end
Will this response’s connection be kept alive?
# File lib/webrick/httpresponse.rb, line 221 def keep_alive? @keep_alive end
Creates an error page for exception ex
with an optional backtrace
# File lib/webrick/httpresponse.rb, line 405 def set_error(ex, backtrace=false) case ex when HTTPStatus::Status @keep_alive = false if HTTPStatus::error?(ex.code) self.status = ex.code else @keep_alive = false self.status = HTTPStatus::RC_INTERNAL_SERVER_ERROR end @header['content-type'] = "text/html; charset=ISO-8859-1" if respond_to?(:create_error_page) create_error_page() return end if @request_uri host, port = @request_uri.host, @request_uri.port else host, port = @config[:ServerName], @config[:Port] end error_body(backtrace, ex, host, port) end
Redirects to url
with a WEBrick::HTTPStatus::Redirect
status
.
Example:
res.set_redirect WEBrick::HTTPStatus::TemporaryRedirect
# File lib/webrick/httpresponse.rb, line 395 def set_redirect(status, url) url = URI(url).to_s @body = "<HTML><A HREF=\"#{url}\">#{url}</A>.</HTML>\n" @header['location'] = url raise status end
Sets the response’s status to the status
code
# File lib/webrick/httpresponse.rb, line 147 def status=(status) @status = status @reason_phrase = HTTPStatus::reason_phrase(status) end
The response’s HTTP status line
# File lib/webrick/httpresponse.rb, line 140 def status_line "HTTP/#@http_version #@status #@reason_phrase".rstrip << CRLF end
Sets the response to be a streaming/upgrade response. This will disable keep-alive and chunked transfer encoding.
# File lib/webrick/httpresponse.rb, line 229 def upgrade!(protocol) @upgrade = protocol @keep_alive = false @chunked = false end
Private Instance Methods
# File lib/webrick/httpresponse.rb, line 432 def check_header(header_value) header_value = header_value.to_s if /[\r\n]/ =~ header_value raise InvalidHeader else header_value end end