【问题标题】:Multiple redirect headers多个重定向标头
【发布时间】:2011-11-17 18:27:16
【问题描述】:

我正在使用 Curl 编写一个爬虫,我发现很多页面都包含多个重定向标头,例如:

HTTP/1.1 302 Moved Temporarily
Server: nginx/1.0.4
Date: Thu, 17 Nov 2011 17:46:35 GMT
Transfer-Encoding: chunked
Location: http://secure.domain.net/track/NDg6MTE6MTU/?autocamp=TJ_ABC_VA_A02

HTTP/1.1 302 Found
Date: Thu, 17 Nov 2011 17:46:37 GMT
Server: Apache
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: nats_cookie=Bookmark; expires=Fri, 18-Nov-2011 17:46:37 GMT; path=/; domain=domain.net
Set-Cookie: nats=MjYwNjk6MTE6MTU%2C0%2C0%2C0%2C0; expires=Sun, 27-Nov-2011 17:46:37 GMT; path=/; domain=domain.net
Set-Cookie: nats_sess=00e48c685c9acbb37fcc3b7461b1ab81; expires=Sat, 25-Feb-2012 17:46:37 GMT; path=/; domain=domain.net
Location: http://www.domain.net/tour/?nats=MjYwNjk6MTE6MTU,0,0,0,0&autocamp=TJ_ABC_VA_A02
Transfer-Encoding: chunked
Content-Type: text/html

HTTP/1.1 200 OK
Date: Thu, 17 Nov 2011 17:46:39 GMT
Server: Apache
Transfer-Encoding: chunked
Content-Type: text/html

如您所见,有两个带有“Location:”指令的标题。

我只是想知道他们为什么这样做。 只包含一个标题还不够吗?

重定向的 URL 甚至不同, 那么哪个是“真正的”着陆页呢?

谢谢。

【问题讨论】:

    标签: redirect curl header http-headers


    【解决方案1】:

    当 CURLOPT_FOLLOWLOCATION 和 CURLOPT_HEADER 都为 true 并且发生了重定向时,curl_exec() 返回的响应将包含重定向链中的所有标头,按照它们遇到的顺序。

    来源: http://php.net/manual/en/function.curl-setopt.php#103232

    此外,如果响应体在重定向链中的任何位置返回,它也会包含在 curl_exec() 的返回值中。

    所以你可以收到类似的东西:

    HEADER 1
    HEADER 2
    BODY 2
    

    HEADER 1
    HEADER 2
    BODY 2
    HEADER 3
    BODY 3
    

    请注意这一点,以防您只需要上次重定向的响应标头和正文。您需要手动从以前的重定向中剥离标题和正文。

    【讨论】:

      【解决方案2】:

      您正在查看三个不同的请求,每个请求都有自己的一组标头。第一个 URL 重定向到第二个,第二个重定向到第三个。您的浏览器必须下载三个页面才能获得登录页面的最终内容。他们为什么这样做呢?主要是忽略这增加了用户体验的额外延迟。根据 URL,这是出于某种用户跟踪或统计目的,对于他们来说,强制浏览器在其网站上的所有内容可能比直接返回内容更容易。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-22
        • 2012-12-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多