2016-10-05 6 views
0

파일을 찾으면 요청을 임시 다운로드 링크로 리디렉션하는 Box API를 사용하여 클라이언트 측 JavaScript에서 파일을 다운로드하려고합니다. 브라우저가 리디렉션을 차단하고 있지만 다음 오류가 발생합니다.CORS 요청 리디렉션 실패

XMLHttpRequest는 https://api.box.com/2.0/files/file-id/content을로드 할 수 없습니다. 요청이 'https://dl.boxcloud.com/d/1/some-big-hash/download'(으)로 리디렉션되었습니다. 프리 플라이트가 필요한 교차 출처 요청에는 허용되지 않습니다.

네트워크 콘솔에서 나는 첫 번째로 OPTIONS (실제 코드는 GET을 전송하기 때문에 비행해야 함)와 200 응답을 가진 두 번째 요청을 볼 수 있습니다. 302'd (해당 API 호출에 대한 예상 응답)를 얻습니다.

내 질문은 (a)는
var xhr = new XMLHttpRequest(); 
xhr.open('GET', url); 
xhr.setRequestHeader('Authorization', 'Bearer '+MyToken); 
xhr.onload = function() 
{ 
    //some stuff 
} 
xhr.onerror = function() 
{ 
    //some other stuff 
} 
xhr.send(); 

: 왜 두 가지가 프리 플라이트 후 전송되는 가져옵니다 돌아 오면 여기에 요청을 만드는 코드는? (b) : 리디렉션을 따르도록 요청을 형식화 할 수있는 방법이 있습니까? (c) 그렇지 않은 경우 최소한 응답에서 리디렉션 URL을 검색하고 다른 명시 적 요청을 따라갈 수 있습니까? 콘솔의 모든 응답에는 올바른 출처로 설정된 'Access-Control-Allow-Origin'헤더가 있습니다. 두 개의 요청보다는 세를 얻을 이유

감사

+0

'두 번째 두 개는 동일한 GET 요청입니다. '- 모든 것이 동일합니까? –

+0

@ Maximus 요청/응답 헤더가 동일하지만 Chrome 네트워크 콘솔의 '개시 자'열에서만 볼 수있는 유일한 차이점이 있습니다. 하나는 "https://api.box.com/2.0/files/file_id/content"(초기 요청이 전송 된 URL)이고 다른 하나는 "기타" –

+0

이고 URL은 동일한 것으로 나타 났습니까? –

답변

1

는 이해가 안하지만, CORS가 지금까지 작업 한 방법은 프리 플라이트와 요청이 리디렉션 할 수 없다는 것입니다. 이는 Fetch Standard에서 변경되었지만 사용자 에이전트는 아직 변경 사항을 선택하지 않았습니다.

+0

처음부터 프리 플라이트가 필요한 이유는 무엇입니까? '인증'이 맞춤 헤더로 간주됩니까? –

+1

예, 직접 설정하면 확실히 가능합니다. https://fetch.spec.whatwg.org/#cors-safelisted-request-header에는 프리 플라이트가 필요없는 헤더의 수신 허용 목록이 있습니다. – Anne