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