[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-1601?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14290700#comment-14290700
 ] 

Jon Moore commented on HTTPCLIENT-1601:
---------------------------------------

I don't think this is a bug in the sense of incorrect behavior, although I 
think you've possibly identified an opportunity for improvement.

HTTP methods by default are non-idempotent unless explicitly declared 
otherwise. Idempotent methods can be automatically retried by intermediaries, 
user agents, etc., but the worst that happens on the client side is that 
something that could have been retried is not retried. This is not a protocol 
(interoperability) problem; treating PUT as non-idempotent on the *client* side 
is not a violation of the spec. Note that section 4.2.2 of RFC 7231 uses the 
word "can" and not "MUST".

There are practical implementation reasons why requests with bodies might not 
be automatically retried, particularly for ones with non-restartable input 
streams. I haven't looked to see what the current implementation does. Retrying 
PUTs with restartable input streams would seem reasonably straightforward; 
supporting retries for PUTs without restartable input streams is a feature 
that's probably worth debating (would require buffering on the client side in 
case a retry is needed; that feature would almost certainly need to be an 
opt-in one due to the memory implications).

In any event, I agree with you that the documentation (at least) could be 
cleaned up to match the actual implementation (if not already accurate), and 
also to say something like "Although PUT is defined as an idempotent method by 
the HTTP spec, the HttpClient implementation does not take advantage of this 
and does not retry any method which encloses a request entity." Or similar. 



> Tutorial claims that PUT is not idempotent
> ------------------------------------------
>
>                 Key: HTTPCLIENT-1601
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1601
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: Documentation
>    Affects Versions: 4.3.6
>            Reporter: Michael Osipov
>
> Open up [chapter 
> 1.4.2|http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fundamentals.html#d5e280],
>  it says that {{PUT}} is not idempotent. This clearly violates [RFC 7231, 
> section 4.2.2|http://tools.ietf.org/html/rfc7231#section-4.2.2]. It should be 
> checked whether this is just a documentation flaw or even maybe an 
> implemenation flaw.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to