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
'programing' 카테고리의 다른 글
Angular 2에서 관측 가능한 장치 테스트 (0) | 2023.09.08 |
---|---|
Python에서 syslog에 대한 로깅을 구성하는 방법은 무엇입니까? (0) | 2023.09.08 |
powershell Get-ChildItem 여러 개 주어진 -Filters (0) | 2023.09.08 |
Twitter 부트스트랩 드롭다운이 화면 밖으로 바뀝니다. (0) | 2023.09.08 |
문자 입력 요소 내부의 글꼴 멋진 아이콘 (0) | 2023.09.08 |