問題タブ [http-range]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1690 参照

http - 長さが不明なファイルを再開するための Content-Range

すでに圧縮されている既存の素材 (Node を使用) から長さ不明の ZIP アーカイブをオンザフライで作成します。ZIP アーカイブでは、ファイルが保存されるだけです。ZIP は、単一のコンテナを持つためにのみ使用されます。そのため、作成された ZIP ファイルをキャッシュしても意味がありません。実際の計算は必要ありません。

これまでのところ、OK。ダウンロードの再開を許可したいので、Accept-Range、Range、および Content-Range HTTP ヘッダーについて読んでいます。ダウンロードが壊れているクライアントは、次のように制限のない範囲を要求しますRange: bytes=8000000-

どう答えればいいですか?RFC 2616 § 14.16に従って、私の回答には Content-Range ヘッダーを含める必要があります。

byte-ranges-specifier 値 (セクション 14.35.1 を参照) とは異なり、byte-range-resp-spec は 1 つの範囲のみを指定する必要があり、範囲の最初と最後のバイトの両方の絶対バイト位置を含める必要があります。

したがって、「位置Xから始まるすべて」を送信することはできません。既知のサイズの一部のみを送信するか、事前に長さを計算して、送信された最後のバイトも指定する必要があります。どちらの考えも私の状況には都合が悪い。他に可能性はありますか?

0 投票する
3 に答える
4023 参照

c# - RangeFileContentResult と Ranged Request を使用したビデオ ストリーミング

ローカル DB からビデオをストリーミングすることを目的としたアプリケーションがあります。昨日、データを aRangeFileContentResultまたはRangeFileStreamResult成功せずに返そうとするのに多くの時間を費やしました。

つまり、これら 2 つの結果のいずれかとしてファイルを返すと、ビデオを正しくストリーミング (またはまったく再生) できないようです。

ブラウザからのリクエストは、次のヘッダーとともに送信されます。

応答が提供され、例としてこれらのヘッダーが提供されます。

ネットワーク トラフィックに関しては、部分的な結果に対して一連の 206 を取得し、最後に (フィドラーによると) 200 を取得しますが、これは正しいようです。Chrome のネットワーク タブはこれに同意せず、最初のリクエスト (常に 13 バイトで、これはハンドシェイクであると想定しています) に続いて、ステータスがキャンセルまたは保留になっているいくつかのリクエストが表示されます。私が理解している限り、これは多かれ少なかれ正しい、206 - キャンセル、206 - キャンセルなどですが、ビデオは再生されません。

結果をコントローラーから FileResult に切り替えると、ビデオが再生され、ダウンロードが完了する前に Chrome、IE10、および Firefox が再生を開始するように見えます (ストリーミングしているように少し感じますが、そうではないのではないかと思います)。

しかし、範囲の結果では、クロムまたはIEでは何も得られず、ビデオ全体がFirefoxで1回のドロップでダウンロードされます。

私が理解している限り、RangeFileContentResultダウンロードするバイトの範囲でクライアントへの応答を処理する必要があります(私の場合はそうではないようです。ファイル全体を取得するように指示するだけです(上記の応答で示されています))。そして、クライアントはそれに応答する必要がありますが、そうではないようです。

この分野で何か考えている人はいますか?具体的には:

a)RangeFileContentResultある範囲のバイトをクライアントに送り返す必要がありますか? b) クライアント側から要求されたバイトの範囲を明示的に制御する方法はありますか? c) をリクエストしたときにブラウザがビデオをまったくロードしない原因となる、ここで私が間違っている理由や何かがありますRangeFileContentResultか?

編集:私が見ているものを説明するのに役立つ図を追加しました:

RangedRequestImage

EDIT2:わかりました、プロットが厚くなります。RangedFile ガビンで遊んでいる間に、別のシステム テスト バージョンをプッシュする必要があり、以下のようにコントローラー アクションに「RangeFileContentResult」を残しました。

奇妙なことに、これは現在、Azure システム テスト環境では期待どおりに機能しているように見えますが、ローカル マシンではまだ機能していません。Azures IIS8 では問題なく動作するが、私のローカル 7.5 インスタンスでは動作しない IIS ベースの何かがあるのだろうか?

0 投票する
0 に答える
198 参照

python - スレッドによってバイト範囲が完了するとすぐにファイルチャンクをディスクに書き込む方法

これから続ける:https://codereview.stackexchange.com/questions/

リストにバイト数のデータを保持するとコストがかかり、システムのパフォーマンスが低下する可能性があることを発見したので、そのスレッドの範囲が完了したらすぐにデータをディスクに書き込む方が良いと思います。キューで終了する次のスレッドからの範囲のチャンクを書き込みます..

では、バイトの範囲がスレッドによって完了するとすぐにファイルチャンクをディスクに書き込む方法は?

0 投票する
2 に答える
2148 参照

php - PHP を使用した AES 128 ビット CTR 部分ファイル復号化

これは重複した投稿ではありません。なぜなら、私はどこを見ても答えが見つからないからです。その部分的な復号化について。満タンではない。

PHP についてはよく知っていますが、暗号化についてはほとんど知りません。暗号化されたファイルのキーと iv を知っています。ファイル全体は正常に復号化されていますが、途中から部分的なファイルを復号化しようとすると、実際の問題が発生します。

ファイルの最初の 128kb または 256kb またはファイルの先頭から任意の長さを復号化しようとすると、正常に復号化されます。しかし、途中から開始すると、復号化されず、意味不明な出力が得られます。

ファイルの最初の 100 バイトの例をここに投稿します。

暗号化は AES 128 ビット CTR モードです。

PHP の mdecrypt_generic 関数と mcrypt_decrypt 関数の両方を使用しましたが、成功しませんでした。

使用したコード:

結果:

ご覧のように。復号化後の結果は、数字の 1が連続して含まれるファイルの最初の 100 バイトです。ファイルは JavaScript を使用して Mega.co.nz によって暗号化されます。Mega のドキュメントによると、ファイルは部分的な暗号化/復号化のためにチャンクで暗号化されています。

ファイル暗号化

MEGA は、クライアント側の暗号化/復号化を使用して、ファイル転送とストレージをエンドツーエンドで保護します。クライアントから受信したデータは保存され、逐語的に送信されます。サーバーは、着信ユーザー ファイルの暗号化を復号化も再暗号化も検証もしません。すべての暗号化処理は、エンド ユーザーの管理下にあります。整合性がチェックされた部分読み取りを可能にするために、ファイルは一連のチャンクとして扱われます。サーバー側の処理を簡素化するために、部分アップロードはチャンク境界でのみ開始および終了できます。さらに、部分的なダウンロードは、同じ基準を満たす場合にのみ完全性をチェックできます。チャンク境界は、0 / 128K / 384K / 768K / 1280K / 1920K / 2688K / 3584K / 4608K / の位置にあります。(1024 KB ごと) / EOF

この関数を使用して、ファイルのチャンク境界を計算しています。

2 番目のチャンクを個別に復号化しようとしましたが、失敗します。明らかな理由で 128kb のチャンクをここに投稿することはできませんが、2 バイト目から 100 バイト目までのチャンクを示します。これは同じコードの結果です:

使用したコード:

結果:

結果は同じですmcrypt_module_open('rijndael-128', '', 'ctr', '');

並列接続/再開サポートをサポートする Mega 用のオープン ソース ダウンロード マネージャーをコーディングしようとしているため、ファイルを部分的に復号化する必要があります。

ファイルのストリーミングを許可するには、その場でファイルを復号化する必要があるため、ダウンロード後に復号化することは問題外です。

Mega の Web サイトでは、独自のダウンロード インターフェイスが複数の接続を使用し、ファイルをチャンクでダウンロードします。複数の接続を使用して Mega からダウンロードし、サポートを再開できる別の Web サービスがあります。

ブラウザ/ダウンロード マネージャからの HTTP Range ヘッダー リクエストをサポートするには、部分ファイルを復号化する必要があります。範囲要求が 2 番目または 3 番目のブロックに含まれる場合、最初からファイルを復号化せずに、そのブロックを復号化してクライアントに送信できる必要があります。

それは可能ですか?一部のWebサイトがすでにそれを行っているためです。

0 投票する
1 に答える
420 参照

restsharp - RestSharp リクエストに Range ヘッダーを追加できません

RestSharpを使用して次のリクエストを実行します

Fiddler を使用してリクエストを検査すると、Range を除くすべてのヘッダーが表示されていることがわかります。なんで?

ここに画像の説明を入力

0 投票する
1 に答える
93 参照

http - HTTP コンテンツ ネゴシエーションと Range ヘッダー

Rangeヘッダーはコンテンツ ネゴシエーションでどのように機能しますか? 説明させてください。まず最初に、次のことに同意しましょう。HTTP はステートレス プロトコルです。

HTTP サーバーが単一のリソースの複数の表現を送信できる場合、コンテンツ ネゴシエーションを使用して、どの表現を送信するかを決定します。クライアントが好み (つまり、英語と GIF) を示し、サーバーがそれに従うか、または -- 以下のシナリオでできません -- サーバーはヒューリスティックな評価を通じて、どの表現をクライアントに送信するかを選択します。

これまでのところは順調ですがRange、ミックスに投入するとどうなりますか?

次のシナリオを想像してください。

ジョンはパリの空港にいて、ブラウザが HTTP リクエストを送信します。何らかの理由で、彼のブラウザーは、コンテンツの種類、言語、および圧縮の設定を示しません。

通過するものがほとんどないため、サーバーはいくつかのヒューリスティックを使用して、URI のフランス語表現を送信することを決定します (IP はフランスからのものとして認識されます)。

転送の途中で、ジョンはフライトに間に合うようにダウンロードを停止します。John はニューヨークに到着すると、ダウンロードを再開します。

繰り返しになりますが、クライアントの好みに関する情報がほとんどないため、サーバーは今度は URI の英語表現を送信することを決定します (IP はニューヨークからのものとして認識されます)。

この時点で、ファイルの一部はフランス語で残りの部分は英語であるため、ファイルは破損しています。

推測:

  • クライアントは、最初の応答のコンテンツ タイプと言語を記憶して、2 番目の要求 ( の下) でその情報をサーバーに送り返すことができますAccept: text/html Accept-Language: fr。ただし、 RFC2616もRFC7233もこれに関して何も述べていないため (推奨事項でさえありません)、この動作を行う HTTP クライアントはまれであると思いますが、まだテストしていません。

ノート:

  • 上記のシナリオでは、クライアントにプリファレンスを送信させ、サーバーを準拠させることができず、他のヒューリスティックにフォールバックすることが簡単にできます。問題は解決しません。
  • 別の例として、この問題は別の SO の質問にも存在します: Sample http range request session

TL;DR

上記では、範囲は要求されたリソースのどの表現に適用されますか?!

0 投票する
2 に答える
71 参照

http - 範囲を使用したサービス拒否攻撃

https://www.rfc-editor.org/rfc/rfc7233#section-6.1 :

6.1. 範囲を使用したサービス拒否攻撃 ... サーバーは、特に範囲が要求された場合に、 2 つ以上の重複する範囲または単一のセット内の多くの小さな範囲の要求など、悪質な範囲要求を無視、合体、または拒否する必要があります。明らかな理由もなく秩序だった。マルチパート範囲要求は、ランダム アクセスをサポートするようには設計されていません。...

「1 つのセットに多くの小さな範囲」の定義はありますか?