Почему Chrome отменяет 302 загрузки? - PullRequest
1 голос
/ 04 ноября 2011

Редактировать: После устранения некоторых проблем, которые могли вызывать или не вызывать проблемы, дальнейшее тестирование показало, что затронутые пользователи не могут загружать файлы, даже напрямую. Это вызвало этот вопрос на веб-мастерах Stackexchange . Я принимаю ответ, который, вероятно, устранил проблему, если бы все это было связано с перенаправлением.


У меня есть скрипт , который обрабатывает загрузки для моего видео-сайта на основе подписки. По сути, сценарий проверяет сеанс и / или IP для базы данных, чтобы идентифицировать пользователя, а затем проверяет запрошенный видеофайл для базы данных, чтобы убедиться, что пользователь должен иметь доступ. На основании результатов этих проверок сценарий использует header('location: [blah]'); для отправки пользователя в файл или для отправки его на страницу ошибки.

Все отлично работает в IE, Firefox и некоторых экземплярах Chrome. В других случаях Chrome пользователи видят сбой загрузки полностью. Я обнаружил, что для этих пользователей Chrome автоматически отменяет перенаправление 302, сделанное вызовом header();, предотвращая загрузку файла.

Почему это происходит? Что я могу с этим поделать?


Редактировать: Вот необработанные заголовки, как видно из Fiddler на машине, которая не удалось загрузить.

Запрос:

GET /download_video.php?t=Nodeg004&format=wmv HTTP/1.1
Host: www.mysite.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.106 Safari/535.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Referer: http://www.mysite.com/phpBB3/viewtopic.php?f=3&t=6847
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: phpbb3_cmviy_u=698; phpbb3_cmviy_k=; phpbb3_cmviy_sid=0c2fd249ff50c922beb1c7f88437c283; style_cookie=printonly; __utma=174624884.1269868282.1272079241.1320418809.1320423695.199; __utmb=174624884.5.10.1320423695; __utmc=174624884; __utmz=174624884.1319811247.179.134.utmcsr=facebook.com|utmccn=(referral)|utmcmd=referral|utmcct=/l.php

Ответ:

HTTP/1.1 302 Moved Temporarily
Date: Fri, 04 Nov 2011 16:22:05 GMT
Server: Apache
location: http://www.mysite.com/videos/zh4ZcnzIWJpni8tG5CzG/Nodeg004.wmv
Content-Length: 0
Connection: close
Content-Type: text/html

Запрос:

GET /videos/zh4ZcnzIWJpni8tG5CzG/Nodeg004.wmv HTTP/1.1
Host: www.mysite.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.106 Safari/535.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Referer: http://www.mysite.com/phpBB3/viewtopic.php?f=3&t=6847
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: phpbb3_cmviy_u=698; phpbb3_cmviy_k=; phpbb3_cmviy_sid=0c2fd249ff50c922beb1c7f88437c283; style_cookie=printonly; __utma=174624884.1269868282.1272079241.1320418809.1320423695.199; __utmb=174624884.5.10.1320423695; __utmc=174624884; __utmz=174624884.1319811247.179.134.utmcsr=facebook.com|utmccn=(referral)|utmcmd=referral|utmcct=/l.php

Ответ:

HTTP/1.1 200 OK
Date: Fri, 04 Nov 2011 16:22:05 GMT
Server: Apache
Last-Modified: Wed, 28 Sep 2011 13:28:50 GMT
ETag: "180cc25a-5700e91-4ae005f5ce880"
Accept-Ranges: bytes
Content-Length: 91229841
Keep-Alive: timeout=10, max=30
Connection: Keep-Alive
Content-Type: application/octet-stream

Ответы [ 2 ]

4 голосов
/ 05 ноября 2011

Весьма удивительно, что проблема заключается в том, что вы отправляете заголовок «location» вместо стандартного заголовка «Location». Я провел быстрый тест, который, казалось, подтвердил это, но я все еще не мог поверить в это, поэтому я сделал быстрый поиск в Интернете и обнаружил кого-то еще , подтверждающего, что Chrome действительно такой обманщик, что он принять заголовок HTTP с неправильным регистром. комментарий в руководстве по PHP упоминает, что IE7 имеет ту же причуду.

1 голос
/ 05 ноября 2011

Как уже упоминалось в комментариях php.net и в моем ответе в стеке:

Chrome не выполняет инструкцию Location:, пока не получитСтатус: первый.Это также чувствительно к капитализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...