JS大容量ファイルのアップロード

I.概要

 

いわゆるHTTPは、実際には、すでにダウンロードを継続するために開始する場所からダウンロードされたファイルをダウンロードするだけでいい。HTTPプロトコルの以前のバージョンでは、ブレークポイントをサポートしていません、HTTP / 1.1初めはサポートされています。レンジとContent-レンジエンティティヘッダをダウンロードするときにブレークポイントは、一般的に使用されます。HTTPプロトコル自体は、ブレークポイントのアップロードをサポートしていない、それは、独自の実装を必要とします。

 

二、レンジ 

 

リクエストヘッダは、最初のバイトの位置及びデータの最後のバイト、一般的なフォーマットを指定するために使用されます。

 

    範囲:クライアントは、サーバーが、ゼロからのオフセットのバイトをフィールドの変更に続いて、ダウンロードファイルのサイズの一定の期間を指定することができます要求します。典型的な形式:

    範囲:(単位=最初のバイトPOS) - [最後のバイトPOS]

    範囲:バイト= 4000- 4000バイトダウンロード第一の部分からファイルの最後まで

    範囲:バイト= 0〜Nダウンロードバイト範囲の0-N

    範囲:バイト= MN MNダウンロード最初のバイトの範囲

    範囲:バイト= -N最後のNは、ダウンロードされたコンテンツをバイト



 

1.次の点に注意する必要があります。

(1)このデータ・セクションは、開始値が0である、閉区間で、「範囲:バイト= 0-1」は、このような要求には、要求の開始バイト実際に2です。

(2)「範囲:バイト= -200」は、要求されたファイルの開始位置の201バイトを使用するのではなく、ファイルの終わりに200バイトの要求されません。

最後のバイトposは最初のバイトのposよりも小さい場合(3)は、その後、レンジ要求は無効な要求、200でレンジ要求と応答を無視するサーバーが必要で、ファイル全体がクライアントに送信されます。

(4)またはファイルの長さに等しく、その後Range要求を満たすと考えることができないよりも、最後のバイトPOS 416に応答するサーバの必要性、要求範囲充足されない場合。

 

2.例を説明します:

最初の500のバイトを表し:バイト= 0から499まで  

第500バイトを表し:バイト= 500-999  

最後の500のバイトを表します:バイト= -500  

範囲を超えて500バイト示す:バイト= 500-  

最初と最後のバイト:バイト= 0-0、-1  

いくつかの範囲を指定:バイト= 500-600,601-999 

 

三、コンテンツレンジ

 

応答頭、体全体の部分で指定された挿入位置は、彼はまた、エンティティ全体の長さを示します。サーバーのクライアント部分への応答を返し、それがスコープおよびカバレッジからの応答の全体的な物理的な長さを記述しなければなりません。一般的な形式: 

 

コンテンツ範囲:バイト(単位最初のバイトPOS) - [最後のバイトPOS] / [エンティティlegth] 

 

四、ヘッダーの例

 

ファイル全体をダウンロードするための要求: 

 

GET /test.rar HTTP / 1.1 

接続:近いです 

ホスト:116.1.219.219 

範囲:バイト= 0から801 //ファイル全体をダウンロードするための一般的な要求であるバイト= 0-またはヘッドなし

 

正常な応答 

 

HTTP / 1.1 200 OK 

コンテンツの長さ:801      

コンテンツタイプ:アプリケーション/オクテットストリーム 

コンテンツ範囲:合計ファイルサイズ:0〜800/801 // 801バイト

 

以下のような何かを達成するため、最も単純なHTTPのいずれか:

1. 1024Kクライアントが512Kをダウンロードされたファイルを、ダウンロードします

このセグメントを肯定する必要がある2.ネットワークの中断、クライアントの要求を再開し、そのためには、HTTPヘッダーを再開する必要があります。

範囲:バイト= 512000-

このヘッドの512Kの場所は、ファイルサーバ通知からのファイル転送を開始します

3. HTTPサーバは、ファイルの512K開始位置から送信された要求、およびHTTPヘッダの増加を受け取ります。

コンテンツレンジ:512000- / 1024000バイト

そして、この時点では、サーバーは、HTTPステータスコードが206ではなく200でなければなりません返します。

しかし、実際の場面では、文書の内容に対応する再開要求、URLがサーバー上で変更された端末を開始している状況があるだろう、それは確かに間違っているデータを再開します。どのようにこの問題を解決するには?明らかに、この時点で我々は、ファイルの一意性を識別するための方法を持っている必要があります。RFC2616は、対応する定義を有するでは、そのようなLast-Modifiedの識別されたファイルを達成するために、最終更新時刻として変更されており、それは、ファイルの再開と判断された場合には発生するかどうか。同時にまた、一意に配置ヘッドは、MD5値文書として、ETagのファイルを使用することができる識別するのETagのRFC2616ヘッダに存在定義されています。

ターミナルは、マッチした場合や変更 - 開始HTTPヘッダフィールドサーバファイルの変更を決定するのを助けるために、再開要求を開始するとき肯定すべきです。

端末が再開場合レンジを使用している場合、さらにRFC2616に、両方の場合レンジヘッダを定義しています。もし-Rangeの内容は、最初に頭やETagの最終-Modfied最終更新時刻を受け取ることができます。サーバ要求レジュームを受信すると、新しいファイルのすべてのコンテンツへの応答として、もしレンジ、一貫再開時に206を返すレスポンスをチェックし、一貫性のない応答サーバ200のリターンの内容によって検証されますデータ。


関連参照リンク:http://blog.ncmem.com/wordpress/2019/08/09/http%e6%96%ad%e7%82%b9%e7%bb%ad%e4%bc%a0/ 
に歓迎議論するグループ:374 992 201

おすすめ

転載: www.cnblogs.com/songsu/p/12587704.html