検索

ホームページ  >  に質問  >  本文

http - PHP の content-length 設定の問題について。

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の返却もリクエストメソッドに関係するのでしょうか?

过去多啦不再A梦过去多啦不再A梦2800日前1154

全員に返信(1)返信します

  • 漂亮男人

    漂亮男人2017-05-16 13:00:51

    ソースはバイナリ ストリームですか?

    1. ファイルの場合は、実際のパスを非表示にするために、次の方法を試してください:

    高効率readfile($filename)echo

    または

    テクノロジーX-SendFileを使用する

    実際にバイナリ ストリームである場合は、最初にファイルにキャッシュしてから、それを試してみることもできます

    X-SendFile

    2、

    header设置Content-Length是有效的,返回真实的大小即可。这个在一些下载软件比较重要,比如迅雷。
    它会检测最终大小是否符合Content-Length

    3、ブラウザは

    で応答し、ブラウザはそれを受け入れます。 Content-Length为参照,
    但是当网络很糟糕的时候,超时、断流了,浏览器也会停止下载,最终得到的是一个不完整的文件,这个下载国外软件的时候很常见。
    如果实际大小超过了Content-Length

    4 なので、

    が返されなくても、ブラウザはダウンロードできます。サーバーが切断されると、ブラウザはダウンロードを終了します。 Content-Length

    返事
    0
  • キャンセル返事