Commit 08f8917a authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

Dirk Manske's fix for HTTP response code 301, that now behaves more like

browsers do. Which thus *breaks* the RFC 2616...
parent 62d205a2
Loading
Loading
Loading
Loading
+21 −1
Original line number Diff line number Diff line
@@ -1262,7 +1262,6 @@ CURLcode Curl_perform(struct SessionHandle *data)
         */
        switch(data->info.httpcode) {
        case 300: /* Multiple Choices */
        case 301: /* Moved Permanently */
        case 306: /* Not used */
        case 307: /* Temporary Redirect */
        default:  /* for all unknown ones */
@@ -1270,6 +1269,27 @@ CURLcode Curl_perform(struct SessionHandle *data)
           * seem to be OK to POST to.
           */
          break;
        case 301: /* Moved Permanently */
          /* (quote from RFC2616, section 10.3.2):
           * 
           *  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.
           *
           * ----
           * Warning: Because most of importants user agents do this clear
           * RFC2616 violation, many webservers expect this misbehavior. So
           * these servers often answers to a POST request with an error page.
           * To be sure that libcurl gets the page that most user agents
           * would get, libcurl has to force GET:
           */
          if( data->set.httpreq == HTTPREQ_POST
              || data->set.httpreq == HTTPREQ_POST_FORM) {
            infof(data,
                  "Violate RFC 2616/10.3.2 and switch from POST to GET\n");
            data->set.httpreq = HTTPREQ_GET;
          }
          break;
        case 302: /* Found */
          /* (From 10.3.3)