2012-09-03 2 views
2

ajax CORS 요청에 문제가 있습니다. 다른 브라우저에서는 작동하지만 Firefox는 인증 헤더를 보내지 않습니다.자격 증명이있는 jQuery CORS는 Chrome에서만 작동합니다.

을 heres 따라 코드

$.ajax(
{ 
    type: "GET", 
    url: 'http://www.urlhere.com/file.php', 
    crossDomain: true, 
    xhrFields: { withCredentials: true }, 
    headers: { 'Authorization': 'Basic .....' }, 
    error: function(data,error,errormsg) { 
    $('#serverTestLog').html('<h3><span style="color: red">' 
     + error + '</h3></span><p>'+errormsg+'</p>'); 
    }, 
    success: function(data) { 
     $('#serverTestLog').html('<h3><span style="color: green">success</h3>'); 
    } 
    }); 

문제는 크롬 실제로 요청과 함께 인증 헤더를 전송하는 유일한 브라우저입니다 것 같다. 파이어 폭스로 시도해 보면 사용자 이름과 비밀번호를 물어 보는 중이고 헤더가 올바르게 설정된 새 요청이 시작되지만 사용자 상호 작용없이이 작업을 수행하려고합니다.

는 또한

usename: 'username', 
password: 'password',   

headers: { 'Authorization': 'Basic .....' }, 

교체 교체하려고하지만 크롬은 여전히 ​​요청에서 인증 헤더를 전송하는 유일한 브라우저입니다. 이번에 Firefox가 요청을 종료합니다

NetworkError: 401 Authorization Required" without asking for username and password.

아무도 제가 이것을 해결할 수있는 아이디어가 있습니까?

답변

0

withCredentials 요청을 보내므로 실제 요청 전에 프리 플라이트 요청이 이루어집니다. 프리 플라이트 OPTIONS 요청에는 사용자 자격 증명 per the CORS spec이 포함되지 않습니다.

OPTIONS 요청은 대부분 401에 응답하며 Firefox가 올바르게보고합니다.

프리 플라이트 후의 후속 요청 인해 401

에 어쨌든 OPTIONS 요청이 실패하는 경우에도 전송된다 ChromeWebKit 오픈 버그있다
관련 문제