rack-devel archive mirror (unofficial) https://groups.google.com/group/rack-devel
 help / color / mirror / code / Atom feed
* [PATCH] Revert "Add 205 Reset Content to the list of statuses without a message body"
@ 2016-12-14 22:14 Eric Wong
  2016-12-15 19:46 ` James Tucker
  2017-02-15 18:54 ` Eric Wong
  0 siblings, 2 replies; 4+ messages in thread
From: Eric Wong @ 2016-12-14 22:14 UTC (permalink / raw)
  To: rack-devel

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.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Revert "Add 205 Reset Content to the list of statuses without a message body"
  2016-12-14 22:14 [PATCH] Revert "Add 205 Reset Content to the list of statuses without a message body" Eric Wong
@ 2016-12-15 19:46 ` James Tucker
  2017-02-15 18:54 ` Eric Wong
  1 sibling, 0 replies; 4+ messages in thread
From: James Tucker @ 2016-12-15 19:46 UTC (permalink / raw)
  To: Rack Development

[-- Attachment #1: Type: text/plain, Size: 8014 bytes --]

+1

On Wed, Dec 14, 2016 at 2:14 PM, Eric Wong <e@80x24.org> wrote:

> 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 9e73bd1ae7b5df937302a148ab99bf
> 3be12eb063:
>
>     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.
>

-- 

--- 
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.

[-- Attachment #2: Type: text/html, Size: 10346 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Revert "Add 205 Reset Content to the list of statuses without a message body"
  2016-12-14 22:14 [PATCH] Revert "Add 205 Reset Content to the list of statuses without a message body" Eric Wong
  2016-12-15 19:46 ` James Tucker
@ 2017-02-15 18:54 ` Eric Wong
  2017-02-15 21:25   ` Aaron Patterson
  1 sibling, 1 reply; 4+ messages in thread
From: Eric Wong @ 2017-02-15 18:54 UTC (permalink / raw)
  To: rack-devel

Eric Wong <e@80x24.org> wrote:
>     git://80x24.org/rack rfc7231-sec6.3.6-205
> 
>   for you to fetch changes up to bcf2698bcc90f346b145538e53d0d61bcceb2e48:

Ping on this.

There's also:

Subject: [PATCH] deflater: remove "deflate" encoding support
Message-Id: <20160727021048.GA27519@starla>
>     git://80x24.org/rack.git no-deflate
> 
>   for you to fetch changes up to d6380043a8953dca63743c947c8027f465d29a5d:

Thanks.

-- 

--- 
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.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Revert "Add 205 Reset Content to the list of statuses without a message body"
  2017-02-15 18:54 ` Eric Wong
@ 2017-02-15 21:25   ` Aaron Patterson
  0 siblings, 0 replies; 4+ messages in thread
From: Aaron Patterson @ 2017-02-15 21:25 UTC (permalink / raw)
  To: rack-devel

[-- Attachment #1: Type: text/plain, Size: 931 bytes --]

On Wed, Feb 15, 2017 at 06:54:37PM +0000, Eric Wong wrote:
> Eric Wong <e@80x24.org> wrote:
> >     git://80x24.org/rack rfc7231-sec6.3.6-205
> > 
> >   for you to fetch changes up to bcf2698bcc90f346b145538e53d0d61bcceb2e48:
> 
> Ping on this.
> 
> There's also:
> 
> Subject: [PATCH] deflater: remove "deflate" encoding support
> Message-Id: <20160727021048.GA27519@starla>
> >     git://80x24.org/rack.git no-deflate
> > 
> >   for you to fetch changes up to d6380043a8953dca63743c947c8027f465d29a5d:
> 
> Thanks.

Thanks for the friendly bump!  I've applied both patches to master.

-- 
Aaron Patterson
http://tenderlovemaking.com/

-- 

--- 
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.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-02-15 21:25 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-12-14 22:14 [PATCH] Revert "Add 205 Reset Content to the list of statuses without a message body" Eric Wong
2016-12-15 19:46 ` James Tucker
2017-02-15 18:54 ` Eric Wong
2017-02-15 21:25   ` Aaron Patterson

rack-devel archive mirror (unofficial) https://groups.google.com/group/rack-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://public-inbox.org/rack-devel

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V1 rack-devel rack-devel/ https://public-inbox.org/rack-devel \
		rack-devel@googlegroups.com
	public-inbox-index rack-devel

Example config snippet for mirrors.
Newsgroups are available over NNTP:
	nntp://news.public-inbox.org/inbox.comp.lang.ruby.rack.devel
	nntp://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/inbox.comp.lang.ruby.rack.devel
	nntp://news.gmane.io/gmane.comp.lang.ruby.rack.devel
 note: .onion URLs require Tor: https://www.torproject.org/

code repositories for project(s) associated with this inbox:

	https://80x24.org/mirrors/rack.git

AGPL code for this site: git clone https://public-inbox.org/public-inbox.git