httpwg / http2-spec Public
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rejecting non-idempotent requests safely #57
Comments
|
I'm not sure that it's safe to always assume that automatic retry is safe for the REFUSED_STREAM case. There could be many reasons why the stream was refused and automatic retry could lead to abuse or could make the situation worse. Perhaps a separate status code (e.g. REFUSED_STREAM_RETRY_OK) would be better for this? That gives the server a slight bit more control over how things are handled. |
|
The assertion here is that automatically retrying a request is safe from an HTTP semantic point of view. It does not give any assertion that a stream will be accepted if it is retried. I'm not sure how useful a separate status code would be as it does not really provide the server any control. The server would always have to be prepared to handle abusive clients. |
|
James, This is what I believe was the intent: The distinction between REFUSED_STREAM and CANCEL is that REFUSED_STREAM That isn't effectively captured in the spec. As long as this is OK from a On 23 April 2013 14:11, Jeff Pinner notifications@github.com wrote:
|
|
I can live with that kind of differentiation between CANCEL and REFUSED_STREAM. |
|
Is the design label correct for this? AIUI, there's no contention here, it just needs to be explained better than we did in SPDY. I believe this just needs editorial work. |
|
Oops, I gagged at re-reading my comment. I hate adding to procedural nonsense :P |
|
Discussed at SF Interim; Martin to incorporate and James to review. |
|
In; @jasnell please review. |
|
The current wording in the spec is sufficient on this I think... with the exception of the last paragraph regarding PING... the ability to send a PING doesn't really have anything to do with automatic request retry... I'd scrub that last paragraph. |
The REFUSED_STREAM error code on RST_STREAM has an unexplained, yet potentially important property. This error code is a clear signal to the receiver that the framing layer did not pass any frames to an upper layer for processing.
This allows a client to use this error code as a signal that the HTTP request it made can be safely retried, even if that request would not ordinarily permit that. That is, a client (or intermediary ?) can safely retry an non-idempotent request.
This gets around the retry prohibition in http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-22#section-6.3.1
This needs to be better explained, perhaps with a new section in the HTTP usage section.
See thread starting at http://lists.w3.org/Archives/Public/ietf-http-wg/2013JanMar/1353.html
The text was updated successfully, but these errors were encountered: