rack-devel archive mirror (unofficial) https://groups.google.com/group/rack-devel
 help / color / mirror / Atom feed
From: Eric Wong <e@80x24.org>
To: rack-devel@googlegroups.com
Subject: [PATCH] Revert "Add 205 Reset Content to the list of statuses without a message body"
Date: Wed, 14 Dec 2016 22:14:49 +0000	[thread overview]
Message-ID: <20161214221449.GA24731@dcvr> (raw)

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.
---
  If you prefer to use "git pull" or "git merge":

  The following changes since commit 9e73bd1ae7b5df937302a148ab99bf3be12eb063:

    Merge pull request #1135 from tonytonyjan/patch-rdoc (2016-12-08 13:13:44 -0500)

  are available in the git repository at:

    git://80x24.org/rack rfc7231-sec6.3.6-205

  for you to fetch changes up to bcf2698bcc90f346b145538e53d0d61bcceb2e48:

    Revert "Add 205 Reset Content to the list of statuses without a message body" (2016-12-14 21:58:54 +0000)

  ----------------------------------------------------------------
  Eric Wong (1):
        Revert "Add 205 Reset Content to the list of statuses without a message body"

 SPEC                  | 4 ++--
 lib/rack/lint.rb      | 4 ++--
 lib/rack/mock.rb      | 2 +-
 lib/rack/response.rb  | 2 +-
 lib/rack/utils.rb     | 2 +-
 test/spec_chunked.rb  | 2 +-
 test/spec_lint.rb     | 4 ++--
 test/spec_response.rb | 4 ++--
 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
-- 
EW

-- 

--- 
You received this message because you are subscribed to the Google Groups "Rack Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rack-devel+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

             reply	other threads:[~2016-12-14 22:14 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-14 22:14 Eric Wong [this message]
2016-12-15 19:46 ` [PATCH] Revert "Add 205 Reset Content to the list of statuses without a message body" James Tucker
2017-02-15 18:54 ` Eric Wong
2017-02-15 21:25   ` Aaron Patterson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://groups.google.com/group/rack-devel

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20161214221449.GA24731@dcvr \
    --to=rack-devel@googlegroups.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).