An HTTP response. This is filled in by the service or do_* methods of a WEBrick
HTTP Servlet.
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
Creates a new HTTP response object. WEBrick::Config::HTTP is the default configuration.
# File webrick/httpresponse.rb, line 112 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
Retrieves the response header field
# File webrick/httpresponse.rb, line 150 def [](field) @header[field.downcase] end
Sets the response header field
to value
# File webrick/httpresponse.rb, line 157 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 webrick/httpresponse.rb, line 209 def chunked=(val) @chunked = val ? true : false end
Will this response body be returned using chunked transfer-encoding?
# File webrick/httpresponse.rb, line 202 def chunked? @chunked end
The content-length header
# File webrick/httpresponse.rb, line 165 def content_length if len = self['content-length'] return Integer(len) end end
Sets the content-length header to len
# File webrick/httpresponse.rb, line 174 def content_length=(len) self['content-length'] = len.to_s end
The content-type header
# File webrick/httpresponse.rb, line 181 def content_type self['content-type'] end
Sets the content-type header to type
# File webrick/httpresponse.rb, line 188 def content_type=(type) self['content-type'] = type end
Iterates over each header in the response
# File webrick/httpresponse.rb, line 195 def each @header.each{|field, value| yield(field, value) } end
Will this response's connection be kept alive?
# File webrick/httpresponse.rb, line 216 def keep_alive? @keep_alive end
Creates an error page for exception ex
with an optional backtrace
# File webrick/httpresponse.rb, line 383 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 webrick/httpresponse.rb, line 373 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