Редактирование. После решения некоторых проблем, которые могут возникнуть или не возникли проблемы, дальнейшее тестирование показало, что затронутые пользователи не могут загружать файлы, даже напрямую. Это вызвало этот вопрос на веб-мастерах 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
Скорее удивительно, проблема заключается в том, что вы отправляете заголовок «location» вместо стандартного заголовка «Местоположение». Я сделал быстрый тест, который, казалось, подтвердил это, но я все еще не мог в это поверить, поэтому я сделал быстрый поиск в Интернете и обнаружил, что кто-то еще подтверждает, что Chrome действительно такой приверженец, что он не будет принимать HTTP-заголовок с неправильный случай. В комментарии к руководству PHP упоминается IE7 с тем же причудой.
Как упоминалось в комментариях php.net и моем ответе на stackoverflow:
Chrome не выполняет команду Location: если он не получает статус: сначала. Он также чувствителен к капитализации.