diff options
author | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2022-04-12 03:33:50 +1200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-11 08:33:50 -0700 |
commit | b0c2656921aec622de72cfe114cb7da0bf408993 (patch) | |
tree | 5b563f8295054ac4ebca0355cc44089fb2775155 | |
parent | 0493142d9a472249383c72d6d7e1195b3ca38df0 (diff) | |
download | rack-b0c2656921aec622de72cfe114cb7da0bf408993.tar.gz |
Tidy up documentation and specs in relation to lower case headers. (#1855)
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 Binary files differindex a3bd67c4..ee2e7de2 100644 --- a/test/multipart/binary +++ b/test/multipart/binary 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 |