2011-01-31 6 views
15

내 JavaScript 애플리케이션은 의 길이를 결정해야을 Ajax로 다운로드해야합니다. 보통 이것은 문제가되지 않으며 HEAD 요청을하고 Content-Length의 압축을 풉니 다.크로스 도메인 Ajax 요청에서 Content-Length 헤더에 액세스하려면 어떻게해야합니까?

var xhr = $.ajax({type:"HEAD", url: "http://own-domain/file.html"}) 
xhr.getResponseHeader("Content-Length") 
// "2195" 

그러나 자원은 클라이언트와 다른 서버에 저장됩니다. (내가 제어하는 ​​서버). 따라서 CORS를 사용하여 교차 도메인 아약스 요청을하고 HEAD 요청에 대한 프리 플라이트 요청 및 사용자 정의 헤더가있는 GET/POST 요청에 응답하도록 서버를 설정했습니다.

주에 큰 노력하고 있습니다,하지만 난 CORS 작업 할 때 방법은 HEAD 응답에서 Content-Length를 추출 찾을 수 없습니다

:

var xhr = $.ajax({type:"HEAD", url: "http://other-domain/file.html"}) 
xhr.getResponseHeader("Content-Length") 
// ERROR: Refused to get unsafe header "Content-Length" 

나는 다양한 헤더를 설정 실험 한 프리 플라이트 (preflighting) 또는 응답 (예 :

Access-Control-Expose-Headers: Content-Length 

)이 제안하는 것으로 보이는 것이 좋습니다. 그러나 내가하는 일과 상관없이 클라이언트가 Content-Length 헤더를 사용할 수 있도록 만들 수는 없습니다. 어떤 제안?

(크롬 8) 나는 버그로 모든 브라우저에서 CORS 응답 헤더 지원을 발견했습니다

답변

3

. Chrome/Safari에서는 getAllResponseHeaders() 결과에 간단한 응답 헤더 (http://www.w3.org/TR/cors/#terminology) 만 표시됩니다.이 경우에도 "Access-Control-Exose-Headers"헤더 응답에 설정됩니다. 그리고 파이어 폭스 3.6.13에서 getAllResponseHeaders()는 아무것도 반환하지 않습니다 (간단한 응답 헤더조차도). 이 문제를 해결하기 위해 간단한 응답 헤더 중 하나에 콘텐츠 길이를 포함 시키면 다른 문제가 발생할 수 있으며 여전히 Firefox를 수정하지는 않습니다. 나는 내 htaccess로에이 줄을 추가 가르쳐 다른 곳에서 스레드를 찾을 때까지

+0

오른쪽. 웹킷 버그로 신고해야한다고 생각하십니까? –

+0

예. 먼저 검색을 시도해보십시오. 이전에 버그를 발견했다고 생각했지만 지금은 찾을 수 없습니다. – monsur

5

내가 같은 문제가되었다

Header add Access-Control-Expose-Headers "Content-Length" 

그런 붐, 그것은 고정되었다.

+0

자세한 내용은 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers를 참조하십시오. – broofa