VUE 큰 파일의 재개를 해결

I. 개요

 

소위 HTTP, 사실, 이미 계속 다운로드를 시작하는 곳에서 다운로드되는 파일을 다운로드하는 경우에만 의미합니다. 브레이크 포인트를 지원하지 않는 HTTP 프로토콜의 이전 버전에서는 HTTP / 1.1 지원 시작. 범위 및 내용-범위 엔티티 헤더를 다운로드 할 때 중단 점은 일반적으로 사용. 자체가 중단 점 업로드를 지원하지 않는 HTTP 프로토콜은, 그것의 구현을 필요로한다.

 

두, 범위 

 

요청 헤더는 첫번째 바이트와 데이터의 마지막 바이트의 일반 포맷의 위치를 ​​지정하는 데 사용된다 :

 

    범위 : 클라이언트는 다운로드 파일 크기의 일정 기간을 지정할 수있는 서버 필드, 0에서 바이트 오프셋을 변경하여 다음에 요청합니다. 일반적인 형식 :

    범위 (단위 : 첫번째 바이트를 POS =) - [마지막 바이트 POS]

    범위 : 4000- 바이트 = 4000 바이트 파일의 끝에 제 1 부분에서 다운

    범위 : 바이트 = 0 ~ N 다운로드 바이트 범위의 0-N

    범위는 : 바이트 = MN MN은 첫 번째 바이트 범위를 다운로드

    범위 : 바이트 = -N 마지막 N은 다운로드 콘텐츠 바이트



 

1. 다음 사항에 유의해야한다 :

(1)이 데이터 부는 폐쇄 구간이 시작 값은 "거리 : 바이트 = 0-1"0 요청의 처음 2 바이트가 실제로 그러한 요청이다.

(2) "거리 : 바이트 = -200", 요청 된 파일 시작 위치의 201 바이트를 사용하는 것이 아니라 오히려 파일의 마지막 200 바이트 요청.

마지막 바이트 pos가 첫 번째 바이트의 POS보다 작은 경우 (3), 그 범위 요청이 유효하지 않은 요청, 200로 범위 요청 및 응답을 무시하는 서버가 필요하고, 전체 파일을 클라이언트로 전송됩니다.

(4) 또는 파일의 길이와 동일, 다음 범위 요청이 충족 된 것으로 간주 될 수있는 것보다 마지막 바이트 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      

콘텐츠 형식 : 응용 프로그램 / octet-stream을 

콘텐츠 범위 : 전체 파일 크기 : 0-800 / 801 // 801 바이트


뭔가를 달성 가장 간단한 HTTP 중 하나

1. 1024K 클라이언트는 512K 다운로드 된 파일을 다운로드

2. 네트워크 중단, 클라이언트 요청을 다시 시작, 따라서 다시 시작이 세그먼트의 요구를 긍정하는 데 필요한 HTTP 헤더 :

범위 : 바이트 = 512000-

이 머리의 512K 위치는 파일 서버 알림에서 파일을 전송 시작

3. HTTP 서버는 파일의 512K 시작 위치에서 전송 된 요청과 HTTP 헤더의 증가를받습니다

콘텐츠 범위 : 512000- / 1,024,000 바이트

그리고이 시간에 서버가 반환은 HTTP 상태 코드 206 대신 200이어야한다.

但是在实际场景中,会出现一种情况,即在终端发起续传请求时,URL对应的文件内容在服务端已经发生变化,此时续传的数据肯定是错误的。如何解决这个问题了?显然此时我们需要有一个标识文件唯一性的方法。在RFC2616中也有相应的定义,比如实现Last-Modified来标识文件的最后修改时间,这样即可判断出续传文件时是否已经发生过改动。同时RFC2616中还定义有一个ETag的头,可以使用ETag头来放置文件的唯一标识,比如文件的MD5值。

终端在发起续传请求时应该在HTTP头中申明If-Match 或者If-Modified-Since 字段,帮助服务端判别文件变化。

另外RFC2616中同时定义有一个If-Range头,终端如果在续传是使用If-Range。If-Range中的内容可以为最初收到的ETag头或者是Last-Modfied中的最后修改时候。服务端在收到续传请求时,通过If-Range中的内容进行校验,校验一致时返回206的续传回应,不一致时服务端则返回200回应,回应的内容为新的文件的全部数据。


相关参考链接:http://blog.ncmem.com/wordpress/2019/08/09/http%e6%96%ad%e7%82%b9%e7%bb%ad%e4%bc%a0/

추천

출처www.cnblogs.com/songsu/p/12048700.html