Несколько заголовков перенаправления - PullRequest
1 голос
/ 17 ноября 2011

Я пишу скребок, используя 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-адреса перенаправления даже отличаются, Итак, какая из них является "настоящей" целевой страницей?

Спасибо.

Ответы [ 2 ]

1 голос
/ 28 января 2013

Когда CURLOPT_FOLLOWLOCATION и CURLOPT_HEADER оба имеют значение true и произошло перенаправление / s, ответ, возвращаемый 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

Примите это к сведению, если вы хотите, чтобы заголовок и тело ответа были только от последнего перенаправления. Вам необходимо вручную удалить заголовки и тела из предыдущих перенаправлений.

0 голосов
/ 17 ноября 2011

Вы смотрите на три разных запроса, каждый из которых имеет свой собственный набор заголовков. Первый URL-адрес перенаправляет на второй, а второй - на третий. Ваш браузер должен загрузить три страницы, чтобы получить окончательный контент целевой страницы. Почему они это делают? Не обращая внимания на дополнительную задержку, это, в основном, повышает удобство работы пользователя. Основываясь на URL-адресах, это для какой-то цели отслеживания пользователей или статистики, и им, вероятно, легче заставить браузер на всем их сайте, чем возвращать контент напрямую.

...