summary refs log tree commit
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2022-04-12 03:33:50 +1200
committerGitHub <noreply@github.com>2022-04-11 08:33:50 -0700
commitb0c2656921aec622de72cfe114cb7da0bf408993 (patch)
tree5b563f8295054ac4ebca0355cc44089fb2775155
parent0493142d9a472249383c72d6d7e1195b3ca38df0 (diff)
downloadrack-b0c2656921aec622de72cfe114cb7da0bf408993.tar.gz
Tidy up documentation and specs in relation to lower case headers. (#1855)
-rw-r--r--README.rdoc8
-rw-r--r--lib/rack/builder.rb6
-rw-r--r--lib/rack/chunked.rb14
-rw-r--r--lib/rack/conditional_get.rb12
-rw-r--r--lib/rack/content_length.rb6
-rw-r--r--lib/rack/content_type.rb2
-rw-r--r--lib/rack/etag.rb8
-rw-r--r--lib/rack/multipart.rb6
-rw-r--r--lib/rack/multipart/generator.rb8
-rw-r--r--lib/rack/multipart/parser.rb2
-rw-r--r--lib/rack/request.rb4
-rw-r--r--lib/rack/response.rb8
-rw-r--r--lib/rack/runtime.rb2
-rw-r--r--lib/rack/sendfile.rb34
-rw-r--r--lib/rack/server.rb2
-rw-r--r--lib/rack/static.rb4
-rw-r--r--test/builder/an_underscore_app.rb2
-rw-r--r--test/builder/bom.ru2
-rw-r--r--test/builder/comment.ru2
-rw-r--r--test/builder/end.ru2
-rw-r--r--test/builder/frozen.ru2
-rw-r--r--test/builder/line.ru2
-rw-r--r--test/builder/options.ru4
-rw-r--r--test/multipart/bad_robots26
-rw-r--r--test/multipart/binarybin26667 -> 26667 bytes
-rw-r--r--test/multipart/content_type_and_no_disposition2
-rw-r--r--test/multipart/content_type_and_no_filename4
-rw-r--r--test/multipart/empty6
-rw-r--r--test/multipart/fail_16384_nofile406
-rw-r--r--test/multipart/filename_and_modification_param4
-rw-r--r--test/multipart/filename_and_no_name4
-rw-r--r--test/multipart/filename_with_encoded_words4
-rw-r--r--test/multipart/filename_with_escaped_quotes4
-rw-r--r--test/multipart/filename_with_escaped_quotes_and_modification_param4
-rw-r--r--test/multipart/filename_with_null_byte4
-rw-r--r--test/multipart/filename_with_percent_escaped_quotes4
-rw-r--r--test/multipart/filename_with_plus4
-rw-r--r--test/multipart/filename_with_single_quote4
-rw-r--r--test/multipart/filename_with_unescaped_percentages4
-rw-r--r--test/multipart/filename_with_unescaped_percentages24
-rw-r--r--test/multipart/filename_with_unescaped_percentages34
-rw-r--r--test/multipart/filename_with_unescaped_quotes4
-rw-r--r--test/multipart/ie4
-rw-r--r--test/multipart/invalid_character4
-rw-r--r--test/multipart/mixed_files16
-rw-r--r--test/multipart/nested6
-rw-r--r--test/multipart/none4
-rw-r--r--test/multipart/quoted10
-rw-r--r--test/multipart/robust_field_separation4
-rw-r--r--test/multipart/semicolon4
-rw-r--r--test/multipart/text10
-rw-r--r--test/multipart/three_files_three_fields12
-rw-r--r--test/multipart/webkit14
-rw-r--r--test/spec_chunked.rb6
-rw-r--r--test/spec_conditional_get.rb12
-rw-r--r--test/spec_etag.rb16
-rw-r--r--test/spec_files.rb2
-rwxr-xr-xtest/spec_lint.rb14
-rw-r--r--test/spec_multipart.rb112
-rw-r--r--test/spec_request.rb34
-rw-r--r--test/spec_response.rb177
-rw-r--r--test/spec_sendfile.rb68
-rw-r--r--test/spec_server.rb5
-rw-r--r--test/spec_static.rb8
64 files changed, 590 insertions, 590 deletions
diff --git a/README.rdoc b/README.rdoc
index 3bdaa974..6f822180 100644
--- a/README.rdoc
+++ b/README.rdoc
@@ -69,8 +69,8 @@ middleware:
 * Rack::ConditionalGet, for returning not modified responses when the response
   has not changed.
 * Rack::Config, for modifying the environment before processing the request.
-* Rack::ContentLength, for setting Content-Length header based on body size.
-* Rack::ContentType, for setting default Content-Type header for responses.
+* Rack::ContentLength, for setting content-length header based on body size.
+* Rack::ContentType, for setting default content-type header for responses.
 * Rack::Deflater, for compressing responses with gzip.
 * Rack::ETag, for setting ETag header on string bodies.
 * Rack::Events, for providing easy hooks when a request is received
@@ -118,8 +118,8 @@ over:
   application returns a not found or method not supported response.
 * Rack::Directory, for serving files under a given directory, with
   directory indexes.
-* Rack::MediaType, for parsing Content-Type headers.
-* Rack::Mime, for determining Content-Type based on file extension.
+* Rack::MediaType, for parsing content-type headers.
+* Rack::Mime, for determining content-type based on file extension.
 * Rack::RewindableInput, for making any IO object rewindable, using
   a temporary file buffer.
 * Rack::URLMap, to route to multiple applications inside the same process.
diff --git a/lib/rack/builder.rb b/lib/rack/builder.rb
index 9ef656c1..cccc47f2 100644
--- a/lib/rack/builder.rb
+++ b/lib/rack/builder.rb
@@ -135,7 +135,7 @@ module Rack
     #   end
     #
     #   use Middleware
-    #   run lambda { |env| [200, { "Content-Type" => "text/plain" }, ["OK"]] }
+    #   run lambda { |env| [200, { "content-type" => "text/plain" }, ["OK"]] }
     #
     # All requests through to this application will first be processed by the middleware class.
     # The +call+ method in this example sets an additional environment key which then can be
@@ -152,13 +152,13 @@ module Rack
     # Takes an argument that is an object that responds to #call and returns a Rack response.
     # The simplest form of this is a lambda object:
     #
-    #   run lambda { |env| [200, { "Content-Type" => "text/plain" }, ["OK"]] }
+    #   run lambda { |env| [200, { "content-type" => "text/plain" }, ["OK"]] }
     #
     # However this could also be a class:
     #
     #   class Heartbeat
     #     def self.call(env)
-    #      [200, { "Content-Type" => "text/plain" }, ["OK"]]
+    #      [200, { "content-type" => "text/plain" }, ["OK"]]
     #     end
     #   end
     #
diff --git a/lib/rack/chunked.rb b/lib/rack/chunked.rb
index 54a24f1b..6b314bec 100644
--- a/lib/rack/chunked.rb
+++ b/lib/rack/chunked.rb
@@ -7,20 +7,20 @@ module Rack
   warn "Rack::Chunked is deprecated and will be removed in Rack 3.1", uplevel: 1
 
   # Middleware that applies chunked transfer encoding to response bodies
-  # when the response does not include a Content-Length header.
+  # when the response does not include a content-length header.
   #
-  # This supports the Trailer response header to allow the use of trailing
+  # This supports the trailer response header to allow the use of trailing
   # headers in the chunked encoding.  However, using this requires you manually
   # specify a response body that supports a +trailers+ method.  Example:
   #
-  #   [200, { 'Trailer' => 'Expires'}, ["Hello", "World"]]
+  #   [200, { 'trailer' => 'expires'}, ["Hello", "World"]]
   #   # error raised
   #
   #   body = ["Hello", "World"]
   #   def body.trailers
-  #     { 'Expires' => Time.now.to_s }
+  #     { 'expires' => Time.now.to_s }
   #   end
-  #   [200, { 'Trailer' => 'Expires'}, body]
+  #   [200, { 'trailer' => 'expires'}, body]
   #   # No exception raised
   class Chunked
     include Rack::Utils
@@ -96,8 +96,8 @@ module Rack
     end
 
     # If the rack app returns a response that should have a body,
-    # but does not have Content-Length or Transfer-Encoding headers,
-    # modify the response to use chunked Transfer-Encoding.
+    # but does not have content-length or transfer-encoding headers,
+    # modify the response to use chunked transfer-encoding.
     def call(env)
       status, headers, body = @app.call(env)
 
diff --git a/lib/rack/conditional_get.rb b/lib/rack/conditional_get.rb
index 6ee1e62c..a1e9fafd 100644
--- a/lib/rack/conditional_get.rb
+++ b/lib/rack/conditional_get.rb
@@ -6,9 +6,9 @@ require_relative 'body_proxy'
 
 module Rack
 
-  # Middleware that enables conditional GET using If-None-Match and
-  # If-Modified-Since. The application should set either or both of the
-  # Last-Modified or Etag response headers according to RFC 2616. When
+  # Middleware that enables conditional GET using if-none-match and
+  # if-modified-since. The application should set either or both of the
+  # last-modified or etag response headers according to RFC 2616. When
   # either of the conditions is met, the response body is set to be zero
   # length and the response status is set to 304 Not Modified.
   #
@@ -49,7 +49,7 @@ module Rack
     # Return whether the response has not been modified since the
     # last request.
     def fresh?(env, headers)
-      # If-None-Match has priority over If-Modified-Since per RFC 7232
+      # if-none-match has priority over if-modified-since per RFC 7232
       if none_match = env['HTTP_IF_NONE_MATCH']
         etag_matches?(none_match, headers)
       elsif (modified_since = env['HTTP_IF_MODIFIED_SINCE']) && (modified_since = to_rfc2822(modified_since))
@@ -57,13 +57,13 @@ module Rack
       end
     end
 
-    # Whether the ETag response header matches the If-None-Match request header.
+    # Whether the etag response header matches the if-none-match request header.
     # If so, the request has not been modified.
     def etag_matches?(none_match, headers)
       headers[ETAG] == none_match
     end
 
-    # Whether the Last-Modified response header matches the If-Modified-Since
+    # Whether the last-modified response header matches the if-modified-since
     # request header.  If so, the request has not been modified.
     def modified_since?(modified_since, headers)
       last_modified = to_rfc2822(headers['last-modified']) and
diff --git a/lib/rack/content_length.rb b/lib/rack/content_length.rb
index 433f9e9b..6a3711e2 100644
--- a/lib/rack/content_length.rb
+++ b/lib/rack/content_length.rb
@@ -5,9 +5,9 @@ require_relative 'utils'
 
 module Rack
 
-  # Sets the Content-Length header on responses that do not specify
-  # a Content-Length or Transfer-Encoding header.  Note that this
-  # does not fix responses that have an invalid Content-Length
+  # Sets the content-length header on responses that do not specify
+  # a content-length or transfer-encoding header.  Note that this
+  # does not fix responses that have an invalid content-length
   # header specified.
   class ContentLength
     include Rack::Utils
diff --git a/lib/rack/content_type.rb b/lib/rack/content_type.rb
index 9e04a831..48c91e6c 100644
--- a/lib/rack/content_type.rb
+++ b/lib/rack/content_type.rb
@@ -5,7 +5,7 @@ require_relative 'utils'
 
 module Rack
 
-  # Sets the Content-Type header on responses which don't have one.
+  # Sets the content-type header on responses which don't have one.
   #
   # Builder Usage:
   #   use Rack::ContentType, "text/plain"
diff --git a/lib/rack/etag.rb b/lib/rack/etag.rb
index 322abdc7..7f90532b 100644
--- a/lib/rack/etag.rb
+++ b/lib/rack/etag.rb
@@ -6,14 +6,14 @@ require_relative 'constants'
 require_relative 'utils'
 
 module Rack
-  # Automatically sets the ETag header on all String bodies.
+  # Automatically sets the etag header on all String bodies.
   #
-  # The ETag header is skipped if ETag or Last-Modified headers are sent or if
+  # The etag header is skipped if etag or last-modified headers are sent or if
   # a sendfile body (body.responds_to :to_path) is given (since such cases
   # should be handled by apache/nginx).
   #
-  # On initialization, you can pass two parameters: a Cache-Control directive
-  # used when Etag is absent and a directive when it is present. The first
+  # On initialization, you can pass two parameters: a cache-control directive
+  # used when etag is absent and a directive when it is present. The first
   # defaults to nil, while the second defaults to "max-age=0, private, must-revalidate"
   class ETag
     ETAG_STRING = Rack::ETAG
diff --git a/lib/rack/multipart.rb b/lib/rack/multipart.rb
index b7ccb56e..5f4e3bf4 100644
--- a/lib/rack/multipart.rb
+++ b/lib/rack/multipart.rb
@@ -15,12 +15,12 @@ module Rack
     MULTIPART_BOUNDARY = "AaB03x"
     MULTIPART = %r|\Amultipart/.*boundary=\"?([^\";,]+)\"?|ni
     TOKEN = /[^\s()<>,;:\\"\/\[\]?=]+/
-    CONDISP = /Content-Disposition:\s*#{TOKEN}\s*/i
+    CONDISP = /content-disposition:\s*#{TOKEN}\s*/i
     VALUE = /"(?:\\"|[^"])*"|#{TOKEN}/
     BROKEN_QUOTED = /^#{CONDISP}.*;\s*filename="(.*?)"(?:\s*$|\s*;\s*#{TOKEN}=)/i
     BROKEN_UNQUOTED = /^#{CONDISP}.*;\s*filename=(#{TOKEN})/i
-    MULTIPART_CONTENT_TYPE = /Content-Type: (.*)#{EOL}/ni
-    MULTIPART_CONTENT_DISPOSITION = /Content-Disposition:.*;\s*name=(#{VALUE})/ni
+    MULTIPART_CONTENT_TYPE = /content-type: (.*)#{EOL}/ni
+    MULTIPART_CONTENT_DISPOSITION = /content-disposition:.*;\s*name=(#{VALUE})/ni
     MULTIPART_CONTENT_ID = /Content-ID:\s*([^#{EOL}]*)/ni
     # Updated definitions from RFC 2231
     ATTRIBUTE_CHAR = %r{[^ \t\v\n\r)(><@,;:\\"/\[\]?='*%]}
diff --git a/lib/rack/multipart/generator.rb b/lib/rack/multipart/generator.rb
index 8edb3d6a..fdad3406 100644
--- a/lib/rack/multipart/generator.rb
+++ b/lib/rack/multipart/generator.rb
@@ -79,9 +79,9 @@ module Rack
         filename = "; filename=\"#{Utils.escape_path(file.original_filename)}\"" if file.original_filename
 <<-EOF
 --#{MULTIPART_BOUNDARY}\r
-Content-Disposition: form-data; name="#{name}"#{filename}\r
-Content-Type: #{file.content_type}\r
-#{"Content-Length: #{length}\r\n" if length}\r
+content-disposition: form-data; name="#{name}"#{filename}\r
+content-type: #{file.content_type}\r
+#{"content-length: #{length}\r\n" if length}\r
 #{io.read}\r
 EOF
       end
@@ -89,7 +89,7 @@ EOF
       def content_for_other(file, name)
 <<-EOF
 --#{MULTIPART_BOUNDARY}\r
-Content-Disposition: form-data; name="#{name}"\r
+content-disposition: form-data; name="#{name}"\r
 \r
 #{file}\r
 EOF
diff --git a/lib/rack/multipart/parser.rb b/lib/rack/multipart/parser.rb
index ec851b7f..9f2346a6 100644
--- a/lib/rack/multipart/parser.rb
+++ b/lib/rack/multipart/parser.rb
@@ -43,7 +43,7 @@ module Rack
           if str
             @cursor += str.bytesize
           else
-            # Raise an error for mismatching Content-Length and actual contents
+            # Raise an error for mismatching content-length and actual contents
             raise EOFError, "bad content body"
           end
 
diff --git a/lib/rack/request.rb b/lib/rack/request.rb
index 7ae71ae3..99d9674b 100644
--- a/lib/rack/request.rb
+++ b/lib/rack/request.rb
@@ -478,13 +478,13 @@ module Rack
       end
 
       # Determine whether the request body contains form-data by checking
-      # the request Content-Type for one of the media-types:
+      # the request content-type for one of the media-types:
       # "application/x-www-form-urlencoded" or "multipart/form-data". The
       # list of form-data media types can be modified through the
       # +FORM_DATA_MEDIA_TYPES+ array.
       #
       # A request body is also assumed to contain form-data when no
-      # Content-Type header is provided and the request_method is POST.
+      # content-type header is provided and the request_method is POST.
       def form_data?
         type = media_type
         meth = get_header(RACK_METHODOVERRIDE_ORIGINAL_METHOD) || get_header(REQUEST_METHOD)
diff --git a/lib/rack/response.rb b/lib/rack/response.rb
index 29524ff0..d75a0fac 100644
--- a/lib/rack/response.rb
+++ b/lib/rack/response.rb
@@ -133,7 +133,7 @@ module Rack
       end
     end
 
-    # Append to body and update Content-Length.
+    # Append to body and update content-length.
     #
     # NOTE: Do not mix #write and direct #body access!
     #
@@ -202,10 +202,10 @@ module Rack
       # Add a header that may have multiple values.
       #
       # Example:
-      #   response.add_header 'Vary', 'Accept-Encoding'
-      #   response.add_header 'Vary', 'Cookie'
+      #   response.add_header 'vary', 'accept-encoding'
+      #   response.add_header 'vary', 'cookie'
       #
-      #   assert_equal 'Accept-Encoding,Cookie', response.get_header('Vary')
+      #   assert_equal 'accept-encoding,cookie', response.get_header('vary')
       #
       # http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
       def add_header(key, value)
diff --git a/lib/rack/runtime.rb b/lib/rack/runtime.rb
index 55ca49f3..405f4cbb 100644
--- a/lib/rack/runtime.rb
+++ b/lib/rack/runtime.rb
@@ -3,7 +3,7 @@
 require_relative 'utils'
 
 module Rack
-  # Sets an "X-Runtime" response header, indicating the response
+  # Sets an "x-runtime" response header, indicating the response
   # time of the request, in seconds
   #
   # You can put it right before the application to see the processing
diff --git a/lib/rack/sendfile.rb b/lib/rack/sendfile.rb
index cc32f1be..43cabf91 100644
--- a/lib/rack/sendfile.rb
+++ b/lib/rack/sendfile.rb
@@ -9,28 +9,28 @@ module Rack
   # = Sendfile
   #
   # The Sendfile middleware intercepts responses whose body is being
-  # served from a file and replaces it with a server specific X-Sendfile
+  # served from a file and replaces it with a server specific x-sendfile
   # header. The web server is then responsible for writing the file contents
   # to the client. This can dramatically reduce the amount of work required
   # by the Ruby backend and takes advantage of the web server's optimized file
   # delivery code.
   #
   # In order to take advantage of this middleware, the response body must
-  # respond to +to_path+ and the request must include an X-Sendfile-Type
+  # respond to +to_path+ and the request must include an x-sendfile-type
   # header. Rack::Files and other components implement +to_path+ so there's
-  # rarely anything you need to do in your application. The X-Sendfile-Type
+  # rarely anything you need to do in your application. The x-sendfile-type
   # header is typically set in your web servers configuration. The following
   # sections attempt to document
   #
   # === Nginx
   #
-  # Nginx supports the X-Accel-Redirect header. This is similar to X-Sendfile
+  # Nginx supports the x-accel-redirect header. This is similar to x-sendfile
   # but requires parts of the filesystem to be mapped into a private URL
   # hierarchy.
   #
   # The following example shows the Nginx configuration required to create
-  # a private "/files/" area, enable X-Accel-Redirect, and pass the special
-  # X-Sendfile-Type and X-Accel-Mapping headers to the backend:
+  # a private "/files/" area, enable x-accel-redirect, and pass the special
+  # x-sendfile-type and x-accel-mapping headers to the backend:
   #
   #   location ~ /files/(.*) {
   #     internal;
@@ -44,14 +44,14 @@ module Rack
   #     proxy_set_header   X-Real-IP           $remote_addr;
   #     proxy_set_header   X-Forwarded-For     $proxy_add_x_forwarded_for;
   #
-  #     proxy_set_header   X-Sendfile-Type     X-Accel-Redirect;
-  #     proxy_set_header   X-Accel-Mapping     /var/www/=/files/;
+  #     proxy_set_header   x-sendfile-type     x-accel-redirect;
+  #     proxy_set_header   x-accel-mapping     /var/www/=/files/;
   #
   #     proxy_pass         http://127.0.0.1:8080/;
   #   }
   #
-  # Note that the X-Sendfile-Type header must be set exactly as shown above.
-  # The X-Accel-Mapping header should specify the location on the file system,
+  # Note that the x-sendfile-type header must be set exactly as shown above.
+  # The x-accel-mapping header should specify the location on the file system,
   # followed by an equals sign (=), followed name of the private URL pattern
   # that it maps to. The middleware performs a simple substitution on the
   # resulting path.
@@ -60,8 +60,8 @@ module Rack
   #
   # === lighttpd
   #
-  # Lighttpd has supported some variation of the X-Sendfile header for some
-  # time, although only recent version support X-Sendfile in a reverse proxy
+  # Lighttpd has supported some variation of the x-sendfile header for some
+  # time, although only recent version support x-sendfile in a reverse proxy
   # configuration.
   #
   #   $HTTP["host"] == "example.com" {
@@ -75,7 +75,7 @@ module Rack
   #
   #      proxy-core.allow-x-sendfile = "enable"
   #      proxy-core.rewrite-request = (
-  #        "X-Sendfile-Type" => (".*" => "X-Sendfile")
+  #        "x-sendfile-type" => (".*" => "x-sendfile")
   #      )
   #    }
   #
@@ -83,21 +83,21 @@ module Rack
   #
   # === Apache
   #
-  # X-Sendfile is supported under Apache 2.x using a separate module:
+  # x-sendfile is supported under Apache 2.x using a separate module:
   #
   # https://tn123.org/mod_xsendfile/
   #
   # Once the module is compiled and installed, you can enable it using
   # XSendFile config directive:
   #
-  #   RequestHeader Set X-Sendfile-Type X-Sendfile
+  #   RequestHeader Set x-sendfile-type x-sendfile
   #   ProxyPassReverse / http://localhost:8001/
   #   XSendFile on
   #
   # === Mapping parameter
   #
   # The third parameter allows for an overriding extension of the
-  # X-Accel-Mapping header. Mappings should be provided in tuples of internal to
+  # x-accel-mapping header. Mappings should be provided in tuples of internal to
   # external. The internal values may contain regular expression syntax, they
   # will be matched with case indifference.
 
@@ -126,7 +126,7 @@ module Rack
               obody.close if obody.respond_to?(:close)
             end
           else
-            env[RACK_ERRORS].puts "X-Accel-Mapping header missing"
+            env[RACK_ERRORS].puts "x-accel-mapping header missing"
           end
         when /x-sendfile|x-lighttpd-send-file/i
           path = ::File.expand_path(body.to_path)
diff --git a/lib/rack/server.rb b/lib/rack/server.rb
index c4bcbc74..1436129f 100644
--- a/lib/rack/server.rb
+++ b/lib/rack/server.rb
@@ -169,7 +169,7 @@ module Rack
     #
     #  Rack::Server.start(
     #    :app => lambda do |e|
-    #      [200, {'Content-Type' => 'text/html'}, ['hello world']]
+    #      [200, {'content-type' => 'text/html'}, ['hello world']]
     #    end,
     #    :server => 'cgi'
     #  )
diff --git a/lib/rack/static.rb b/lib/rack/static.rb
index 8130cc3a..f981397b 100644
--- a/lib/rack/static.rb
+++ b/lib/rack/static.rb
@@ -82,11 +82,11 @@ module Rack
   #         :header_rules => [
   #           # Cache all static files in public caches (e.g. Rack::Cache)
   #           #  as well as in the browser
-  #           [:all, {'Cache-Control' => 'public, max-age=31536000'}],
+  #           [:all, {'cache-control' => 'public, max-age=31536000'}],
   #
   #           # Provide web fonts with cross-origin access-control-headers
   #           #  Firefox requires this when serving assets using a Content Delivery Network
-  #           [:fonts, {'Access-Control-Allow-Origin' => '*'}]
+  #           [:fonts, {'access-control-allow-origin' => '*'}]
   #         ]
   #
   class Static
diff --git a/test/builder/an_underscore_app.rb b/test/builder/an_underscore_app.rb
index f58a2be5..4f6e87e5 100644
--- a/test/builder/an_underscore_app.rb
+++ b/test/builder/an_underscore_app.rb
@@ -2,6 +2,6 @@
 
 class AnUnderscoreApp
   def self.call(env)
-    [200, { 'Content-Type' => 'text/plain' }, ['OK']]
+    [200, { 'content-type' => 'text/plain' }, ['OK']]
   end
 end
diff --git a/test/builder/bom.ru b/test/builder/bom.ru
index 5740f9a1..6f491f0f 100644
--- a/test/builder/bom.ru
+++ b/test/builder/bom.ru
@@ -1 +1 @@
-run -> (env) { [200, { 'Content-Type' => 'text/plain' }, ['OK']] }
+run -> (env) { [200, { 'content-type' => 'text/plain' }, ['OK']] }
diff --git a/test/builder/comment.ru b/test/builder/comment.ru
index 894ba5d0..7d03db8b 100644
--- a/test/builder/comment.ru
+++ b/test/builder/comment.ru
@@ -3,4 +3,4 @@
 =begin
 
 =end
-run lambda { |env| [200, { 'Content-Type' => 'text/plain' }, ['OK']] }
+run lambda { |env| [200, { 'content-type' => 'text/plain' }, ['OK']] }
diff --git a/test/builder/end.ru b/test/builder/end.ru
index dd8d45a9..f1dcf566 100644
--- a/test/builder/end.ru
+++ b/test/builder/end.ru
@@ -1,6 +1,6 @@
 # frozen_string_literal: true
 
-run lambda { |env| [200, { 'Content-Type' => 'text/plain' }, ['OK']] }
+run lambda { |env| [200, { 'content-type' => 'text/plain' }, ['OK']] }
 __END__
 Should not be evaluated
 Neither should
diff --git a/test/builder/frozen.ru b/test/builder/frozen.ru
index 5bad750f..71ccc54d 100644
--- a/test/builder/frozen.ru
+++ b/test/builder/frozen.ru
@@ -3,5 +3,5 @@
 run lambda { |env|
   body = 'frozen'
   raise "Not frozen!" unless body.frozen?
-  [200, { 'Content-Type' => 'text/plain' }, [body]]
+  [200, { 'content-type' => 'text/plain' }, [body]]
 }
diff --git a/test/builder/line.ru b/test/builder/line.ru
index 9ad88986..03a8e017 100644
--- a/test/builder/line.ru
+++ b/test/builder/line.ru
@@ -1,3 +1,3 @@
 # frozen_string_literal: true
 
-run lambda{ |env| [200, { 'Content-Type' => 'text/plain' }, [__LINE__.to_s]] }
+run lambda{ |env| [200, { 'content-type' => 'text/plain' }, [__LINE__.to_s]] }
diff --git a/test/builder/options.ru b/test/builder/options.ru
new file mode 100644
index 00000000..5b3b42b6
--- /dev/null
+++ b/test/builder/options.ru
@@ -0,0 +1,4 @@
+# frozen_string_literal: true
+
+#\ -d -p 2929 --env test
+run lambda { |env| [200, { 'content-type' => 'text/plain' }, ['OK']] }
diff --git a/test/multipart/bad_robots b/test/multipart/bad_robots
index 7e5bd418..c4b8258f 100644
--- a/test/multipart/bad_robots
+++ b/test/multipart/bad_robots
@@ -1,5 +1,5 @@
 --1yy3laWhgX31qpiHinh67wJXqKalukEUTvqTzmon
-Content-Disposition: form-data; name="bbbbbbbbbbbbbbb"
+content-disposition: form-data; name="bbbbbbbbbbbbbbb"
 
 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -208,52 +208,52 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 aaaaaaaaaaaaaaaaaaaa
 
 --1yy3laWhgX31qpiHinh67wJXqKalukEUTvqTzmon
-Content-Disposition: form-data; name="ccccccc"
+content-disposition: form-data; name="ccccccc"
 
 ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
 --1yy3laWhgX31qpiHinh67wJXqKalukEUTvqTzmon
-Content-Disposition: form-data; name="file.name"
+content-disposition: form-data; name="file.name"
 
 INPUTMSG.gz
 --1yy3laWhgX31qpiHinh67wJXqKalukEUTvqTzmon
-Content-Disposition: form-data; name="file.content_type"
+content-disposition: form-data; name="file.content_type"
 
 application/octet-stream
 --1yy3laWhgX31qpiHinh67wJXqKalukEUTvqTzmon
-Content-Disposition: form-data; name="file.path"
+content-disposition: form-data; name="file.path"
 
 /var/tmp/uploads/4/0001728414
 --1yy3laWhgX31qpiHinh67wJXqKalukEUTvqTzmon
-Content-Disposition: form-data; name="file.md5"
+content-disposition: form-data; name="file.md5"
 
 aa73198feb4b4c1c3186f5e7466cbbcc
 --1yy3laWhgX31qpiHinh67wJXqKalukEUTvqTzmon
-Content-Disposition: form-data; name="file.size"
+content-disposition: form-data; name="file.size"
 
 13212
 --1yy3laWhgX31qpiHinh67wJXqKalukEUTvqTzmon
-Content-Disposition: form-data; name="size"
+content-disposition: form-data; name="size"
 
 80892
 --1yy3laWhgX31qpiHinh67wJXqKalukEUTvqTzmon
-Content-Disposition: form-data; name="mail_server_id"
+content-disposition: form-data; name="mail_server_id"
 
 <1111111111.22222222.3333333333333.JavaMail.app@ffff-aaaa.dddd>
 
 --1yy3laWhgX31qpiHinh67wJXqKalukEUTvqTzmon
-Content-Disposition: form-data; name="addresses"
+content-disposition: form-data; name="addresses"
 
 {"campsy_programmer@pinkedum.com":{"domain":"pinkedum.com","name":"Campsy Programmer","type":["env_sender"],"mailbox":"campsy_programmer"},"tex@rapidcity.com":{"domain":"rapidcity.com","name":"Big Tex","type":["env_recipients","to"],"mailbox":"tex"},"group-digests@linkedin.com":{"domain":"linkedin.com","name":"Group Members","type":["from"],"mailbox":"group-digests"}}
 --1yy3laWhgX31qpiHinh67wJXqKalukEUTvqTzmon
-Content-Disposition: form-data; name="received_on"
+content-disposition: form-data; name="received_on"
 
 2009-11-15T14:21:11Z
 --1yy3laWhgX31qpiHinh67wJXqKalukEUTvqTzmon
-Content-Disposition: form-data; name="id"
+content-disposition: form-data; name="id"
 
 dbfd9804d26d11deab24e3037639bf77
 --1yy3laWhgX31qpiHinh67wJXqKalukEUTvqTzmon
-Content-Disposition: form-data; name="ip_address"
+content-disposition: form-data; name="ip_address"
 
 127.0.0.1
 --1yy3laWhgX31qpiHinh67wJXqKalukEUTvqTzmon--
diff --git a/test/multipart/binary b/test/multipart/binary
index a3bd67c4..ee2e7de2 100644
--- a/test/multipart/binary
+++ b/test/multipart/binary
Binary files differ
diff --git a/test/multipart/content_type_and_no_disposition b/test/multipart/content_type_and_no_disposition
index 8a07dacd..7b8fcb8c 100644
--- a/test/multipart/content_type_and_no_disposition
+++ b/test/multipart/content_type_and_no_disposition
@@ -1,5 +1,5 @@
 --AaB03x
-Content-Type: text/plain; charset=US-ASCII
+content-type: text/plain; charset=US-ASCII
 
 contents
 --AaB03x--
diff --git a/test/multipart/content_type_and_no_filename b/test/multipart/content_type_and_no_filename
index bd4c89b0..05ce5041 100644
--- a/test/multipart/content_type_and_no_filename
+++ b/test/multipart/content_type_and_no_filename
@@ -1,6 +1,6 @@
 --AaB03x
-Content-Disposition: form-data; name="text"
-Content-Type: text/plain; charset=US-ASCII
+content-disposition: form-data; name="text"
+content-type: text/plain; charset=US-ASCII
 
 contents
 --AaB03x--
diff --git a/test/multipart/empty b/test/multipart/empty
index f0f79835..d0f22e57 100644
--- a/test/multipart/empty
+++ b/test/multipart/empty
@@ -1,10 +1,10 @@
 --AaB03x
-Content-Disposition: form-data; name="submit-name"
+content-disposition: form-data; name="submit-name"
 
 Larry
 --AaB03x
-Content-Disposition: form-data; name="files"; filename="file1.txt"
-Content-Type: text/plain
+content-disposition: form-data; name="files"; filename="file1.txt"
+content-type: text/plain
 
 
 --AaB03x--
diff --git a/test/multipart/fail_16384_nofile b/test/multipart/fail_16384_nofile
index bdcd3320..b10ac5ba 100644
--- a/test/multipart/fail_16384_nofile
+++ b/test/multipart/fail_16384_nofile
@@ -1,813 +1,813 @@
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="_method"
+content-disposition: form-data; name="_method"
 
 put
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="authenticity_token"
+content-disposition: form-data; name="authenticity_token"
 
 XCUgSyYsZ+iHQunq/yCSKFzjeVmsXV/WcphHQ0J+05I=
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[SESE]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[SESE]"
 
 BooBar
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[BBBBBBBBB]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[BBBBBBBBB]"
 
 18
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[CCCCCCCCCCCCCCCCCCC]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[CCCCCCCCCCCCCCCCCCC]"
 
 0
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[STARTFOO]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[STARTFOO]"
 
 2009-11-04
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[ENDFOO]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[ENDFOO]"
 
 2009-12-01
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[DDDDDDDD]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[DDDDDDDD]"
 
 0
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[DDDDDDDD]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[DDDDDDDD]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[EEEEEEEEEE]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[EEEEEEEEEE]"
 
 10000
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[FFFFFFFFF]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[FFFFFFFFF]"
 
 boskoizcool
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[GGGGGGGGGGG]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[GGGGGGGGGGG]"
 
 0
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[GGGGGGGGGGG]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[GGGGGGGGGGG]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[YYYYYYYYYYYYYYY]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[YYYYYYYYYYYYYYY]"
 
 5.00
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[ZZZZZZZZZZZZZ]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[ZZZZZZZZZZZZZ]"
 
 mille
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[XXXXXXXXXXXXXXXXXXXXX]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[XXXXXXXXXXXXXXXXXXXXX]"
 
 0
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][9]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][9]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][10]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][10]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][11]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][11]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][12]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][12]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][13]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][13]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][14]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][14]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][15]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][15]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][16]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][16]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][17]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][17]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][18]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][18]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][19]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][19]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][20]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][20]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][21]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][21]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][22]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][22]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][23]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][23]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][0]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][0]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][1]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][1]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][2]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][2]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][3]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][3]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][4]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][4]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][5]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][5]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][6]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][6]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][7]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][7]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][8]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][1][8]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][9]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][9]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][10]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][10]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][11]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][11]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][12]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][12]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][13]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][13]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][14]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][14]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][15]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][15]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][16]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][16]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][17]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][17]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][18]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][18]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][19]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][19]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][20]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][20]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][21]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][21]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][22]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][22]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][23]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][23]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][0]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][0]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][1]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][1]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][2]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][2]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][3]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][3]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][4]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][4]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][5]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][5]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][6]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][6]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][7]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][7]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][8]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][2][8]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][9]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][9]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][10]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][10]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][11]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][11]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][12]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][12]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][13]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][13]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][14]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][14]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][15]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][15]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][16]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][16]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][17]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][17]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][18]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][18]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][19]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][19]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][20]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][20]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][21]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][21]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][22]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][22]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][23]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][23]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][0]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][0]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][1]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][1]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][2]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][2]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][3]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][3]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][4]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][4]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][5]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][5]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][6]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][6]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][7]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][7]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][8]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][3][8]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][9]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][9]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][10]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][10]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][11]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][11]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][12]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][12]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][13]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][13]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][14]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][14]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][15]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][15]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][16]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][16]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][17]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][17]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][18]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][18]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][19]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][19]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][20]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][20]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][21]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][21]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][22]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][22]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][23]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][23]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][0]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][0]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][1]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][1]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][2]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][2]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][3]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][3]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][4]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][4]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][5]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][5]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][6]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][6]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][7]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][7]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][8]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][4][8]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][9]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][9]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][10]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][10]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][11]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][11]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][12]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][12]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][13]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][13]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][14]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][14]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][15]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][15]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][16]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][16]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][17]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][17]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][18]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][18]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][19]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][19]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][20]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][20]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][21]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][21]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][22]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][22]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][23]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][23]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][0]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][0]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][1]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][1]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][2]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][2]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][3]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][3]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][4]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][4]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][5]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][5]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][6]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][6]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][7]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][7]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][8]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][5][8]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][9]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][9]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][10]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][10]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][11]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][11]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][12]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][12]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][13]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][13]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][14]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][14]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][15]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][15]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][16]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][16]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][17]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][17]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][18]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][18]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][19]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][19]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][20]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][20]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][21]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][21]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][22]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][22]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][23]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][23]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][0]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][0]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][1]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][1]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][2]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][2]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][3]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][3]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][4]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][4]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][5]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][5]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][6]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][6]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][7]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][7]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][8]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][6][8]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][9]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][9]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][10]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][10]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][11]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][11]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][12]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][12]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][13]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][13]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][14]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][14]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][15]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][15]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][16]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][16]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][17]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][17]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][18]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][18]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][19]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][19]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][20]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][20]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][21]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][21]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][22]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][22]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][23]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][23]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][0]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][0]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][1]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][1]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][2]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][2]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][3]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][3]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][4]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][4]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][5]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][5]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][6]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][6]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][7]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][7]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][8]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[VVVVVVVVVVVVVVVVVVVVVVV][0][8]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[WWWWWWWWWWWWWWWWWWWWWWWWW][678][ZEZE]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[WWWWWWWWWWWWWWWWWWWWWWWWW][678][ZEZE]"
 
 PLAPLAPLAINCINCINC
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[WWWWWWWWWWWWWWWWWWWWWWWWW][678][123412341234e]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[WWWWWWWWWWWWWWWWWWWWWWWWW][678][123412341234e]"
 
 SITE
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[WWWWWWWWWWWWWWWWWWWWWWWWW][678][12345678901]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[WWWWWWWWWWWWWWWWWWWWWWWWW][678][12345678901]"
 
 56
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[TARTARTAR_type]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[TARTARTAR_type]"
 
 none
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[TARTARTAR_wizard][has_hashashas_has]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[TARTARTAR_wizard][has_hashashas_has]"
 
 0
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[TARTARTAR_wizard][frefrefre_fre_freee]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[TARTARTAR_wizard][frefrefre_fre_freee]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[TARTARTAR_wizard][frefrefre_fre_frefre]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[TARTARTAR_wizard][frefrefre_fre_frefre]"
 
 forever
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[TARTARTAR_wizard][self_block]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[TARTARTAR_wizard][self_block]"
 
 0
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[TARTARTAR_wizard][GGG_RULES][][COUCOUN]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[TARTARTAR_wizard][GGG_RULES][][COUCOUN]"
 
 
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[TARTARTAR_wizard][GGG_RULES][][REGREG]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[TARTARTAR_wizard][GGG_RULES][][REGREG]"
 
 
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[TARTARTAR_wizard][GGG_RULES][][c1c1]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[TARTARTAR_wizard][GGG_RULES][][c1c1]"
 
 
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA_TARTARTAR_wizard_rule"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA_TARTARTAR_wizard_rule"
 
 
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[TARTARTAR_rule]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[TARTARTAR_rule]"
 
 
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[selection_selection]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[selection_selection]"
 
 R
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[PLAPLAPLA_MEMMEMMEMM_ATTRATTRER][new][-1][selection_selection]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[PLAPLAPLA_MEMMEMMEMM_ATTRATTRER][new][-1][selection_selection]"
 
 1
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[PLAPLAPLA_MEMMEMMEMM_ATTRATTRER][new][-1][ba_unit_id]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[PLAPLAPLA_MEMMEMMEMM_ATTRATTRER][new][-1][ba_unit_id]"
 
 1015
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[PLAPLAPLA_MEMMEMMEMM_ATTRATTRER][new][-2][selection_selection]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[PLAPLAPLA_MEMMEMMEMM_ATTRATTRER][new][-2][selection_selection]"
 
 2
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[PLAPLAPLA_MEMMEMMEMM_ATTRATTRER][new][-2][ba_unit_id]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[PLAPLAPLA_MEMMEMMEMM_ATTRATTRER][new][-2][ba_unit_id]"
 
 1017
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo
-Content-Disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[tile_name]"
+content-disposition: form-data; name="AAAAAAAAAAAAAAAAAAA[tile_name]"
 
 
 ------WebKitFormBoundaryWsY0GnpbI5U7ztzo--
diff --git a/test/multipart/filename_and_modification_param b/test/multipart/filename_and_modification_param
index 20893f42..e9af8618 100644
--- a/test/multipart/filename_and_modification_param
+++ b/test/multipart/filename_and_modification_param
@@ -1,6 +1,6 @@
 --AaB03x
-Content-Type: image/jpeg
-Content-Disposition: attachment; name="files"; filename=genome.jpeg; modification-date="Wed, 12 Feb 1997 16:29:51 -0500";
+content-type: image/jpeg
+content-disposition: attachment; name="files"; filename=genome.jpeg; modification-date="Wed, 12 Feb 1997 16:29:51 -0500";
 Content-Description: a complete map of the human genome
 
 contents
diff --git a/test/multipart/filename_and_no_name b/test/multipart/filename_and_no_name
index 00d58153..88953d3f 100644
--- a/test/multipart/filename_and_no_name
+++ b/test/multipart/filename_and_no_name
@@ -1,6 +1,6 @@
 --AaB03x
-Content-Disposition: form-data; filename="file1.txt"
-Content-Type: text/plain
+content-disposition: form-data; filename="file1.txt"
+content-type: text/plain
 
 contents
 --AaB03x--
diff --git a/test/multipart/filename_with_encoded_words b/test/multipart/filename_with_encoded_words
index 0c89b02a..a2747dfd 100644
--- a/test/multipart/filename_with_encoded_words
+++ b/test/multipart/filename_with_encoded_words
@@ -1,6 +1,6 @@
 --AaB03x
-Content-Type: image/jpeg
-Content-Disposition: attachment; name="files"; filename*=utf-8''%D1%84%D0%B0%D0%B9%D0%BB
+content-type: image/jpeg
+content-disposition: attachment; name="files"; filename*=utf-8''%D1%84%D0%B0%D0%B9%D0%BB
 Content-Description: a complete map of the human genome
 
 contents
diff --git a/test/multipart/filename_with_escaped_quotes b/test/multipart/filename_with_escaped_quotes
index 0a332df7..f096db5f 100644
--- a/test/multipart/filename_with_escaped_quotes
+++ b/test/multipart/filename_with_escaped_quotes
@@ -1,6 +1,6 @@
 --AaB03x
-Content-Disposition: form-data; name="files"; filename="escape \"quotes"
-Content-Type: application/octet-stream
+content-disposition: form-data; name="files"; filename="escape \"quotes"
+content-type: application/octet-stream
 
 contents
 --AaB03x--
diff --git a/test/multipart/filename_with_escaped_quotes_and_modification_param b/test/multipart/filename_with_escaped_quotes_and_modification_param
index 7619bd50..706a5ecb 100644
--- a/test/multipart/filename_with_escaped_quotes_and_modification_param
+++ b/test/multipart/filename_with_escaped_quotes_and_modification_param
@@ -1,6 +1,6 @@
 --AaB03x
-Content-Type: image/jpeg
-Content-Disposition: attachment; name="files"; filename=""human" genome.jpeg"; modification-date="Wed, 12 Feb 1997 16:29:51 -0500";
+content-type: image/jpeg
+content-disposition: attachment; name="files"; filename=""human" genome.jpeg"; modification-date="Wed, 12 Feb 1997 16:29:51 -0500";
 Content-Description: a complete map of the human genome
 
 contents
diff --git a/test/multipart/filename_with_null_byte b/test/multipart/filename_with_null_byte
index 961d44c4..26e28674 100644
--- a/test/multipart/filename_with_null_byte
+++ b/test/multipart/filename_with_null_byte
@@ -1,6 +1,6 @@
 --AaB03x
-Content-Type: image/jpeg
-Content-Disposition: attachment; name="files"; filename="flowers.exe%00.jpg"
+content-type: image/jpeg
+content-disposition: attachment; name="files"; filename="flowers.exe%00.jpg"
 Content-Description: a complete map of the human genome
 
 contents
diff --git a/test/multipart/filename_with_percent_escaped_quotes b/test/multipart/filename_with_percent_escaped_quotes
index 7db06413..af2394b1 100644
--- a/test/multipart/filename_with_percent_escaped_quotes
+++ b/test/multipart/filename_with_percent_escaped_quotes
@@ -1,6 +1,6 @@
 --AaB03x
-Content-Disposition: form-data; name="files"; filename="escape %22quotes"
-Content-Type: application/octet-stream
+content-disposition: form-data; name="files"; filename="escape %22quotes"
+content-type: application/octet-stream
 
 contents
 --AaB03x--
diff --git a/test/multipart/filename_with_plus b/test/multipart/filename_with_plus
index aa75022b..e169a11e 100644
--- a/test/multipart/filename_with_plus
+++ b/test/multipart/filename_with_plus
@@ -1,6 +1,6 @@
 --AaB03x
-Content-Disposition: form-data; name="files"; filename="foo+bar"
-Content-Type: application/octet-stream
+content-disposition: form-data; name="files"; filename="foo+bar"
+content-type: application/octet-stream
 
 contents
 --AaB03x--
diff --git a/test/multipart/filename_with_single_quote b/test/multipart/filename_with_single_quote
index f7220abe..8412701b 100644
--- a/test/multipart/filename_with_single_quote
+++ b/test/multipart/filename_with_single_quote
@@ -1,6 +1,6 @@
 --AaB03x
-Content-Type: image/jpeg
-Content-Disposition: attachment; name="files"; filename="bob's flowers.jpg"
+content-type: image/jpeg
+content-disposition: attachment; name="files"; filename="bob's flowers.jpg"
 Content-Description: a complete map of the human genome
 
 contents
diff --git a/test/multipart/filename_with_unescaped_percentages b/test/multipart/filename_with_unescaped_percentages
index f63dd228..a5ba7aea 100644
--- a/test/multipart/filename_with_unescaped_percentages
+++ b/test/multipart/filename_with_unescaped_percentages
@@ -1,6 +1,6 @@
 ------WebKitFormBoundary2NHc7OhsgU68l3Al
-Content-Disposition: form-data; name="document[attachment]"; filename="100% of a photo.jpeg"
-Content-Type: image/jpeg
+content-disposition: form-data; name="document[attachment]"; filename="100% of a photo.jpeg"
+content-type: image/jpeg
 
 contents
 ------WebKitFormBoundary2NHc7OhsgU68l3Al--
diff --git a/test/multipart/filename_with_unescaped_percentages2 b/test/multipart/filename_with_unescaped_percentages2
index 83eac365..57023461 100644
--- a/test/multipart/filename_with_unescaped_percentages2
+++ b/test/multipart/filename_with_unescaped_percentages2
@@ -1,6 +1,6 @@
 ------WebKitFormBoundary2NHc7OhsgU68l3Al
-Content-Disposition: form-data; name="document[attachment]"; filename="100%a"
-Content-Type: image/jpeg
+content-disposition: form-data; name="document[attachment]"; filename="100%a"
+content-type: image/jpeg
 
 contents
 ------WebKitFormBoundary2NHc7OhsgU68l3Al--
diff --git a/test/multipart/filename_with_unescaped_percentages3 b/test/multipart/filename_with_unescaped_percentages3
index 4dba3c88..f8d9114e 100644
--- a/test/multipart/filename_with_unescaped_percentages3
+++ b/test/multipart/filename_with_unescaped_percentages3
@@ -1,6 +1,6 @@
 ------WebKitFormBoundary2NHc7OhsgU68l3Al
-Content-Disposition: form-data; name="document[attachment]"; filename="100%"
-Content-Type: image/jpeg
+content-disposition: form-data; name="document[attachment]"; filename="100%"
+content-type: image/jpeg
 
 contents
 ------WebKitFormBoundary2NHc7OhsgU68l3Al--
diff --git a/test/multipart/filename_with_unescaped_quotes b/test/multipart/filename_with_unescaped_quotes
index 9a291e8e..6cd7c0da 100644
--- a/test/multipart/filename_with_unescaped_quotes
+++ b/test/multipart/filename_with_unescaped_quotes
@@ -1,6 +1,6 @@
 --AaB03x
-Content-Disposition: form-data; name="files"; filename="escape "quotes"
-Content-Type: application/octet-stream
+content-disposition: form-data; name="files"; filename="escape "quotes"
+content-type: application/octet-stream
 
 contents
 --AaB03x--
diff --git a/test/multipart/ie b/test/multipart/ie
index eae06ab5..ac8151b1 100644
--- a/test/multipart/ie
+++ b/test/multipart/ie
@@ -1,6 +1,6 @@
 --AaB03x
-Content-Disposition: form-data; name="files"; filename="C:\Documents and Settings\Administrator\Desktop\file1.txt"
-Content-Type: text/plain
+content-disposition: form-data; name="files"; filename="C:\Documents and Settings\Administrator\Desktop\file1.txt"
+content-type: text/plain
 
 contents
 --AaB03x--
diff --git a/test/multipart/invalid_character b/test/multipart/invalid_character
index 82467181..324e6400 100644
--- a/test/multipart/invalid_character
+++ b/test/multipart/invalid_character
@@ -1,6 +1,6 @@
 --AaB03x
-Content-Disposition: form-data; name="files"; filename="invalidÃ.txt"
-Content-Type: text/plain
+content-disposition: form-data; name="files"; filename="invalidÃ.txt"
+content-type: text/plain
 
 contents
 --AaB03x--
diff --git a/test/multipart/mixed_files b/test/multipart/mixed_files
index 624d8045..253ca74c 100644
--- a/test/multipart/mixed_files
+++ b/test/multipart/mixed_files
@@ -1,20 +1,20 @@
 --AaB03x
-Content-Disposition: form-data; name="foo"
+content-disposition: form-data; name="foo"
 
 bar
 --AaB03x
-Content-Disposition: form-data; name="files"
-Content-Type: multipart/mixed, boundary=BbC04y
+content-disposition: form-data; name="files"
+content-type: multipart/mixed, boundary=BbC04y
 
 --BbC04y
-Content-Disposition: attachment; filename="file.txt"
-Content-Type: text/plain
+content-disposition: attachment; filename="file.txt"
+content-type: text/plain
 
 contents
 --BbC04y
-Content-Disposition: attachment; filename="flowers.jpg"
-Content-Type: image/jpeg
-Content-Transfer-Encoding: binary
+content-disposition: attachment; filename="flowers.jpg"
+content-type: image/jpeg
+content-transfer-encoding: binary
 
 contents
 --BbC04y--
diff --git a/test/multipart/nested b/test/multipart/nested
index 51978824..054ad3d0 100644
--- a/test/multipart/nested
+++ b/test/multipart/nested
@@ -1,10 +1,10 @@
 --AaB03x
-Content-Disposition: form-data; name="foo[submit-name]"
+content-disposition: form-data; name="foo[submit-name]"
 
 Larry
 --AaB03x
-Content-Disposition: form-data; name="foo[files]"; filename="file1.txt"
-Content-Type: text/plain
+content-disposition: form-data; name="foo[files]"; filename="file1.txt"
+content-type: text/plain
 
 contents
 --AaB03x--
diff --git a/test/multipart/none b/test/multipart/none
index d66f4730..121f85fc 100644
--- a/test/multipart/none
+++ b/test/multipart/none
@@ -1,9 +1,9 @@
 --AaB03x
-Content-Disposition: form-data; name="submit-name"
+content-disposition: form-data; name="submit-name"
 
 Larry
 --AaB03x
-Content-Disposition: form-data; name="files"; filename=""
+content-disposition: form-data; name="files"; filename=""
 
 
 --AaB03x--
diff --git a/test/multipart/quoted b/test/multipart/quoted
index cf4e9b64..8593bc20 100644
--- a/test/multipart/quoted
+++ b/test/multipart/quoted
@@ -1,15 +1,15 @@
 --AaB:03x
-Content-Disposition: form-data; name="submit-name"
+content-disposition: form-data; name="submit-name"
 
 Larry
 --AaB:03x
-Content-Disposition: form-data; name="submit-name-with-content"
-Content-Type: text/plain
+content-disposition: form-data; name="submit-name-with-content"
+content-type: text/plain
 
 Berry
 --AaB:03x
-Content-Disposition: form-data; name="files"; filename="file1.txt"
-Content-Type: text/plain
+content-disposition: form-data; name="files"; filename="file1.txt"
+content-type: text/plain
 
 contents
 --AaB:03x--
diff --git a/test/multipart/robust_field_separation b/test/multipart/robust_field_separation
index 34956b15..9fca0635 100644
--- a/test/multipart/robust_field_separation
+++ b/test/multipart/robust_field_separation
@@ -1,6 +1,6 @@
 --AaB03x
-Content-Disposition: form-data;name="text"
-Content-Type: text/plain
+content-disposition: form-data;name="text"
+content-type: text/plain
 
 contents
 --AaB03x--
diff --git a/test/multipart/semicolon b/test/multipart/semicolon
index 00fd68ab..d3702a2b 100644
--- a/test/multipart/semicolon
+++ b/test/multipart/semicolon
@@ -1,6 +1,6 @@
 --AaB03x
-Content-Disposition: form-data; name="files"; filename="fi;le1.txt"
-Content-Type: text/plain
+content-disposition: form-data; name="files"; filename="fi;le1.txt"
+content-type: text/plain
 
 contents
 --AaB03x-- \ No newline at end of file
diff --git a/test/multipart/text b/test/multipart/text
index 01376d02..ac340228 100644
--- a/test/multipart/text
+++ b/test/multipart/text
@@ -1,15 +1,15 @@
 --AaB03x
-Content-Disposition: form-data; name="submit-name"
+content-disposition: form-data; name="submit-name"
 
 Larry
 --AaB03x
-Content-Disposition: form-data; name="submit-name-with-content"
-Content-Type: text/plain
+content-disposition: form-data; name="submit-name-with-content"
+content-type: text/plain
 
 Berry
 --AaB03x
-Content-Disposition: form-data; name="files"; filename="file1.txt"
-Content-Type: text/plain
+content-disposition: form-data; name="files"; filename="file1.txt"
+content-type: text/plain
 
 contents
 --AaB03x-- \ No newline at end of file
diff --git a/test/multipart/three_files_three_fields b/test/multipart/three_files_three_fields
index 40d88b56..8917424e 100644
--- a/test/multipart/three_files_three_fields
+++ b/test/multipart/three_files_three_fields
@@ -12,20 +12,20 @@ content-disposition: form-data; name="from"
 others
 --AaB03x
 content-disposition: form-data; name="fileupload1"; filename="file1.jpg"
-Content-Type: image/jpeg
-Content-Transfer-Encoding: base64
+content-type: image/jpeg
+content-transfer-encoding: base64
 
 /9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
 --AaB03x
 content-disposition: form-data; name="fileupload2"; filename="file2.jpg"
-Content-Type: image/jpeg
-Content-Transfer-Encoding: base64
+content-type: image/jpeg
+content-transfer-encoding: base64
 
 /9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
 --AaB03x
 content-disposition: form-data; name="fileupload3"; filename="file3.jpg"
-Content-Type: image/jpeg
-Content-Transfer-Encoding: base64
+content-type: image/jpeg
+content-transfer-encoding: base64
 
 /9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
 --AaB03x--
diff --git a/test/multipart/webkit b/test/multipart/webkit
index 1375af31..044d4db3 100644
--- a/test/multipart/webkit
+++ b/test/multipart/webkit
@@ -1,32 +1,32 @@
 ------WebKitFormBoundaryWLHCs9qmcJJoyjKR
-Content-Disposition: form-data; name="_method"
+content-disposition: form-data; name="_method"
 
 put
 ------WebKitFormBoundaryWLHCs9qmcJJoyjKR
-Content-Disposition: form-data; name="profile[blog]"
+content-disposition: form-data; name="profile[blog]"
 
 
 ------WebKitFormBoundaryWLHCs9qmcJJoyjKR
-Content-Disposition: form-data; name="profile[public_email]"
+content-disposition: form-data; name="profile[public_email]"
 
 
 ------WebKitFormBoundaryWLHCs9qmcJJoyjKR
-Content-Disposition: form-data; name="profile[interests]"
+content-disposition: form-data; name="profile[interests]"
 
 
 ------WebKitFormBoundaryWLHCs9qmcJJoyjKR
-Content-Disposition: form-data; name="profile[bio]"
+content-disposition: form-data; name="profile[bio]"
 
 hello
 
 "quote"
 ------WebKitFormBoundaryWLHCs9qmcJJoyjKR
-Content-Disposition: form-data; name="media"; filename=""
+content-disposition: form-data; name="media"; filename=""
 Content-Type: application/octet-stream
 
 
 ------WebKitFormBoundaryWLHCs9qmcJJoyjKR
-Content-Disposition: form-data; name="commit"
+content-disposition: form-data; name="commit"
 
 Save
 ------WebKitFormBoundaryWLHCs9qmcJJoyjKR--
diff --git a/test/spec_chunked.rb b/test/spec_chunked.rb
index 18aad61d..3fcd4af2 100644
--- a/test/spec_chunked.rb
+++ b/test/spec_chunked.rb
@@ -30,18 +30,18 @@ describe Rack::Chunked do
     end
 
     def trailers
-      { "Expires" => "tomorrow" }
+      { "expires" => "tomorrow" }
     end
   end
 
   it 'yields trailer headers after the response' do
     app = lambda { |env|
-      [200, { "content-type" => "text/plain", "trailer" => "Expires" }, TrailerBody.new]
+      [200, { "content-type" => "text/plain", "trailer" => "expires" }, TrailerBody.new]
     }
     response = Rack::MockResponse.new(*chunked(app).call(@env))
     response.headers.wont_include 'content-length'
     response.headers['transfer-encoding'].must_equal 'chunked'
-    response.body.must_equal "5\r\nHello\r\n1\r\n \r\n6\r\nWorld!\r\n0\r\nExpires: tomorrow\r\n\r\n"
+    response.body.must_equal "5\r\nHello\r\n1\r\n \r\n6\r\nWorld!\r\n0\r\nexpires: tomorrow\r\n\r\n"
   end
 
   it 'chunk responses with no content-length' do
diff --git a/test/spec_conditional_get.rb b/test/spec_conditional_get.rb
index 3aeae162..36da7412 100644
--- a/test/spec_conditional_get.rb
+++ b/test/spec_conditional_get.rb
@@ -14,7 +14,7 @@ describe Rack::ConditionalGet do
     Rack::Lint.new Rack::ConditionalGet.new(app)
   end
 
-  it "set a 304 status and truncate body when If-Modified-Since hits" do
+  it "set a 304 status and truncate body when if-modified-since hits" do
     timestamp = Time.now.httpdate
     app = conditional_get(lambda { |env|
       [200, { 'last-modified' => timestamp }, ['TEST']] })
@@ -26,7 +26,7 @@ describe Rack::ConditionalGet do
     response.body.must_be :empty?
   end
 
-  it "set a 304 status and truncate body when If-Modified-Since hits and is higher than current time" do
+  it "set a 304 status and truncate body when if-modified-since hits and is higher than current time" do
     app = conditional_get(lambda { |env|
       [200, { 'last-modified' => (Time.now - 3600).httpdate }, ['TEST']] })
 
@@ -37,7 +37,7 @@ describe Rack::ConditionalGet do
     response.body.must_be :empty?
   end
 
-  it "set a 304 status and truncate body when If-None-Match hits" do
+  it "set a 304 status and truncate body when if-none-match hits" do
     app = conditional_get(lambda { |env|
       [200, { 'etag' => '1234' }, ['TEST']] })
 
@@ -48,7 +48,7 @@ describe Rack::ConditionalGet do
     response.body.must_be :empty?
   end
 
-  it "set a 304 status and truncate body when If-None-Match hits but If-Modified-Since is after last-modified" do
+  it "set a 304 status and truncate body when if-none-match hits but if-modified-since is after last-modified" do
     app = conditional_get(lambda { |env|
       [200, { 'last-modified' => (Time.now + 3600).httpdate, 'etag' => '1234', 'content-type' => 'text/plain' }, ['TEST']] })
 
@@ -59,7 +59,7 @@ describe Rack::ConditionalGet do
     response.body.must_be :empty?
   end
 
-  it "not set a 304 status if If-Modified-Since hits but etag does not" do
+  it "not set a 304 status if if-modified-since hits but etag does not" do
     timestamp = Time.now.httpdate
     app = conditional_get(lambda { |env|
       [200, { 'last-modified' => timestamp, 'etag' => '1234', 'content-type' => 'text/plain' }, ['TEST']] })
@@ -71,7 +71,7 @@ describe Rack::ConditionalGet do
     response.body.must_equal 'TEST'
   end
 
-  it "set a 304 status and truncate body when both If-None-Match and If-Modified-Since hits" do
+  it "set a 304 status and truncate body when both if-none-match and if-modified-since hits" do
     timestamp = Time.now.httpdate
     app = conditional_get(lambda { |env|
       [200, { 'last-modified' => timestamp, 'etag' => '1234' }, ['TEST']] })
diff --git a/test/spec_etag.rb b/test/spec_etag.rb
index 568bdc60..ecd9383f 100644
--- a/test/spec_etag.rb
+++ b/test/spec_etag.rb
@@ -22,13 +22,13 @@ describe Rack::ETag do
     File.new(File::NULL)
   end
 
-  it "set ETag if none is set if status is 200" do
+  it "set etag if none is set if status is 200" do
     app = lambda { |env| [200, { 'content-type' => 'text/plain' }, ["Hello, World!"]] }
     response = etag(app).call(request)
     response[1]['etag'].must_equal "W/\"dffd6021bb2bd5b0af676290809ec3a5\""
   end
 
-  it "set ETag if none is set if status is 201" do
+  it "set etag if none is set if status is 201" do
     app = lambda { |env| [201, { 'content-type' => 'text/plain' }, ["Hello, World!"]] }
     response = etag(app).call(request)
     response[1]['etag'].must_equal "W/\"dffd6021bb2bd5b0af676290809ec3a5\""
@@ -64,37 +64,37 @@ describe Rack::ETag do
     response[1]['cache-control'].must_be_nil
   end
 
-  it "not change ETag if it is already set" do
+  it "not change etag if it is already set" do
     app = lambda { |env| [200, { 'content-type' => 'text/plain', 'etag' => '"abc"' }, ["Hello, World!"]] }
     response = etag(app).call(request)
     response[1]['etag'].must_equal "\"abc\""
   end
 
-  it "not set ETag if body is empty" do
+  it "not set etag if body is empty" do
     app = lambda { |env| [200, { 'content-type' => 'text/plain', 'last-modified' => Time.now.httpdate }, []] }
     response = etag(app).call(request)
     response[1]['etag'].must_be_nil
   end
 
-  it "not set ETag if last-modified is set" do
+  it "not set etag if last-modified is set" do
     app = lambda { |env| [200, { 'content-type' => 'text/plain', 'last-modified' => Time.now.httpdate }, ["Hello, World!"]] }
     response = etag(app).call(request)
     response[1]['etag'].must_be_nil
   end
 
-  it "not set ETag if a sendfile_body is given" do
+  it "not set etag if a sendfile_body is given" do
     app = lambda { |env| [200, { 'content-type' => 'text/plain' }, sendfile_body] }
     response = etag(app).call(request)
     response[1]['etag'].must_be_nil
   end
 
-  it "not set ETag if a status is not 200 or 201" do
+  it "not set etag if a status is not 200 or 201" do
     app = lambda { |env| [401, { 'content-type' => 'text/plain' }, ['Access denied.']] }
     response = etag(app).call(request)
     response[1]['etag'].must_be_nil
   end
 
-  it "set ETag even if no-cache is given" do
+  it "set etag even if no-cache is given" do
     app = lambda { |env| [200, { 'content-type' => 'text/plain', 'cache-control' => 'no-cache, must-revalidate' }, ['Hello, World!']] }
     response = etag(app).call(request)
     response[1]['etag'].must_equal "W/\"dffd6021bb2bd5b0af676290809ec3a5\""
diff --git a/test/spec_files.rb b/test/spec_files.rb
index 60eb4f3c..75b21d8d 100644
--- a/test/spec_files.rb
+++ b/test/spec_files.rb
@@ -251,7 +251,7 @@ content-range: bytes 60-80/209\r
 
     status.must_equal 200
     heads['cache-control'].must_be_nil
-    heads['Access-Control-Allow-Origin'].must_be_nil
+    heads['access-control-allow-origin'].must_be_nil
   end
 
   it "only support GET, HEAD, and OPTIONS requests" do
diff --git a/test/spec_lint.rb b/test/spec_lint.rb
index 0b87b188..06d7ffa4 100755
--- a/test/spec_lint.rb
+++ b/test/spec_lint.rb
@@ -389,7 +389,7 @@ describe Rack::Lint do
     #                    [200, {"content-length" => "0"}, []]
     #                  }).call(env({}))
     # }.must_raise(Rack::Lint::LintError).
-    #   message.must_match(/No content-Type/)
+    #   message.must_match(/No content-type/)
 
     [100, 101, 204, 304].each do |status|
       lambda {
@@ -519,7 +519,7 @@ describe Rack::Lint do
     lambda {
       Rack::Lint.new(lambda { |env|
                        env["rack.input"].gets("\r\n")
-                       [201, { "Content-type" => "text/plain", "Content-length" => "0" }, []]
+                       [201, { "content-type" => "text/plain", "content-length" => "0" }, []]
                      }).call(env({}))
     }.must_raise(Rack::Lint::LintError).
       message.must_match(/gets called with arguments/)
@@ -528,7 +528,7 @@ describe Rack::Lint do
       Rack::Lint.new(lambda { |env|
                        env["rack.input"].gets
                        env["rack.input"].read(1, 2, 3)
-                       [201, { "Content-type" => "text/plain", "Content-length" => "0" }, []]
+                       [201, { "content-type" => "text/plain", "content-length" => "0" }, []]
                      }).call(env({}))
     }.must_raise(Rack::Lint::LintError).
       message.must_match(/read called with too many arguments/)
@@ -536,7 +536,7 @@ describe Rack::Lint do
     lambda {
       Rack::Lint.new(lambda { |env|
                        env["rack.input"].read("foo")
-                       [201, { "Content-type" => "text/plain", "Content-length" => "0" }, []]
+                       [201, { "content-type" => "text/plain", "content-length" => "0" }, []]
                      }).call(env({}))
     }.must_raise(Rack::Lint::LintError).
       message.must_match(/read called with non-integer and non-nil length/)
@@ -544,7 +544,7 @@ describe Rack::Lint do
     lambda {
       Rack::Lint.new(lambda { |env|
                        env["rack.input"].read(-1)
-                       [201, { "Content-type" => "text/plain", "Content-length" => "0" }, []]
+                       [201, { "content-type" => "text/plain", "content-length" => "0" }, []]
                      }).call(env({}))
     }.must_raise(Rack::Lint::LintError).
       message.must_match(/read called with a negative length/)
@@ -552,7 +552,7 @@ describe Rack::Lint do
     lambda {
       Rack::Lint.new(lambda { |env|
                        env["rack.input"].read(nil, nil)
-                       [201, { "Content-type" => "text/plain", "Content-length" => "0" }, []]
+                       [201, { "content-type" => "text/plain", "content-length" => "0" }, []]
                      }).call(env({}))
     }.must_raise(Rack::Lint::LintError).
       message.must_match(/read called with non-String buffer/)
@@ -560,7 +560,7 @@ describe Rack::Lint do
     lambda {
       Rack::Lint.new(lambda { |env|
                        env["rack.input"].read(nil, 1)
-                       [201, { "Content-type" => "text/plain", "Content-length" => "0" }, []]
+                       [201, { "content-type" => "text/plain", "content-length" => "0" }, []]
                      }).call(env({}))
     }.must_raise(Rack::Lint::LintError).
       message.must_match(/read called with non-String buffer/)
diff --git a/test/spec_multipart.rb b/test/spec_multipart.rb
index a44ef292..1fea0808 100644
--- a/test/spec_multipart.rb
+++ b/test/spec_multipart.rb
@@ -69,7 +69,7 @@ describe Rack::Multipart do
     params["text"].encoding.must_equal Encoding::US_ASCII
 
     # I'm not 100% sure if making the param name encoding match the
-    # Content-Type charset is the right thing to do.  We should revisit this.
+    # content-type charset is the right thing to do.  We should revisit this.
     params.keys.each do |key|
       key.encoding.must_equal Encoding::US_ASCII
     end
@@ -134,9 +134,9 @@ describe Rack::Multipart do
         (1024 * 1024).times { wr.write(longer) }
 
         wr.write("\r\n")
-        wr.write('Content-Disposition: form-data; name="a"; filename="a.txt"')
+        wr.write('content-disposition: form-data; name="a"; filename="a.txt"')
         wr.write("\r\n")
-        wr.write("Content-Type: text/plain\r\n")
+        wr.write("content-type: text/plain\r\n")
         wr.write("\r\na")
         wr.write("--AaB03x--\r\n")
         wr.close
@@ -169,9 +169,9 @@ describe Rack::Multipart do
     data = StringIO.new
     data.write("--#{boundary}")
     data.write("\r\n")
-    data.write('Content-Disposition: form-data; name="a"; filename="a.pdf"')
+    data.write('content-disposition: form-data; name="a"; filename="a.pdf"')
     data.write("\r\n")
-    data.write("Content-Type:application/pdf\r\n")
+    data.write("content-type:application/pdf\r\n")
     data.write("\r\n")
     data.write("-" * (1024 * 1024))
     data.write("\r\n")
@@ -203,9 +203,9 @@ describe Rack::Multipart do
     params["submit-name-with-content"].must_equal "Berry"
     params["files"][:type].must_equal "text/plain"
     params["files"][:filename].must_equal "file1.txt"
-    params["files"][:head].must_equal "Content-Disposition: form-data; " +
+    params["files"][:head].must_equal "content-disposition: form-data; " +
       "name=\"files\"; filename=\"file1.txt\"\r\n" +
-      "Content-Type: text/plain\r\n"
+      "content-type: text/plain\r\n"
     params["files"][:name].must_equal "files"
     params["files"][:tempfile].read.must_equal "contents"
   end
@@ -234,9 +234,9 @@ describe Rack::Multipart do
     params = Rack::Multipart.parse_multipart(env)
     params["file1.txt"][:type].must_equal "text/plain"
     params["file1.txt"][:filename].must_equal "file1.txt"
-    params["file1.txt"][:head].must_equal "Content-Disposition: form-data; " +
+    params["file1.txt"][:head].must_equal "content-disposition: form-data; " +
       "filename=\"file1.txt\"\r\n" +
-      "Content-Type: text/plain\r\n"
+      "content-type: text/plain\r\n"
     params["file1.txt"][:name].must_equal "file1.txt"
     params["file1.txt"][:tempfile].read.must_equal "contents"
   end
@@ -256,9 +256,9 @@ describe Rack::Multipart do
     params["foo"]["submit-name"].must_equal "Larry"
     params["foo"]["files"][:type].must_equal "text/plain"
     params["foo"]["files"][:filename].must_equal "file1.txt"
-    params["foo"]["files"][:head].must_equal "Content-Disposition: form-data; " +
+    params["foo"]["files"][:head].must_equal "content-disposition: form-data; " +
       "name=\"foo[files]\"; filename=\"file1.txt\"\r\n" +
-      "Content-Type: text/plain\r\n"
+      "content-type: text/plain\r\n"
     params["foo"]["files"][:name].must_equal "foo[files]"
     params["foo"]["files"][:tempfile].read.must_equal "contents"
   end
@@ -270,9 +270,9 @@ describe Rack::Multipart do
 
     params["files"][:type].must_equal "image/png"
     params["files"][:filename].must_equal "rack-logo.png"
-    params["files"][:head].must_equal "Content-Disposition: form-data; " +
+    params["files"][:head].must_equal "content-disposition: form-data; " +
       "name=\"files\"; filename=\"rack-logo.png\"\r\n" +
-      "Content-Type: image/png\r\n"
+      "content-type: image/png\r\n"
     params["files"][:name].must_equal "files"
     params["files"][:tempfile].read.length.must_equal 26473
   end
@@ -283,9 +283,9 @@ describe Rack::Multipart do
     params["submit-name"].must_equal "Larry"
     params["files"][:type].must_equal "text/plain"
     params["files"][:filename].must_equal "file1.txt"
-    params["files"][:head].must_equal "Content-Disposition: form-data; " +
+    params["files"][:head].must_equal "content-disposition: form-data; " +
       "name=\"files\"; filename=\"file1.txt\"\r\n" +
-      "Content-Type: text/plain\r\n"
+      "content-type: text/plain\r\n"
     params["files"][:name].must_equal "files"
     params["files"][:tempfile].read.must_equal ""
   end
@@ -295,9 +295,9 @@ describe Rack::Multipart do
     params = Rack::Multipart.parse_multipart(env)
     params["files"][:type].must_equal "text/plain"
     params["files"][:filename].must_equal "fi;le1.txt"
-    params["files"][:head].must_equal "Content-Disposition: form-data; " +
+    params["files"][:head].must_equal "content-disposition: form-data; " +
       "name=\"files\"; filename=\"fi;le1.txt\"\r\n" +
-      "Content-Type: text/plain\r\n"
+      "content-type: text/plain\r\n"
     params["files"][:name].must_equal "files"
     params["files"][:tempfile].read.must_equal "contents"
   end
@@ -309,9 +309,9 @@ describe Rack::Multipart do
     params["submit-name-with-content"].must_equal "Berry"
     params["files"][:type].must_equal "text/plain"
     params["files"][:filename].must_equal "file1.txt"
-    params["files"][:head].must_equal "Content-Disposition: form-data; " +
+    params["files"][:head].must_equal "content-disposition: form-data; " +
       "name=\"files\"; filename=\"file1.txt\"\r\n" +
-      "Content-Type: text/plain\r\n"
+      "content-type: text/plain\r\n"
     params["files"][:name].must_equal "files"
     params["files"][:tempfile].read.must_equal "contents"
   end
@@ -321,9 +321,9 @@ describe Rack::Multipart do
     params = Rack::Multipart.parse_multipart(env)
     params["files"][:type].must_equal "text/plain"
     params["files"][:filename].must_match(/invalid/)
-    head = "Content-Disposition: form-data; " +
+    head = "content-disposition: form-data; " +
       "name=\"files\"; filename=\"invalid\xC3.txt\"\r\n" +
-      "Content-Type: text/plain\r\n"
+      "content-type: text/plain\r\n"
     head = head.force_encoding(Encoding::ASCII_8BIT)
     params["files"][:head].must_equal head
     params["files"][:name].must_equal "files"
@@ -348,7 +348,7 @@ describe Rack::Multipart do
     params["files"][:filename].must_equal "flowers.exe\u0000.jpg"
   end
 
-  it "is robust separating Content-Disposition fields" do
+  it "is robust separating content-disposition fields" do
     env = Rack::MockRequest.env_for("/", multipart_fixture(:robust_field_separation))
     params = Rack::Multipart.parse_multipart(env)
     params["text"].must_equal "contents"
@@ -375,10 +375,10 @@ describe Rack::Multipart do
     params = Rack::Multipart.parse_multipart(env)
     params["files"][:type].must_equal "text/plain"
     params["files"][:filename].must_equal "file1.txt"
-    params["files"][:head].must_equal "Content-Disposition: form-data; " +
+    params["files"][:head].must_equal "content-disposition: form-data; " +
       "name=\"files\"; " +
       'filename="C:\Documents and Settings\Administrator\Desktop\file1.txt"' +
-      "\r\nContent-Type: text/plain\r\n"
+      "\r\ncontent-type: text/plain\r\n"
     params["files"][:name].must_equal "files"
     params["files"][:tempfile].read.must_equal "contents"
   end
@@ -388,8 +388,8 @@ describe Rack::Multipart do
     params = Rack::Multipart.parse_multipart(env)
     params["files"][:type].must_equal "image/jpeg"
     params["files"][:filename].must_equal "genome.jpeg"
-    params["files"][:head].must_equal "Content-Type: image/jpeg\r\n" +
-      "Content-Disposition: attachment; " +
+    params["files"][:head].must_equal "content-type: image/jpeg\r\n" +
+      "content-disposition: attachment; " +
       "name=\"files\"; " +
       "filename=genome.jpeg; " +
       "modification-date=\"Wed, 12 Feb 1997 16:29:51 -0500\";\r\n" +
@@ -403,10 +403,10 @@ describe Rack::Multipart do
     params = Rack::Multipart.parse_multipart(env)
     params["files"][:type].must_equal "application/octet-stream"
     params["files"][:filename].must_equal "escape \"quotes"
-    params["files"][:head].must_equal "Content-Disposition: form-data; " +
+    params["files"][:head].must_equal "content-disposition: form-data; " +
       "name=\"files\"; " +
       "filename=\"escape \\\"quotes\"\r\n" +
-      "Content-Type: application/octet-stream\r\n"
+      "content-type: application/octet-stream\r\n"
     params["files"][:name].must_equal "files"
     params["files"][:tempfile].read.must_equal "contents"
   end
@@ -416,10 +416,10 @@ describe Rack::Multipart do
     params = Rack::Multipart.parse_multipart(env)
     params["files"][:type].must_equal "application/octet-stream"
     params["files"][:filename].must_equal "foo+bar"
-    params["files"][:head].must_equal "Content-Disposition: form-data; " +
+    params["files"][:head].must_equal "content-disposition: form-data; " +
       "name=\"files\"; " +
       "filename=\"foo+bar\"\r\n" +
-      "Content-Type: application/octet-stream\r\n"
+      "content-type: application/octet-stream\r\n"
     params["files"][:name].must_equal "files"
     params["files"][:tempfile].read.must_equal "contents"
   end
@@ -429,10 +429,10 @@ describe Rack::Multipart do
     params = Rack::Multipart.parse_multipart(env)
     params["files"][:type].must_equal "application/octet-stream"
     params["files"][:filename].must_equal "escape \"quotes"
-    params["files"][:head].must_equal "Content-Disposition: form-data; " +
+    params["files"][:head].must_equal "content-disposition: form-data; " +
       "name=\"files\"; " +
       "filename=\"escape %22quotes\"\r\n" +
-      "Content-Type: application/octet-stream\r\n"
+      "content-type: application/octet-stream\r\n"
     params["files"][:name].must_equal "files"
     params["files"][:tempfile].read.must_equal "contents"
   end
@@ -442,10 +442,10 @@ describe Rack::Multipart do
     params = Rack::Multipart.parse_multipart(env)
     params["files"][:type].must_equal "application/octet-stream"
     params["files"][:filename].must_equal "escape \"quotes"
-    params["files"][:head].must_equal "Content-Disposition: form-data; " +
+    params["files"][:head].must_equal "content-disposition: form-data; " +
       "name=\"files\"; " +
       "filename=\"escape \"quotes\"\r\n" +
-      "Content-Type: application/octet-stream\r\n"
+      "content-type: application/octet-stream\r\n"
     params["files"][:name].must_equal "files"
     params["files"][:tempfile].read.must_equal "contents"
   end
@@ -455,8 +455,8 @@ describe Rack::Multipart do
     params = Rack::Multipart.parse_multipart(env)
     params["files"][:type].must_equal "image/jpeg"
     params["files"][:filename].must_equal "\"human\" genome.jpeg"
-    params["files"][:head].must_equal "Content-Type: image/jpeg\r\n" +
-      "Content-Disposition: attachment; " +
+    params["files"][:head].must_equal "content-type: image/jpeg\r\n" +
+      "content-disposition: attachment; " +
       "name=\"files\"; " +
       "filename=\"\"human\" genome.jpeg\"; " +
       "modification-date=\"Wed, 12 Feb 1997 16:29:51 -0500\";\r\n" +
@@ -472,8 +472,8 @@ describe Rack::Multipart do
     files[:type].must_equal "image/jpeg"
     files[:filename].must_equal "100% of a photo.jpeg"
     files[:head].must_equal <<-MULTIPART
-Content-Disposition: form-data; name="document[attachment]"; filename="100% of a photo.jpeg"\r
-Content-Type: image/jpeg\r
+content-disposition: form-data; name="document[attachment]"; filename="100% of a photo.jpeg"\r
+content-type: image/jpeg\r
     MULTIPART
 
     files[:name].must_equal "document[attachment]"
@@ -487,8 +487,8 @@ Content-Type: image/jpeg\r
     files[:type].must_equal "image/jpeg"
     files[:filename].must_equal "100%a"
     files[:head].must_equal <<-MULTIPART
-Content-Disposition: form-data; name="document[attachment]"; filename="100%a"\r
-Content-Type: image/jpeg\r
+content-disposition: form-data; name="document[attachment]"; filename="100%a"\r
+content-type: image/jpeg\r
     MULTIPART
 
     files[:name].must_equal "document[attachment]"
@@ -502,8 +502,8 @@ Content-Type: image/jpeg\r
     files[:type].must_equal "image/jpeg"
     files[:filename].must_equal "100%"
     files[:head].must_equal <<-MULTIPART
-Content-Disposition: form-data; name="document[attachment]"; filename="100%"\r
-Content-Type: image/jpeg\r
+content-disposition: form-data; name="document[attachment]"; filename="100%"\r
+content-type: image/jpeg\r
     MULTIPART
 
     files[:name].must_equal "document[attachment]"
@@ -669,8 +669,8 @@ Content-Type: image/jpeg\r
   it "can parse fields with a content type" do
     data = <<-EOF
 --1yy3laWhgX31qpiHinh67wJXqKalukEUTvqTzmon\r
-Content-Disposition: form-data; name="description"\r
-Content-Type: text/plain"\r
+content-disposition: form-data; name="description"\r
+content-type: text/plain"\r
 \r
 Very very blue\r
 --1yy3laWhgX31qpiHinh67wJXqKalukEUTvqTzmon--\r
@@ -697,8 +697,8 @@ EOF
   it "parse very long unquoted multipart file names" do
     data = <<-EOF
 --AaB03x\r
-Content-Type: text/plain\r
-Content-Disposition: attachment; name=file; filename=#{'long' * 100}\r
+content-type: text/plain\r
+content-disposition: attachment; name=file; filename=#{'long' * 100}\r
 \r
 contents\r
 --AaB03x--\r
@@ -718,8 +718,8 @@ contents\r
   it "parse unquoted parameter values at end of line" do
     data = <<-EOF
 --AaB03x\r
-Content-Type: text/plain\r
-Content-Disposition: attachment; name=inline\r
+content-type: text/plain\r
+content-disposition: attachment; name=inline\r
 \r
 true\r
 --AaB03x--\r
@@ -738,8 +738,8 @@ true\r
   it "parse quoted chars in name parameter" do
     data = <<-EOF
 --AaB03x\r
-Content-Type: text/plain\r
-Content-Disposition: attachment; name="quoted\\\\chars\\"in\rname"\r
+content-type: text/plain\r
+content-disposition: attachment; name="quoted\\\\chars\\"in\rname"\r
 \r
 true\r
 --AaB03x--\r
@@ -772,9 +772,9 @@ true\r
     params["submit-name-with-content"].must_equal "Berry"
     params["files"][:type].must_equal "text/plain"
     params["files"][:filename].must_equal "file1.txt"
-    params["files"][:head].must_equal "Content-Disposition: form-data; " +
+    params["files"][:head].must_equal "content-disposition: form-data; " +
       "name=\"files\"; filename=\"file1.txt\"\r\n" +
-      "Content-Type: text/plain\r\n"
+      "content-type: text/plain\r\n"
     params["files"][:name].must_equal "files"
     params["files"][:tempfile].read.must_equal "contents"
   end
@@ -784,15 +784,15 @@ true\r
 
     data = <<-EOF.dup
 --AaB03x\r
-Content-Type: text/plain\r
+content-type: text/plain\r
 \r
 some text\r
 --AaB03x\r
 \r
 \r
-some more text (I didn't specify Content-Type)\r
+some more text (I didn't specify content-type)\r
 --AaB03x\r
-Content-Type: image/png\r
+content-type: image/png\r
 \r
 #{rack_logo}\r
 --AaB03x--\r
@@ -806,7 +806,7 @@ Content-Type: image/png\r
     env = Rack::MockRequest.env_for("/", options)
     params = Rack::Multipart.parse_multipart(env)
 
-    params["text/plain"].must_equal ["some text", "some more text (I didn't specify Content-Type)"]
+    params["text/plain"].must_equal ["some text", "some more text (I didn't specify content-type)"]
     params["image/png"].length.must_equal 1
 
     f = Tempfile.new("rack-logo")
diff --git a/test/spec_request.rb b/test/spec_request.rb
index 81307525..4786ebac 100644
--- a/test/spec_request.rb
+++ b/test/spec_request.rb
@@ -682,7 +682,7 @@ class RackRequestTest < Minitest::Spec
     lambda { req.POST }.must_raise RuntimeError
   end
 
-  it "parse POST data when method is POST and no Content-Type given" do
+  it "parse POST data when method is POST and no content-type given" do
     req = make_request \
       Rack::MockRequest.env_for("/?foo=quux",
         "REQUEST_METHOD" => 'POST',
@@ -1210,8 +1210,8 @@ content-disposition: form-data; name="reply"\r
 yes\r
 --AaB03x\r
 content-disposition: form-data; name="fileupload"; filename="dj.jpg"\r
-Content-Type: image/jpeg\r
-Content-Transfer-Encoding: base64\r
+content-type: image/jpeg\r
+content-transfer-encoding: base64\r
 \r
 /9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg\r
 --AaB03x--\r
@@ -1249,8 +1249,8 @@ content-disposition: form-data; name="reply"
 yes
 --AaB03x
 content-disposition: form-data; name="fileupload"; filename="dj.jpg"
-Content-Type: image/jpeg
-Content-Transfer-Encoding: base64
+content-type: image/jpeg
+content-transfer-encoding: base64
 
 /9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
 --AaB03x--
@@ -1273,8 +1273,8 @@ content-disposition: form-data; name="reply"\r
 yes\r
 --AaB03x\r
 content-disposition: form-data; name="fileupload"; filename="dj.jpg"\r
-Content-Type: image/jpeg\r
-Content-Transfer-Encoding: base64\r
+content-type: image/jpeg\r
+content-transfer-encoding: base64\r
 \r
 /9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg\r
 --AaB03x--\r
@@ -1305,7 +1305,7 @@ EOF
 
   it "MultipartPartLimitError when request has too many multipart parts if limit set" do
     begin
-      data = 10000.times.map { "--AaB03x\r\nContent-Type: text/plain\r\nContent-Disposition: attachment; name=#{SecureRandom.hex(10)}; filename=#{SecureRandom.hex(10)}\r\n\r\ncontents\r\n" }.join("\r\n")
+      data = 10000.times.map { "--AaB03x\r\ncontent-type: text/plain\r\ncontent-disposition: attachment; name=#{SecureRandom.hex(10)}; filename=#{SecureRandom.hex(10)}\r\n\r\ncontents\r\n" }.join("\r\n")
       data += "--AaB03x--\r"
 
       options = {
@@ -1321,7 +1321,7 @@ EOF
 
   it 'closes tempfiles it created in the case of too many created' do
     begin
-      data = 10000.times.map { "--AaB03x\r\nContent-Type: text/plain\r\nContent-Disposition: attachment; name=#{SecureRandom.hex(10)}; filename=#{SecureRandom.hex(10)}\r\n\r\ncontents\r\n" }.join("\r\n")
+      data = 10000.times.map { "--AaB03x\r\ncontent-type: text/plain\r\ncontent-disposition: attachment; name=#{SecureRandom.hex(10)}; filename=#{SecureRandom.hex(10)}\r\n\r\ncontents\r\n" }.join("\r\n")
       data += "--AaB03x--\r"
 
       files = []
@@ -1371,14 +1371,14 @@ EOF
     input = <<EOF
 --AaB03x\r
 content-disposition: form-data; name="fileupload"; filename="foo.jpg"\r
-Content-Type: image/jpeg\r
-Content-Transfer-Encoding: base64\r
+content-type: image/jpeg\r
+content-transfer-encoding: base64\r
 \r
 /9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg\r
 --AaB03x\r
 content-disposition: form-data; name="fileupload"; filename="bar.jpg"\r
-Content-Type: image/jpeg\r
-Content-Transfer-Encoding: base64\r
+content-type: image/jpeg\r
+content-transfer-encoding: base64\r
 \r
 /9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg\r
 --AaB03x--\r
@@ -1448,9 +1448,9 @@ EOF
   it "correctly parse the part name from Content-Id header" do
     input = <<EOF
 --AaB03x\r
-Content-Type: text/xml; charset=utf-8\r
+content-type: text/xml; charset=utf-8\r
 Content-Id: <soap-start>\r
-Content-Transfer-Encoding: 7bit\r
+content-transfer-encoding: 7bit\r
 \r
 foo\r
 --AaB03x--\r
@@ -1510,8 +1510,8 @@ content-disposition: form-data; name="reply"\r
 yes\r
 --AaB03x\r
 content-disposition: form-data; name="fileupload"; filename="dj.jpg"\r
-Content-Type: image/jpeg\r
-Content-Transfer-Encoding: base64\r
+content-type: image/jpeg\r
+content-transfer-encoding: base64\r
 \r
 /9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg\r
 --AaB03x--\r
diff --git a/test/spec_response.rb b/test/spec_response.rb
index 6cbdbf6d..5e6d5a5b 100644
--- a/test/spec_response.rb
+++ b/test/spec_response.rb
@@ -31,7 +31,7 @@ describe Rack::Response do
     etag = 'foo'
     response.etag = etag
     assert_equal etag, response.etag
-    assert_equal etag, response.to_a[1]['ETag']
+    assert_equal etag, response.to_a[1]['etag']
   end
 
   it 'has a content-type method' do
@@ -39,7 +39,7 @@ describe Rack::Response do
     content_type = 'foo'
     response.content_type = content_type
     assert_equal content_type, response.content_type
-    assert_equal content_type, response.to_a[1]['Content-Type']
+    assert_equal content_type, response.to_a[1]['content-type']
   end
 
   it "have sensible default values" do
@@ -60,7 +60,7 @@ describe Rack::Response do
     }
   end
 
-  it "can be written to inside finish block, but does not update Content-Length" do
+  it "can be written to inside finish block, but does not update content-length" do
     response = Rack::Response.new('foo')
     response.write "bar"
 
@@ -72,139 +72,139 @@ describe Rack::Response do
     body.each { |part| parts << part }
 
     parts.must_equal ["foo", "bar", "baz"]
-    h['Content-Length'].must_equal '6'
+    h['content-length'].must_equal '6'
   end
 
   it "can set and read headers" do
     response = Rack::Response.new
-    response["Content-Type"].must_be_nil
-    response["Content-Type"] = "text/plain"
-    response["Content-Type"].must_equal "text/plain"
+    response["content-type"].must_be_nil
+    response["content-type"] = "text/plain"
+    response["content-type"].must_equal "text/plain"
   end
 
   it "doesn't mutate given headers" do
-    headers = {}
+    headers = {}.freeze
 
     response = Rack::Response.new([], 200, headers)
-    response.headers["Content-Type"] = "text/plain"
-    response.headers["Content-Type"].must_equal "text/plain"
+    response.headers["content-type"] = "text/plain"
+    response.headers["content-type"].must_equal "text/plain"
 
-    headers.wont_include("Content-Type")
+    headers.wont_include("content-type")
   end
 
-  it "can override the initial Content-Type with a different case" do
+  it "can override the initial content-type with a different case" do
     response = Rack::Response.new("", 200, "content-type" => "text/plain")
-    response["Content-Type"].must_equal "text/plain"
+    response["content-type"].must_equal "text/plain"
   end
 
   it "can set cookies" do
     response = Rack::Response.new
 
     response.set_cookie "foo", "bar"
-    response["Set-Cookie"].must_equal "foo=bar"
+    response["set-cookie"].must_equal "foo=bar"
     response.set_cookie "foo2", "bar2"
-    response["Set-Cookie"].must_equal ["foo=bar", "foo2=bar2"]
+    response["set-cookie"].must_equal ["foo=bar", "foo2=bar2"]
     response.set_cookie "foo3", "bar3"
-    response["Set-Cookie"].must_equal ["foo=bar", "foo2=bar2", "foo3=bar3"]
+    response["set-cookie"].must_equal ["foo=bar", "foo2=bar2", "foo3=bar3"]
   end
 
   it "can set cookies with the same name for multiple domains" do
     response = Rack::Response.new
     response.set_cookie "foo", { value: "bar", domain: "sample.example.com" }
     response.set_cookie "foo", { value: "bar", domain: ".example.com" }
-    response["Set-Cookie"].must_equal ["foo=bar; domain=sample.example.com", "foo=bar; domain=.example.com"]
+    response["set-cookie"].must_equal ["foo=bar; domain=sample.example.com", "foo=bar; domain=.example.com"]
   end
 
   it "formats the Cookie expiration date accordingly to RFC 6265" do
     response = Rack::Response.new
 
     response.set_cookie "foo", { value: "bar", expires: Time.now + 10 }
-    response["Set-Cookie"].must_match(
+    response["set-cookie"].must_match(
       /expires=..., \d\d ... \d\d\d\d \d\d:\d\d:\d\d .../)
   end
 
   it "can set secure cookies" do
     response = Rack::Response.new
     response.set_cookie "foo", { value: "bar", secure: true }
-    response["Set-Cookie"].must_equal "foo=bar; secure"
+    response["set-cookie"].must_equal "foo=bar; secure"
   end
 
   it "can set http only cookies" do
     response = Rack::Response.new
     response.set_cookie "foo", { value: "bar", httponly: true }
-    response["Set-Cookie"].must_equal "foo=bar; httponly"
+    response["set-cookie"].must_equal "foo=bar; httponly"
   end
 
   it "can set http only cookies with :http_only" do
     response = Rack::Response.new
     response.set_cookie "foo", { value: "bar", http_only: true }
-    response["Set-Cookie"].must_equal "foo=bar; httponly"
+    response["set-cookie"].must_equal "foo=bar; httponly"
   end
 
   it "can set prefers :httponly for http only cookie setting when :httponly and :http_only provided" do
     response = Rack::Response.new
     response.set_cookie "foo", { value: "bar", httponly: false, http_only: true }
-    response["Set-Cookie"].must_equal "foo=bar"
+    response["set-cookie"].must_equal "foo=bar"
   end
 
   it "can set SameSite cookies with symbol value :none" do
     response = Rack::Response.new
     response.set_cookie "foo", { value: "bar", same_site: :none }
-    response["Set-Cookie"].must_equal "foo=bar; SameSite=None"
+    response["set-cookie"].must_equal "foo=bar; SameSite=None"
   end
 
   it "can set SameSite cookies with symbol value :None" do
     response = Rack::Response.new
     response.set_cookie "foo", { value: "bar", same_site: :None }
-    response["Set-Cookie"].must_equal "foo=bar; SameSite=None"
+    response["set-cookie"].must_equal "foo=bar; SameSite=None"
   end
 
   it "can set SameSite cookies with string value 'None'" do
     response = Rack::Response.new
     response.set_cookie "foo", { value: "bar", same_site: "None" }
-    response["Set-Cookie"].must_equal "foo=bar; SameSite=None"
+    response["set-cookie"].must_equal "foo=bar; SameSite=None"
   end
 
   it "can set SameSite cookies with symbol value :lax" do
     response = Rack::Response.new
     response.set_cookie "foo", { value: "bar", same_site: :lax }
-    response["Set-Cookie"].must_equal "foo=bar; SameSite=Lax"
+    response["set-cookie"].must_equal "foo=bar; SameSite=Lax"
   end
 
   it "can set SameSite cookies with symbol value :Lax" do
     response = Rack::Response.new
     response.set_cookie "foo", { value: "bar", same_site: :lax }
-    response["Set-Cookie"].must_equal "foo=bar; SameSite=Lax"
+    response["set-cookie"].must_equal "foo=bar; SameSite=Lax"
   end
 
   it "can set SameSite cookies with string value 'Lax'" do
     response = Rack::Response.new
     response.set_cookie "foo", { value: "bar", same_site: "Lax" }
-    response["Set-Cookie"].must_equal "foo=bar; SameSite=Lax"
+    response["set-cookie"].must_equal "foo=bar; SameSite=Lax"
   end
 
   it "can set SameSite cookies with boolean value true" do
     response = Rack::Response.new
     response.set_cookie "foo", { value: "bar", same_site: true }
-    response["Set-Cookie"].must_equal "foo=bar; SameSite=Strict"
+    response["set-cookie"].must_equal "foo=bar; SameSite=Strict"
   end
 
   it "can set SameSite cookies with symbol value :strict" do
     response = Rack::Response.new
     response.set_cookie "foo", { value: "bar", same_site: :strict }
-    response["Set-Cookie"].must_equal "foo=bar; SameSite=Strict"
+    response["set-cookie"].must_equal "foo=bar; SameSite=Strict"
   end
 
   it "can set SameSite cookies with symbol value :Strict" do
     response = Rack::Response.new
     response.set_cookie "foo", { value: "bar", same_site: :Strict }
-    response["Set-Cookie"].must_equal "foo=bar; SameSite=Strict"
+    response["set-cookie"].must_equal "foo=bar; SameSite=Strict"
   end
 
   it "can set SameSite cookies with string value 'Strict'" do
     response = Rack::Response.new
     response.set_cookie "foo", { value: "bar", same_site: "Strict" }
-    response["Set-Cookie"].must_equal "foo=bar; SameSite=Strict"
+    response["set-cookie"].must_equal "foo=bar; SameSite=Strict"
   end
 
   it "validates the SameSite option value" do
@@ -218,14 +218,14 @@ describe Rack::Response do
   it "can set SameSite cookies with symbol value" do
     response = Rack::Response.new
     response.set_cookie "foo", { value: "bar", same_site: :Strict }
-    response["Set-Cookie"].must_equal "foo=bar; SameSite=Strict"
+    response["set-cookie"].must_equal "foo=bar; SameSite=Strict"
   end
 
   [ nil, false ].each do |non_truthy|
     it "omits SameSite attribute given a #{non_truthy.inspect} value" do
       response = Rack::Response.new
       response.set_cookie "foo", { value: "bar", same_site: non_truthy }
-      response["Set-Cookie"].must_equal "foo=bar"
+      response["set-cookie"].must_equal "foo=bar"
     end
   end
 
@@ -234,7 +234,7 @@ describe Rack::Response do
     response.set_cookie "foo", "bar"
     response.set_cookie "foo2", "bar2"
     response.delete_cookie "foo"
-    response["Set-Cookie"].must_equal [
+    response["set-cookie"].must_equal [
       "foo=bar",
       "foo2=bar2",
       "foo=; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT"
@@ -245,20 +245,20 @@ describe Rack::Response do
     response = Rack::Response.new
     response.set_cookie "foo", { value: "bar", domain: "sample.example.com" }
     response.set_cookie "foo", { value: "bar", domain: ".example.com" }
-    response["Set-Cookie"].must_equal [
+    response["set-cookie"].must_equal [
       "foo=bar; domain=sample.example.com",
       "foo=bar; domain=.example.com"
     ]
 
     response.delete_cookie "foo", domain: ".example.com"
-    response["Set-Cookie"].must_equal [
+    response["set-cookie"].must_equal [
       "foo=bar; domain=sample.example.com",
       "foo=bar; domain=.example.com",
       "foo=; domain=.example.com; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT"
     ]
 
     response.delete_cookie "foo", domain: "sample.example.com"
-    response["Set-Cookie"].must_equal [
+    response["set-cookie"].must_equal [
       "foo=bar; domain=sample.example.com",
       "foo=bar; domain=.example.com",
       "foo=; domain=.example.com; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT",
@@ -270,20 +270,20 @@ describe Rack::Response do
     response = Rack::Response.new
     response.set_cookie "foo", { value: "bar", domain: "example.com.example.com" }
     response.set_cookie "foo", { value: "bar", domain: "example.com" }
-    response["Set-Cookie"].must_equal [
+    response["set-cookie"].must_equal [
       "foo=bar; domain=example.com.example.com",
       "foo=bar; domain=example.com"
     ]
     
     response.delete_cookie "foo", { domain: "example.com" }
-    response["Set-Cookie"].must_equal [
+    response["set-cookie"].must_equal [
       "foo=bar; domain=example.com.example.com",
       "foo=bar; domain=example.com",
       "foo=; domain=example.com; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT"
     ]
     
     response.delete_cookie "foo", { domain: "example.com.example.com" }
-    response["Set-Cookie"].must_equal [
+    response["set-cookie"].must_equal [
       "foo=bar; domain=example.com.example.com",
       "foo=bar; domain=example.com",
       "foo=; domain=example.com; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT",
@@ -296,13 +296,13 @@ describe Rack::Response do
     response.set_cookie "foo", { value: "bar", path: "/" }
     response.set_cookie "foo", { value: "bar", path: "/path" }
 
-    response["Set-Cookie"].must_equal [
+    response["set-cookie"].must_equal [
       "foo=bar; path=/",
       "foo=bar; path=/path"
     ]
 
     response.delete_cookie "foo", path: "/path"
-    response["Set-Cookie"].must_equal [
+    response["set-cookie"].must_equal [
       "foo=bar; path=/",
       "foo=bar; path=/path",
       "foo=; path=/path; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT"
@@ -312,12 +312,12 @@ describe Rack::Response do
   it "only delete cookies with the path specified" do
     response = Rack::Response.new
     response.set_cookie "foo", value: "bar", path: "/a/b"
-    response["Set-Cookie"].must_equal(
+    response["set-cookie"].must_equal(
       "foo=bar; path=/a/b"
     )
 
     response.delete_cookie "foo", path: "/a"
-    response["Set-Cookie"].must_equal [
+    response["set-cookie"].must_equal [
       "foo=bar; path=/a/b",
       "foo=; path=/a; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT"
     ]
@@ -326,12 +326,12 @@ describe Rack::Response do
   it "only delete cookies with the domain and path specified" do
     response = Rack::Response.new
     response.delete_cookie "foo", path: "/a", domain: "example.com"
-    response["Set-Cookie"].must_equal(
+    response["set-cookie"].must_equal(
       "foo=; domain=example.com; path=/a; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT",
     )
 
     response.delete_cookie "foo", path: "/a/b", domain: "example.com"
-    response["Set-Cookie"].must_equal [
+    response["set-cookie"].must_equal [
       "foo=; domain=example.com; path=/a; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT",
       "foo=; domain=example.com; path=/a/b; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT",
     ]
@@ -342,7 +342,7 @@ describe Rack::Response do
     response.redirect "/foo"
     status, header = response.finish
     status.must_equal 302
-    header["Location"].must_equal "/foo"
+    header["location"].must_equal "/foo"
 
     response = Rack::Response.new
     response.redirect "/foo", 307
@@ -391,7 +391,7 @@ describe Rack::Response do
     status.must_equal 404
   end
 
-  it "correctly updates Content-Type when writing when not initialized with body" do
+  it "correctly updates content-type when writing when not initialized with body" do
     r = Rack::Response.new
     r.write('foo')
     r.write('bar')
@@ -399,10 +399,10 @@ describe Rack::Response do
     _, header, body = r.finish
     str = "".dup; body.each { |part| str << part }
     str.must_equal "foobarbaz"
-    header['Content-Length'].must_equal '9'
+    header['content-length'].must_equal '9'
   end
 
-  it "correctly updates Content-Type when writing when initialized with body" do
+  it "correctly updates content-type when writing when initialized with body" do
     obj = Object.new
     def obj.each
       yield 'foo'
@@ -414,7 +414,7 @@ describe Rack::Response do
       _, header, body = r.finish
       str = "".dup; body.each { |part| str << part }
       str.must_equal "foobarbaz"
-      header['Content-Length'].must_equal '9'
+      header['content-length'].must_equal '9'
     end
   end
 
@@ -423,8 +423,8 @@ describe Rack::Response do
     _, header, body = r.finish
     str = "".dup; body.each { |part| str << part }
     str.must_be :empty?
-    header["Content-Type"].must_be_nil
-    header['Content-Length'].must_be_nil
+    header["content-type"].must_be_nil
+    header['content-length'].must_be_nil
 
     lambda {
       Rack::Response.new(Object.new).each{}
@@ -520,11 +520,11 @@ describe Rack::Response do
 
   it "provide access to the HTTP headers" do
     res = Rack::Response.new
-    res["Content-Type"] = "text/yaml; charset=UTF-8"
+    res["content-type"] = "text/yaml; charset=UTF-8"
 
-    res.must_include "Content-Type"
-    res.headers["Content-Type"].must_equal "text/yaml; charset=UTF-8"
-    res["Content-Type"].must_equal "text/yaml; charset=UTF-8"
+    res.must_include "content-type"
+    res.headers["content-type"].must_equal "text/yaml; charset=UTF-8"
+    res["content-type"].must_equal "text/yaml; charset=UTF-8"
     res.content_type.must_equal "text/yaml; charset=UTF-8"
     res.media_type.must_equal "text/yaml"
     res.media_type_params.must_equal "charset" => "UTF-8"
@@ -532,27 +532,27 @@ describe Rack::Response do
     res.location.must_be_nil
   end
 
-  it "does not add or change Content-Length when #finish()ing" do
+  it "does not add or change content-length when #finish()ing" do
     res = Rack::Response.new
     res.status = 200
     res.finish
-    res.headers["Content-Length"].must_be_nil
+    res.headers["content-length"].must_be_nil
 
     res = Rack::Response.new
     res.status = 200
-    res.headers["Content-Length"] = "10"
+    res.headers["content-length"] = "10"
     res.finish
-    res.headers["Content-Length"].must_equal "10"
+    res.headers["content-length"].must_equal "10"
   end
 
-  it "updates Content-Length when body appended to using #write" do
+  it "updates content-length when body appended to using #write" do
     res = Rack::Response.new
     res.status = 200
-    res.headers["Content-Length"].must_be_nil
+    res.headers["content-length"].must_be_nil
     res.write "Hi"
-    res.headers["Content-Length"].must_equal "2"
+    res.headers["content-length"].must_equal "2"
     res.write " there"
-    res.headers["Content-Length"].must_equal "8"
+    res.headers["content-length"].must_equal "8"
   end
 
   it "does not wrap body" do
@@ -652,62 +652,59 @@ describe Rack::Response, 'headers' do
   it 'has_header?' do
     lambda { @response.has_header? nil }.must_raise ArgumentError
 
-    @response.has_header?('Foo').must_equal true
     @response.has_header?('foo').must_equal true
   end
 
   it 'get_header' do
     lambda { @response.get_header nil }.must_raise ArgumentError
 
-    @response.get_header('Foo').must_equal '1'
     @response.get_header('foo').must_equal '1'
   end
 
   it 'set_header' do
     lambda { @response.set_header nil, '1' }.must_raise ArgumentError
 
-    @response.set_header('Foo', '2').must_equal '2'
-    @response.has_header?('Foo').must_equal true
-    @response.get_header('Foo').must_equal('2')
+    @response.set_header('foo', '2').must_equal '2'
+    @response.has_header?('foo').must_equal true
+    @response.get_header('foo').must_equal('2')
 
-    @response.set_header('Foo', nil).must_be_nil
-    @response.has_header?('Foo').must_equal true
-    @response.get_header('Foo').must_be_nil
+    @response.set_header('foo', nil).must_be_nil
+    @response.get_header('foo').must_be_nil
   end
 
   it 'add_header' do
     lambda { @response.add_header nil, '1' }.must_raise ArgumentError
 
     # Add a value to an existing header
-    @response.add_header('Foo', '2').must_equal ["1", "2"]
-    @response.get_header('Foo').must_equal ["1", "2"]
+    @response.add_header('foo', '2').must_equal ["1", "2"]
+    @response.get_header('foo').must_equal ["1", "2"]
 
     # Add nil to an existing header
-    @response.add_header('Foo', nil).must_equal ["1", "2"]
-    @response.get_header('Foo').must_equal ["1", "2"]
+    @response.add_header('foo', nil).must_equal ["1", "2"]
+    @response.get_header('foo').must_equal ["1", "2"]
 
     # Add nil to a nonexistent header
-    @response.add_header('Bar', nil).must_be_nil
-    @response.has_header?('Bar').must_equal false
-    @response.get_header('Bar').must_be_nil
+    @response.add_header('bar', nil).must_be_nil
+    @response.has_header?('bar').must_equal false
+    @response.get_header('bar').must_be_nil
 
     # Add a value to a nonexistent header
-    @response.add_header('Bar', '1').must_equal '1'
-    @response.has_header?('Bar').must_equal true
-    @response.get_header('Bar').must_equal '1'
+    @response.add_header('bar', '1').must_equal '1'
+    @response.has_header?('bar').must_equal true
+    @response.get_header('bar').must_equal '1'
   end
 
   it 'delete_header' do
     lambda { @response.delete_header nil }.must_raise ArgumentError
 
-    @response.delete_header('Foo').must_equal '1'
-    (!!@response.has_header?('Foo')).must_equal false
+    @response.delete_header('foo').must_equal '1'
+    @response.has_header?('foo').must_equal false
 
-    @response.delete_header('Foo').must_be_nil
-    @response.has_header?('Foo').must_equal false
+    @response.delete_header('foo').must_be_nil
+    @response.has_header?('foo').must_equal false
 
-    @response.set_header('Foo', 1)
+    @response.set_header('foo', 1)
     @response.delete_header('foo').must_equal 1
-    @response.has_header?('Foo').must_equal false
+    @response.has_header?('foo').must_equal false
   end
 end
diff --git a/test/spec_sendfile.rb b/test/spec_sendfile.rb
index ff7045b6..ee6f222a 100644
--- a/test/spec_sendfile.rb
+++ b/test/spec_sendfile.rb
@@ -38,7 +38,7 @@ describe Rack::Sendfile do
     end.open(path, 'wb+')
   end
 
-  it "does nothing when no x-sendfile-Type header present" do
+  it "does nothing when no x-sendfile-type header present" do
     request do |response|
       response.must_be :ok?
       response.body.must_equal 'Hello World'
@@ -46,7 +46,7 @@ describe Rack::Sendfile do
     end
   end
 
-  it "does nothing and logs to rack.errors when incorrect x-sendfile-Type header present" do
+  it "does nothing and logs to rack.errors when incorrect x-sendfile-type header present" do
     io = StringIO.new
     request 'HTTP_X_SENDFILE_TYPE' => 'X-Banana', 'rack.errors' => io do |response|
       response.must_be :ok?
@@ -62,52 +62,52 @@ describe Rack::Sendfile do
     request 'HTTP_X_SENDFILE_TYPE' => 'x-sendfile' do |response|
       response.must_be :ok?
       response.body.must_be :empty?
-      response.headers['Content-Length'].must_equal '0'
+      response.headers['content-length'].must_equal '0'
       response.headers['x-sendfile'].must_equal File.join(Dir.tmpdir,  "rack_sendfile")
     end
   end
 
-  it "sets X-Lighttpd-Send-File response header and discards body" do
-    request 'HTTP_X_SENDFILE_TYPE' => 'X-Lighttpd-Send-File' do |response|
+  it "sets x-lighttpd-send-file response header and discards body" do
+    request 'HTTP_X_SENDFILE_TYPE' => 'x-lighttpd-send-file' do |response|
       response.must_be :ok?
       response.body.must_be :empty?
-      response.headers['Content-Length'].must_equal '0'
-      response.headers['X-Lighttpd-Send-File'].must_equal File.join(Dir.tmpdir,  "rack_sendfile")
+      response.headers['content-length'].must_equal '0'
+      response.headers['x-lighttpd-send-file'].must_equal File.join(Dir.tmpdir,  "rack_sendfile")
     end
   end
 
-  it "sets X-Accel-Redirect response header and discards body" do
+  it "sets x-accel-redirect response header and discards body" do
     headers = {
-      'HTTP_X_SENDFILE_TYPE' => 'X-Accel-Redirect',
+      'HTTP_X_SENDFILE_TYPE' => 'x-accel-redirect',
       'HTTP_X_ACCEL_MAPPING' => "#{Dir.tmpdir}/=/foo/bar/"
     }
     request headers do |response|
       response.must_be :ok?
       response.body.must_be :empty?
-      response.headers['Content-Length'].must_equal '0'
-      response.headers['X-Accel-Redirect'].must_equal '/foo/bar/rack_sendfile'
+      response.headers['content-length'].must_equal '0'
+      response.headers['x-accel-redirect'].must_equal '/foo/bar/rack_sendfile'
     end
   end
 
-  it "sets X-Accel-Redirect response header to percent-encoded path" do
+  it "sets x-accel-redirect response header to percent-encoded path" do
     headers = {
-      'HTTP_X_SENDFILE_TYPE' => 'X-Accel-Redirect',
+      'HTTP_X_SENDFILE_TYPE' => 'x-accel-redirect',
       'HTTP_X_ACCEL_MAPPING' => "#{Dir.tmpdir}/=/foo/bar%/"
     }
     request headers, sendfile_body('file_with_%_?_symbol') do |response|
       response.must_be :ok?
       response.body.must_be :empty?
-      response.headers['Content-Length'].must_equal '0'
-      response.headers['X-Accel-Redirect'].must_equal '/foo/bar%25/file_with_%25_%3F_symbol'
+      response.headers['content-length'].must_equal '0'
+      response.headers['x-accel-redirect'].must_equal '/foo/bar%25/file_with_%25_%3F_symbol'
     end
   end
 
-  it 'writes to rack.error when no X-Accel-Mapping is specified' do
-    request 'HTTP_X_SENDFILE_TYPE' => 'X-Accel-Redirect' do |response|
+  it 'writes to rack.error when no x-accel-mapping is specified' do
+    request 'HTTP_X_SENDFILE_TYPE' => 'x-accel-redirect' do |response|
       response.must_be :ok?
       response.body.must_equal 'Hello World'
-      response.headers.wont_include 'X-Accel-Redirect'
-      response.errors.must_include 'X-Accel-Mapping'
+      response.headers.wont_include 'x-accel-redirect'
+      response.errors.must_include 'x-accel-mapping'
     end
   end
 
@@ -118,7 +118,7 @@ describe Rack::Sendfile do
     end
   end
 
-  it "sets X-Accel-Redirect response header and discards body when initialized with multiple mappings" do
+  it "sets x-accel-redirect response header and discards body when initialized with multiple mappings" do
     begin
       dir1 = Dir.mktmpdir
       dir2 = Dir.mktmpdir
@@ -134,18 +134,18 @@ describe Rack::Sendfile do
         ["#{dir2}/", '/wibble/']
       ]
 
-      request({ 'HTTP_X_SENDFILE_TYPE' => 'X-Accel-Redirect' }, first_body, mappings) do |response|
+      request({ 'HTTP_X_SENDFILE_TYPE' => 'x-accel-redirect' }, first_body, mappings) do |response|
         response.must_be :ok?
         response.body.must_be :empty?
-        response.headers['Content-Length'].must_equal '0'
-        response.headers['X-Accel-Redirect'].must_equal '/foo/bar/rack_sendfile'
+        response.headers['content-length'].must_equal '0'
+        response.headers['x-accel-redirect'].must_equal '/foo/bar/rack_sendfile'
       end
 
-      request({ 'HTTP_X_SENDFILE_TYPE' => 'X-Accel-Redirect' }, second_body, mappings) do |response|
+      request({ 'HTTP_X_SENDFILE_TYPE' => 'x-accel-redirect' }, second_body, mappings) do |response|
         response.must_be :ok?
         response.body.must_be :empty?
-        response.headers['Content-Length'].must_equal '0'
-        response.headers['X-Accel-Redirect'].must_equal '/wibble/rack_sendfile'
+        response.headers['content-length'].must_equal '0'
+        response.headers['x-accel-redirect'].must_equal '/wibble/rack_sendfile'
       end
     ensure
       FileUtils.remove_entry_secure dir1
@@ -153,7 +153,7 @@ describe Rack::Sendfile do
     end
   end
 
-  it "sets X-Accel-Redirect response header and discards body when initialized with multiple mappings via header" do
+  it "sets x-accel-redirect response header and discards body when initialized with multiple mappings via header" do
     begin
       dir1 = Dir.mktmpdir
       dir2 = Dir.mktmpdir
@@ -169,29 +169,29 @@ describe Rack::Sendfile do
       third_body.puts 'hello again world'
 
       headers = {
-        'HTTP_X_SENDFILE_TYPE' => 'X-Accel-Redirect',
+        'HTTP_X_SENDFILE_TYPE' => 'x-accel-redirect',
         'HTTP_X_ACCEL_MAPPING' => "#{dir1}/=/foo/bar/, #{dir2}/=/wibble/"
       }
 
       request(headers, first_body) do |response|
         response.must_be :ok?
         response.body.must_be :empty?
-        response.headers['Content-Length'].must_equal '0'
-        response.headers['X-Accel-Redirect'].must_equal '/foo/bar/rack_sendfile'
+        response.headers['content-length'].must_equal '0'
+        response.headers['x-accel-redirect'].must_equal '/foo/bar/rack_sendfile'
       end
 
       request(headers, second_body) do |response|
         response.must_be :ok?
         response.body.must_be :empty?
-        response.headers['Content-Length'].must_equal '0'
-        response.headers['X-Accel-Redirect'].must_equal '/wibble/rack_sendfile'
+        response.headers['content-length'].must_equal '0'
+        response.headers['x-accel-redirect'].must_equal '/wibble/rack_sendfile'
       end
 
       request(headers, third_body) do |response|
         response.must_be :ok?
         response.body.must_be :empty?
-        response.headers['Content-Length'].must_equal '0'
-        response.headers['X-Accel-Redirect'].must_equal "#{dir3}/rack_sendfile"
+        response.headers['content-length'].must_equal '0'
+        response.headers['x-accel-redirect'].must_equal "#{dir3}/rack_sendfile"
       end
     ensure
       FileUtils.remove_entry_secure dir1
diff --git a/test/spec_server.rb b/test/spec_server.rb
index 7e547cec..25afb78a 100644
--- a/test/spec_server.rb
+++ b/test/spec_server.rb
@@ -28,7 +28,7 @@ describe Rack::Server do
   before { SPEC_ARGV[0..-1] = [] }
 
   def app
-    lambda { |env| [200, { 'Content-Type' => 'text/plain' }, ['success']] }
+    lambda { |env| [200, { 'content-type' => 'text/plain' }, ['success']] }
   end
 
   def with_stderr
@@ -44,8 +44,7 @@ describe Rack::Server do
   end
 
   it "prefer to use :builder when it is passed in" do
-    server = Rack::Server.new(builder: "run lambda { |env| [200, {'Content-Type' => 'text/plain'}, ['success']] }")
-    server.app.class.must_equal Proc
+    server = Rack::Server.new(builder: "run lambda { |env| [200, {'content-type' => 'text/plain'}, ['success']] }")
     Rack::MockRequest.new(server.app).get("/").body.to_s.must_equal 'success'
   end
 
diff --git a/test/spec_static.rb b/test/spec_static.rb
index fc242ded..e102ded6 100644
--- a/test/spec_static.rb
+++ b/test/spec_static.rb
@@ -121,7 +121,7 @@ describe Rack::Static do
   it "serves gzipped files if client accepts gzip encoding and gzip files are present" do
     res = @gzip_request.get("/cgi/test", 'HTTP_ACCEPT_ENCODING' => 'deflate, gzip')
     res.must_be :ok?
-    res.headers['Content-Encoding'].must_equal 'gzip'
+    res.headers['content-encoding'].must_equal 'gzip'
     res.headers['content-type'].must_equal 'text/plain'
     Zlib::GzipReader.wrap(StringIO.new(res.body), &:read).must_match(/ruby/)
   end
@@ -129,7 +129,7 @@ describe Rack::Static do
   it "serves regular files if client accepts gzip encoding and gzip files are not present" do
     res = @gzip_request.get("/cgi/rackup_stub.rb", 'HTTP_ACCEPT_ENCODING' => 'deflate, gzip')
     res.must_be :ok?
-    res.headers['Content-Encoding'].must_be_nil
+    res.headers['content-encoding'].must_be_nil
     res.headers['content-type'].must_equal 'text/x-script.ruby'
     res.body.must_match(/ruby/)
   end
@@ -137,7 +137,7 @@ describe Rack::Static do
   it "serves regular files if client does not accept gzip encoding" do
     res = @gzip_request.get("/cgi/test")
     res.must_be :ok?
-    res.headers['Content-Encoding'].must_be_nil
+    res.headers['content-encoding'].must_be_nil
     res.headers['content-type'].must_equal 'text/plain'
     res.body.must_match(/ruby/)
   end
@@ -147,7 +147,7 @@ describe Rack::Static do
     res = @gzip_request.get("/cgi/test", 'HTTP_IF_MODIFIED_SINCE' => File.mtime(path).httpdate)
     res.status.must_equal 304
     res.body.must_be :empty?
-    res.headers['Content-Encoding'].must_be_nil
+    res.headers['content-encoding'].must_be_nil
     res.headers['content-type'].must_be_nil
   end