2

ownCloud 용 Firefox OS 클라이언트를 개발 중입니다. 로그인하여 사용자 자격 증명을 서버에 보내려고하면 각 요청에서 ownCloud에서 인증하는 데 사용할 쿠키를 응답으로 얻어야합니다.XMLHttpRequest를 사용하여 302 리디렉션 후 쿠키 관리

내 문제는 Wireshark에서 보았 듯이 HTTP 302 메시지로 쿠키가 전송되지만 Firefox가 자동으로 처리하고 쿠키없이 최종 HTTP 200 메시지를 읽으므로 내 메시지에서이 메시지를 읽을 수 없습니다.

request.reponseText; 
request.getAllResponseHeaders(); 

정보는 그래서 내 질문이 HTTP 302 메시지 헤더를 읽을 수있는 방법이되는 경우, 또는 내가 파이어 폭스 OS에서 쿠키를 얻을 수 있다면 나는 파이어 폭스 OS를 만들 경우에도 다음 요청을 보내거나하기 전에 자동으로 쿠키를 추가하십시오. 내가 POST를 만들기 위해 다음 코드를 사용

request = new XMLHttpRequest({mozSystem: true}); 
request.open('post', serverInput, true); 
request.withCredentials=true; 
request.addEventListener('error', onRequestError); 
request.setRequestHeader("Cookie",cookie_value); 
request.setRequestHeader("Connection","keep-alive"); 
request.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 

request.send(send_string); 
if(request.status == 200 || request.status==302){ 
    response = request.responseText; 
    var headers = request.getAllResponseHeaders(); 
    document.getElementById('results').innerHTML="Server found"; 
    loginSuccessfull(); 
}else{ 
    alert("Response not found"); 
    document.getElementById('results').innerHTML="Server NOT found"; 
} 

답변

0

"mozAnon

부울 :.이 플래그를 true로 설정하면 자원을 가져올 때 브라우저가 기원과 사용자 자격 증명을 노출하지 않는 원인이됩니다 가장 중요한 것은,이 명시 적으로 setRequestHeader를 사용하여 추가하지 않는 한 쿠키가 전송되지 않습니다 것을 의미

mozSystem

부울 :.. 참으로이 플래그를 설정하면 선택 기능에 대한 CORS를 사용하여 서버를 필요로하지 않고 사이트 간 연결을 할 수 있도록 R mozAnon : true를 설정하는 것과 동일합니다. 즉, 쿠키 또는 다른 사용자 자격 증명을 전송하는 것과 결합 할 수 없습니다. "[0]

독자가 클라우드 개발자인지 여부는 확실하지 않지만 서버에서 CORS 헤더를 설정해야합니다. [1] 프록시 서버를 사용하여 CORS를 사용할 수있는 프록시 서버에 앱을 연결할 수 있습니까?

xhr 개체의 인스턴스에 설정할 수있는 withCredentials 속성 [2]이 있습니다. Access-Control-Request-Headers: "cookies" 헤더를 추가하고 프리 플라이트 [3] 인 HTTP OPTIONS 요청을 보내는 것처럼 보입니다. 따라서 여전히 CORS에 대한 서버 측 지원이 필요합니다. [4]

는 다음과 같이 보이지만해야하지, 내가 요청 및 응답 헤더 시뮬레이터에서이 작업을 실행하고 볼 수 있었다 [5] 내부 의견에 따라 작동 :

var x = new XMLHttpRequest({ mozSystem: true }); 
x.open('get', 'http://stackoverflow.com'); 
x.onload = function() { console.log(x.getResponseHeader('Set-Cookie')); }; 
x.setRequestHeader('Cookie', 'hello=world;'); 
x.send(); 

을 당신 ' 응답 헤더가 존재하는 경우 onload 이벤트에서 document.cookie를 다시 할당하려고합니다. 모든 요청에서 모든 사이트가 쿠키를 설정하지는 않습니다. 또한 요청 헤더를 document.cookie 자체로 설정하려고합니다.

[0] https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#XMLHttpRequest%28%29

[1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

[2] https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#Properties

[3] https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests

[4] http://www.html5rocks.com/en/tutorials/cors/#toc-making-a-cors-request

[5] https://bugzilla.mozilla.org/show_bug.cgi?id=966216#c2