2011-11-17 44 views
1

我使用捲曲寫一刮,我發現,很多頁面都包含多個重定向頭,如:多重定向頭

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 

正如你可以看到有兩個頭的「位置」指示。

我只是想知道他們爲什麼要這樣做。 僅包含一個頭文件是不夠的?

重定向的URL甚至不同, 那麼哪一個是「真正的」着陸頁?

謝謝。

回答

0

您正在查看三個不同的請求,每個請求都有自己的一組標題。第一個URL重定向到第二個,第二個重定向到第三個。您的瀏覽器必須下載三頁才能獲取目標網頁的最終內容。他們爲什麼這樣做呢?主要是忽視這增加了用戶體驗的額外延遲。根據這些網址,這是用於某種用戶跟蹤或統計目的,並且它們可能更容易迫使瀏覽器遍佈其網站,而不是直接返回內容。

1

當CURLOPT_FOLLOWLOCATION和CURLOPT_HEADER都爲真並且重定向發生時,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 

注意到這種情況下,你只需要在最後一個重定向響應報頭和身體。您需要手動剝離以前重定向中的標題和正文。