hc-httpclient-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Oleg Kalnichevski <ol...@apache.org>
Subject Re: POST redirection question
Date Wed, 06 Feb 2013 13:18:00 GMT
On Wed, 2013-02-06 at 09:43 +0100, COURTAULT Francois wrote:
> Hello François-Xavier,
> 
> I was not talking of browser behavior. I was talking of HttpClient behavior (eg HttpClient
user agent).
> This is why I have asked the spec question.
> 
> Best Regards.
> 
> -----Original Message-----
> From: Francois-Xavier Bonnet [mailto:fx.bonnet@gmail.com] 
> Sent: mercredi 6 février 2013 09:31
> To: HttpClient User Discussion
> Cc: olegk@apache.org
> Subject: RE: POST redirection question
> 
> Hello Francois,
> 
> Browsers do not respect much this part of the specifications. I remember I made some
comprehensive tests (but this was a few years ago) and most browsers were changing POST to
GET.
> Le 6 févr. 2013 09:15, "COURTAULT Francois" <Francois.COURTAULT@gemalto.com> a
écrit :
> 
> > Hello Oleg,
> >
> > First, thanks a lot for you answer.
> > Is it written in the rfc 2626 spec because I have not seen it :-(
> >
> > I have only seen at 10.3.2:
> >         If the 301 status code is received in response to a request other
> >         than GET or HEAD, the user agent MUST NOT automatically 
> > redirect the
> >         request unless it can be confirmed by the user, since this might
> >         change the conditions under which the request was issued.
> >
> >       Note: When automatically redirecting a POST request after
> >       receiving a 301 status code, some existing HTTP/1.0 user agents
> >       will erroneously change it into a GET request.
> >
> > So my understanding is that the default behavior for HTTP/1.1 user 
> > agent is to not change the HTTP request (eg keep the POST request).
> > Am I wrong ?
> >

No, you are not. But many older user agents do it anyway, so it simply
became an expected behavior. To disambiguate expected behavior in case
of a redirect status code 407 has been added by the HTTP/1.1 spec.

> > But maybe the first paragraph prevails meaning that for 301 user agent 
> > automatic redirection is not allowed: right ?
> >

Correct.

Oleg

> > Best Regards.
> >
> > -----Original Message-----
> > From: Oleg Kalnichevski [mailto:olegk@apache.org]
> > Sent: mardi 5 février 2013 23:31
> > To: HttpClient User Discussion
> > Subject: Re: POST redirection question
> >
> > On Tue, 2013-02-05 at 18:53 +0100, COURTAULT Francois wrote:
> > > Hello everyone,
> > >
> > > At the beginning, I had something like that :
> > > HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = 
> > > new HttpPost(SOME_URL); HttpResponse postResponse = 
> > > httpClient.execute(httpPost);
> > >
> > > It turns out that I got a 301 Moved permanently.
> > >
> > > So I made the following modifications, either:
> > > - httpClient.setRedirectStrategy(new LaxRedirectStrategy());
> > > - or httpClient.setRedirectStrategy(new DefaultRedirectStrategy());
> > > - or              httpClient.setRedirectStrategy(new
> > DefaultRedirectStrategy() {
> > >                   @Override
> > >                   public boolean isRedirected(HttpRequest request,
> > HttpResponse response, HttpContext context) {
> > >                         boolean isRedirected = false;
> > >                         try {
> > >                               isRedirected = 
> > > super.isRedirected(request,
> > response, context);
> > >                         } catch (ProtocolException e) {
> > >                               fail("Unable to set a redirect 
> > > strategy,
> > reason: " + e.getMessage());
> > >                         }
> > >
> > >                         if (!isRedirected) {
> > >                               int responseCode =
> > response.getStatusLine().getStatusCode();
> > >                               if (responseCode == 301 || 
> > > responseCode ==
> > 302) {
> > >                                     return true;
> > >                               }
> > >                         }
> > >                         return false;
> > >                   }
> > >             });
> > > - or the same than above with new LaxRedirectStrategy
> > >
> > > Each time, after receiving a 301, the client sent a GET request 
> > > instead
> > of my initial HTTP request, which is a POST one as you can see, to the 
> > new location.
> > > Any advice ? sample ?
> > > Or is it an issue ?
> > >
> > > Best Regards.
> >
> > Only in case of a TEMPORARY_REDIRECT it is valid to redirect the 
> > request without changing its method. In all other cases methods other 
> > than HEAD and GET get converted to GET. To change this behavior you 
> > need to override #getRedirect method
> >
> >
> > http://hc.apache.org/httpcomponents-client-ga/httpclient/xref/org/apac
> > he/http/impl/client/DefaultRedirectStrategy.html#213
> >
> > Oleg
> >
> >
> > > --------------------------------------------------------------------
> > > - To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> > > For additional commands, e-mail: httpclient-users-help@hc.apache.org
> > >
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> > For additional commands, e-mail: httpclient-users-help@hc.apache.org
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> > For additional commands, e-mail: httpclient-users-help@hc.apache.org
> >
> >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org


Mime
View raw message