1. まず私の使用シナリオについてお話します。つまり、クライアントはサーバーのインターフェイスを使用してファイルをダウンロードします。サーバー側はバイナリを直接取得して出力します。 echo binary以外にもっと合理的な戻り方法はありますか?
2. PHP header('Content-Length: '.strlen($Download)); を使用して Content-Length を設定します。論理的に言えば、http リクエスト自体が出力のサイズに応じて Content-Length を設定するためです。設定を変更した場合でも、最終的に要求された Content-Length は依然として実際のサイズに基づいています。
3. もう 1 つの問題は、10M ファイルのバイナリをリクエストしていることです。ブラウザでリクエストした場合、Content-Length ヘッダーはまったく返されません。クライアントからのリクエスト時には、Content-Length を正常に返すことができます。 Content-Lengthの返却もリクエストメソッドに関係するのでしょうか?
漂亮男人2017-05-16 13:00:51
ソースはバイナリ ストリームですか?
1. ファイルの場合は、実際のパスを非表示にするために、次の方法を試してください:
高効率readfile($filename)
比echo
テクノロジーX-SendFile
を使用する
X-SendFile
header
设置Content-Length
是有效的,返回真实的大小即可。这个在一些下载软件比较重要,比如迅雷。
它会检测最终大小是否符合Content-Length
で応答し、ブラウザはそれを受け入れます。 Content-Length
为参照,
但是当网络很糟糕的时候,超时、断流了,浏览器也会停止下载,最终得到的是一个不完整的文件,这个下载国外软件的时候很常见。
如果实际大小超过了Content-Length
が返されなくても、ブラウザはダウンロードできます。サーバーが切断されると、ブラウザはダウンロードを終了します。 Content-Length