Maintenance of Ruby 2.0.0 ended on February 24, 2016. Read more

In Files

  • webrick/httpresponse.rb

WEBrick::HTTPResponse

An HTTP response. This is filled in by the service or do_* methods of a WEBrick HTTP Servlet.

Attributes

body[RW]

Body may be a String or IO subclass.

config[R]

Configuration for this response

cookies[R]

Response cookies

filename[RW]

Filename of the static file in this response. Only used by the FileHandler servlet.

header[R]

Response header

http_version[R]

HTTP Response version

keep_alive[RW]

Is this a keep-alive response?

reason_phrase[RW]

Response reason phrase (“OK”)

request_http_version[RW]

Request HTTP version for this response

request_method[RW]

Request method for this response

request_uri[RW]

Request URI for this response

sent_size[R]

Bytes sent in this response

status[R]

Response status code (200)

Public Class Methods

new(config) click to toggle source

Creates a new HTTP response object. WEBrick::Config::HTTP is the default configuration.

 
               # File webrick/httpresponse.rb, line 94
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
end
            

Public Instance Methods

[](field) click to toggle source

Retrieves the response header field

 
               # File webrick/httpresponse.rb, line 131
def [](field)
  @header[field.downcase]
end
            
[]=(field, value) click to toggle source

Sets the response header field to value

 
               # File webrick/httpresponse.rb, line 138
def []=(field, value)
  @header[field.downcase] = value.to_s
end
            
chunked=(val) click to toggle source

Enables chunked transfer encoding.

 
               # File webrick/httpresponse.rb, line 189
def chunked=(val)
  @chunked = val ? true : false
end
            
chunked?() click to toggle source

Will this response body be returned using chunked transfer-encoding?

 
               # File webrick/httpresponse.rb, line 182
def chunked?
  @chunked
end
            
content_length() click to toggle source

The content-length header

 
               # File webrick/httpresponse.rb, line 145
def content_length
  if len = self['content-length']
    return Integer(len)
  end
end
            
content_length=(len) click to toggle source

Sets the content-length header to len

 
               # File webrick/httpresponse.rb, line 154
def content_length=(len)
  self['content-length'] = len.to_s
end
            
content_type() click to toggle source

The content-type header

 
               # File webrick/httpresponse.rb, line 161
def content_type
  self['content-type']
end
            
content_type=(type) click to toggle source

Sets the content-type header to type

 
               # File webrick/httpresponse.rb, line 168
def content_type=(type)
  self['content-type'] = type
end
            
each() click to toggle source

Iterates over each header in the resopnse

 
               # File webrick/httpresponse.rb, line 175
def each
  @header.each{|field, value|  yield(field, value) }
end
            
keep_alive?() click to toggle source

Will this response's connection be kept alive?

 
               # File webrick/httpresponse.rb, line 196
def keep_alive?
  @keep_alive
end
            
set_error(ex, backtrace=false) click to toggle source

Creates an error page for exception ex with an optional backtrace

 
               # File webrick/httpresponse.rb, line 330
    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

      @body = ''
      @body << <<-_end_of_html_
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
  <HEAD><TITLE>#{HTMLUtils::escape(@reason_phrase)}</TITLE></HEAD>
  <BODY>
    <H1>#{HTMLUtils::escape(@reason_phrase)}</H1>
    #{HTMLUtils::escape(ex.message)}
    <HR>
      _end_of_html_

      if backtrace && $DEBUG
        @body << "backtrace of `#{HTMLUtils::escape(ex.class.to_s)}' "
        @body << "#{HTMLUtils::escape(ex.message)}"
        @body << "<PRE>"
        ex.backtrace.each{|line| @body << "\t#{line}\n"}
        @body << "</PRE><HR>"
      end

      @body << <<-_end_of_html_
    <ADDRESS>
     #{HTMLUtils::escape(@config[:ServerSoftware])} at
     #{host}:#{port}
    </ADDRESS>
  </BODY>
</HTML>
      _end_of_html_
    end
            
set_redirect(status, url) click to toggle source

Redirects to url with a WEBrick::HTTPStatus::Redirect status.

Example:

res.set_redirect WEBrick::HTTPStatus::TemporaryRedirect
 
               # File webrick/httpresponse.rb, line 321
def set_redirect(status, url)
  @body = "<HTML><A HREF=\"#{url.to_s}\">#{url.to_s}</A>.</HTML>\n"
  @header['location'] = url.to_s
  raise status
end
            
status=(status) click to toggle source

Sets the response's status to the status code

 
               # File webrick/httpresponse.rb, line 123
def status=(status)
  @status = status
  @reason_phrase = HTTPStatus::reason_phrase(status)
end
            
status_line() click to toggle source

The response's HTTP status line

 
               # File webrick/httpresponse.rb, line 116
def status_line
  "HTTP/#@http_version #@status #@reason_phrase #{CRLF}"
end