メディア ファイルをダウンロードできる PHP スクリプトがあります。Android OS で URL 経由でアクセスしてこのスクリプトを実行すると、apachelog に 2 つのヒットが表示されます。
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」を変更してダウンロードを機能させた場合にのみ2回表示されます.2回のヒットのために、ダウンロードは実際にはAndroid携帯では機能しません. しかし、それが私の本当の問題です。これらのヘッダーを変更しないと、もちろんダウンロードできません! しかし、Apache アクセスログには 1 つのヒットしか表示されません。
他のヘッダー (Pragma: public、Expires: 0、Cache-Control: Public、Content-Transfer-Encoding: binary、Content-Length など) を変更しようとしましたが、1 回だけヒットしました。上記の両方のヘッダーに対してのみ 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
その愚かな機能をバイパスする方法がわからない