]> sjero.net Git - wget/blobdiff - src/http.c
Add support for --content-on-error.
[wget] / src / http.c
index 1aa9ef02b626ed61250e040be3748e05456511f2..7eef453f6ccca5cedb0bb6f59d7f9b81e75c4a97 100644 (file)
@@ -1619,8 +1619,14 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy,
 
   request_set_header (req, "Referer", (char *) hs->referer, rel_none);
   if (*dt & SEND_NOCACHE)
-    request_set_header (req, "Pragma", "no-cache", rel_none);
-  if (hs->restval && !opt.timestamping)
+    {
+      /* Cache-Control MUST be obeyed by all HTTP/1.1 caching mechanisms...  */
+      request_set_header (req, "Cache-Control", "no-cache, must-revalidate", rel_none);
+
+      /* ... but some HTTP/1.0 caches doesn't implement Cache-Control.  */
+      request_set_header (req, "Pragma", "no-cache", rel_none);
+    }
+  if (hs->restval)
     request_set_header (req, "Range",
                         aprintf ("bytes=%s-",
                                  number_to_static_string (hs->restval)),
@@ -1980,12 +1986,14 @@ read_header:
                                  _("Malformed status line")));
       CLOSE_INVALIDATE (sock);
       request_free (req);
+      xfree (head);
       return HERR;
     }
 
   if (H_10X (statcode))
     {
       DEBUGP (("Ignoring response\n"));
+      xfree (head);
       goto read_header;
     }
 
@@ -2034,8 +2042,9 @@ read_header:
         }
     }
 
-  resp_header_copy (resp, "Transfer-Encoding", hdrval, sizeof (hdrval));
-  if (0 == strcasecmp (hdrval, "chunked"))
+  chunked_transfer_encoding = false;
+  if (resp_header_copy (resp, "Transfer-Encoding", hdrval, sizeof (hdrval))
+      && 0 == strcasecmp (hdrval, "chunked"))
     chunked_transfer_encoding = true;
 
   /* Handle (possibly multiple instances of) the Set-Cookie header. */
@@ -2442,7 +2451,7 @@ read_header:
   type = NULL;                        /* We don't need it any more.  */
 
   /* Return if we have no intention of further downloading.  */
-  if (!(*dt & RETROKF) || head_only)
+  if ((!(*dt & RETROKF) && !opt.content_on_error) || head_only)
     {
       /* In case the caller cares to look...  */
       hs->len = 0;