programing

XMLHttpRequest 206 부분 컨텐츠

i4 2023. 9. 8. 21:09
반응형

XMLHttpRequest 206 부분 컨텐츠

자바스크립트로 XMLHttpRequest 객체에서 부분적인 컨텐츠 요청을 발행하고 싶습니다.서버에서 대용량 바이너리 파일을 로드하고 있는데, html5 비디오 처리 방식과 비슷하게 서버에서 스트리밍하고 싶습니다.

setRequest를 사용할 수 있습니다.Range 헤더를 설정하는 헤더.Chrome의 Network inspector는 Range 헤더가 성공적으로 설정되었음을 보여줍니다.그러나 Accept-Encoding 헤더는 "gzip, deflate"로 설정되어 있으며, Chrome은 (W3C 표준에서) 해당 헤더를 설정할 수 없습니다.

자바스크립트에서만 XMLHttpRequest 객체의 206 부분 콘텐츠로 서버가 응답하도록 강제할 수 있는 방법이 있습니까?

이 범위 요청은 저에게 잘 작동합니다: http://jsfiddle.net/QFdU4/

var xhr = new XMLHttpRequest;

xhr.onreadystatechange = function () {
  if (xhr.readyState != 4) {
    return;
  }
  alert(xhr.status);
};

xhr.open('GET', 'http://fiddle.jshell.net/img/logo.png', true);
xhr.setRequestHeader('Range', 'bytes=100-200'); // the bytes (incl.) you request
xhr.send(null);

하지만 서버가 범위 요청을 허용하는지 확인해야 합니다.컬로 테스트할 수 있습니다.

$ curl -v -r 100-200 http://example.com/movie.mkv > /dev/null

206 요청이 왜 안 되는지 알 수 있었던 것 같습니다.gzip 압축이 활성화된 상태에서 송신 데이터를 gzip할 수 있는 경우 범위 헤더는 무시됩니다.

제가 요청한 파일은 대용량 바이너리 파일로 nginx는 mimype application/octet-stream으로 해석했습니다.이것은 지퍼가 열리는 밈 유형 중 하나입니다.파일 이름을 .png file type으로 변경하면 image/png mim type이 zip되지 않아 range request가 제대로 작동합니다.

이는 Accept-Encoding 헤더를 curl to identity로 설정하는 것도 범위 요청이 잘 작동하는 이유입니다.그러나 XHR에서 해당 헤더를 변경할 수는 없습니다.

해결책:서버에서 mimype 테이블을 변경합니다!

언급URL : https://stackoverflow.com/questions/15561508/xmlhttprequest-206-partial-content

반응형