summary refs log tree commit
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2016-12-14 21:58:15 +0000
committerEric Wong <e@80x24.org>2016-12-14 21:58:54 +0000
commitbcf2698bcc90f346b145538e53d0d61bcceb2e48 (patch)
tree76ad49e357c2ef0474b639f25df057fd73c87d09
parent9e73bd1ae7b5df937302a148ab99bf3be12eb063 (diff)
downloadrack-rfc7231-sec6.3.6-205.tar.gz
Revert "Add 205 Reset Content to the list of statuses without a message body" rfc7231-sec6.3.6-205
RFC 7231, section 6.3.5 gives three possible options for what a
server MUST do when sending a 205 status code:

> Since the 205 status code implies that no additional content will be
> provided, a server MUST NOT generate a payload in a 205 response.  In
> other words, a server MUST do one of the following for a 205
> response: a) indicate a zero-length body for the response by
> including a Content-Length header field with a value of 0; b)
> indicate a zero-length payload for the response by including a
> Transfer-Encoding header field with a value of chunked and a message
> body consisting of a single chunk of zero-length; or, c) close the
> connection immediately after sending the blank line terminating the
> header section.

rack itself has no control over c), but should leave options
a) and b) available for middleware and application authors.

	https://tools.ietf.org/html/rfc7231#section-6.3.6

The older RFC 2616 text was vague and not specific about
what a server should do:

	https://tools.ietf.org/html/rfc2616#section-10.2.6

I noticed this from Plack: https://metacpan.org/pod/Plack::Util

This reverts commit 2c5b076aaba6c83ffce8c6c2b5c49085c1abb5a5.
-rw-r--r--SPEC4
-rw-r--r--lib/rack/lint.rb4
-rw-r--r--lib/rack/mock.rb2
-rw-r--r--lib/rack/response.rb2
-rw-r--r--lib/rack/utils.rb2
-rw-r--r--test/spec_chunked.rb2
-rw-r--r--test/spec_lint.rb4
-rw-r--r--test/spec_response.rb4
8 files changed, 12 insertions, 12 deletions
diff --git a/SPEC b/SPEC
index 7e3af40a..9b278846 100644
--- a/SPEC
+++ b/SPEC
@@ -237,10 +237,10 @@ consisting of lines (for multiple header values, e.g. multiple
 The lines must not contain characters below 037.
 === The Content-Type
 There must not be a <tt>Content-Type</tt>, when the +Status+ is 1xx,
-204, 205 or 304.
+204 or 304.
 === The Content-Length
 There must not be a <tt>Content-Length</tt> header when the
-+Status+ is 1xx, 204, 205 or 304.
++Status+ is 1xx, 204 or 304.
 === The Body
 The Body must respond to +each+
 and must only yield String values.
diff --git a/lib/rack/lint.rb b/lib/rack/lint.rb
index 54d37822..683ba684 100644
--- a/lib/rack/lint.rb
+++ b/lib/rack/lint.rb
@@ -659,7 +659,7 @@ module Rack
     def check_content_type(status, headers)
       headers.each { |key, value|
         ## There must not be a <tt>Content-Type</tt>, when the +Status+ is 1xx,
-        ## 204, 205 or 304.
+        ## 204 or 304.
         if key.downcase == "content-type"
           assert("Content-Type header found in #{status} response, not allowed") {
             not Rack::Utils::STATUS_WITH_NO_ENTITY_BODY.include? status.to_i
@@ -674,7 +674,7 @@ module Rack
       headers.each { |key, value|
         if key.downcase == 'content-length'
           ## There must not be a <tt>Content-Length</tt> header when the
-          ## +Status+ is 1xx, 204, 205 or 304.
+          ## +Status+ is 1xx, 204 or 304.
           assert("Content-Length header found in #{status} response, not allowed") {
             not Rack::Utils::STATUS_WITH_NO_ENTITY_BODY.include? status.to_i
           }
diff --git a/lib/rack/mock.rb b/lib/rack/mock.rb
index 4ebc4df1..afc855e2 100644
--- a/lib/rack/mock.rb
+++ b/lib/rack/mock.rb
@@ -190,7 +190,7 @@ module Rack
     end
 
     def empty?
-      [201, 204, 205, 304].include? status
+      [201, 204, 304].include? status
     end
   end
 end
diff --git a/lib/rack/response.rb b/lib/rack/response.rb
index 9ac47aad..a9f0c2a3 100644
--- a/lib/rack/response.rb
+++ b/lib/rack/response.rb
@@ -60,7 +60,7 @@ module Rack
     def finish(&block)
       @block = block
 
-      if [204, 205, 304].include?(status.to_i)
+      if [204, 304].include?(status.to_i)
         delete_header CONTENT_TYPE
         delete_header CONTENT_LENGTH
         close
diff --git a/lib/rack/utils.rb b/lib/rack/utils.rb
index 7b842125..c253f3cf 100644
--- a/lib/rack/utils.rb
+++ b/lib/rack/utils.rb
@@ -576,7 +576,7 @@ module Rack
     }
 
     # Responses with HTTP status codes that should not have an entity body
-    STATUS_WITH_NO_ENTITY_BODY = Set.new((100..199).to_a << 204 << 205 << 304)
+    STATUS_WITH_NO_ENTITY_BODY = Set.new((100..199).to_a << 204 << 304)
 
     SYMBOL_TO_STATUS_CODE = Hash[*HTTP_STATUS_CODES.map { |code, message|
       [message.downcase.gsub(/\s|-|'/, '_').to_sym, code]
diff --git a/test/spec_chunked.rb b/test/spec_chunked.rb
index 7bbcfd92..dc6e8c9d 100644
--- a/test/spec_chunked.rb
+++ b/test/spec_chunked.rb
@@ -92,7 +92,7 @@ describe Rack::Chunked do
     body.join.must_equal 'Hello World!'
   end
 
-  [100, 204, 205, 304].each do |status_code|
+  [100, 204, 304].each do |status_code|
     it "not modify response when status code is #{status_code}" do
       app = lambda { |env| [status_code, {}, []] }
       status, headers, _ = chunked(app).call(@env)
diff --git a/test/spec_lint.rb b/test/spec_lint.rb
index 6d1c2c45..d99c1aa3 100644
--- a/test/spec_lint.rb
+++ b/test/spec_lint.rb
@@ -269,7 +269,7 @@ describe Rack::Lint do
     # }.must_raise(Rack::Lint::LintError).
     #   message.must_match(/No Content-Type/)
 
-    [100, 101, 204, 205, 304].each do |status|
+    [100, 101, 204, 304].each do |status|
       lambda {
         Rack::Lint.new(lambda { |env|
                          [status, {"Content-type" => "text/plain", "Content-length" => "0"}, []]
@@ -280,7 +280,7 @@ describe Rack::Lint do
   end
 
   it "notice content-length errors" do
-    [100, 101, 204, 205, 304].each do |status|
+    [100, 101, 204, 304].each do |status|
       lambda {
         Rack::Lint.new(lambda { |env|
                          [status, {"Content-length" => "0"}, []]
diff --git a/test/spec_response.rb b/test/spec_response.rb
index 2dd2c001..987199de 100644
--- a/test/spec_response.rb
+++ b/test/spec_response.rb
@@ -410,7 +410,7 @@ describe Rack::Response do
     res.body.must_be :closed?
   end
 
-  it "calls close on #body when 204, 205, or 304" do
+  it "calls close on #body when 204 or 304" do
     res = Rack::Response.new
     res.body = StringIO.new
     res.finish
@@ -424,7 +424,7 @@ describe Rack::Response do
     res.body = StringIO.new
     res.status = 205
     _, _, b = res.finish
-    res.body.must_be :closed?
+    res.body.wont_be :closed?
     b.wont_equal res.body
 
     res.body = StringIO.new