Множественное попадание в accesslog apache с android (измененные заголовки http)
У меня есть PHP-скрипт, который позволяет скачивать медиа-файлы. Когда я запускаю этот скрипт, обращаясь к нему через URL с ОС Android, я вижу 2 обращения в apachelog:
192.168.xxx.xx - - [31/May/2012:15:30:57 +0100] "GET /myScript.php?myParams=myValues HTTP/1.1" 200 409632 "http://myReferer" "Mozilla/5.0 (Linux; U; Android 2.1-update1; fr-fr; HTC Desire 1.19.161.5 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17"
192.168.xxx.xx - - [31/May/2012:15:30:57 +0100] "GET /myScript.php?myParams=myValues HTTP/1.1" 200 409632 "http://myReferer" "Mozilla/5.0 (Linux; U; Android 2.1-update1; fr-fr; HTC Desire 1.19.161.5 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17"
Он появляется дважды, только если я изменяю заголовки http "Content-Disposition" или "Content-Type", чтобы загрузка работала, и, думаю, из-за двух совпадений загрузка фактически не работает на телефонах Android. Но это моя настоящая проблема: если я не изменю эти заголовки, конечно же, загрузки не будет! Но я вижу только одно попадание в мой доступ к Apache.
Я пытаюсь изменить другие заголовки (Pragma: общедоступный, Expires: 0, Cache-Control: Public, Content-Transfer-Encoding: двоичный, Content-Length и т. Д.) И снова только один удар. Он посылает 2 хита только для обоих заголовков, упомянутых выше.
Больше информации:
PHP version 5.2.4
Apache version 2.2
Tested with Android 2.2, 2.3.4, 4.0.x
Спасибо, если вы знаете, почему и объясняете мне, или просто рассказываете, как я могу заставить мою загрузку работать. Я занимаюсь этим с прошлой недели. Конечно, я погуглил это, и только старые ошибки с журналом apache от предыдущей версии, нет ничего похожего у меня сейчас.
Код PHP:
<?php
//$path is the absolute path of the file I want to download (dl)
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: " . getFileMIME($path)); //return "audio/mpeg" since I want to dl *.mp3
header('Content-Disposition: attachment; filename="' . $filename . '";'); //basename of my file
header("Content-Transfer-Encoding: binary");
header('Content-Length: ' . filesize($path));
readfile($path);
?>
РЕДАКТИРОВАТЬ: я понимаю, почему: Android отправить предварительную выборку, как Netscape несколько лет назад...
While pre-fetching of content is a great feature for most consumers, it does have its share of disadvantages.
If you have a tight data cap, the last thing you want is your browser to waste your bandwidth by loading pages you might not even want to visit.
It will also create headaches for webmasters by registering fake hits that will increase bandwidth and server resource consumption, besides messing up analytics.
Netscape had earlier experimented with pre-fetching, but it allowed the webmasters to be in control.
Source : http://techie-buzz.com/browsers/chrome-17-changes-review.html
Не знаю, как обойти эту глупую функциональность