서버로부터의 대상 URL을 가지고 있으며 브라우저에 Ajax
을 통해 Chrome
브라우저를 통해 특정 쿠키가있는 매개 변수를 보내려고합니다. 대상 URL (I 어떤 변경 설정에 대한 서버에 액세스 할 수 또는에서 스크립트를 변경하지 마십시오)의 서버의사용자 정의 쿠키가있는 Ajax 요청을 다른 도메인으로 보냅니다.
응답 헤더 :
Cache-Control:max-age=600, private, must-revalidate
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:keep-alive
Content-Encoding:gzip
Content-Length:6821
Content-Type:text/html
Date:Thu, 16 Nov 2017 22:50:17 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Pragma:no-cache
Server:Apache
Vary:Accept-Encoding
X-Powered-By:PHP/5.5.38
내가 그것을 시작!
먼저 테스트 액세스를 위해 CURL
을 시도합니다.
curl 'http://www.foo.com/bar.php' \
-H 'Cookie: PHPSESSID=vjjuo34g4gh46ajd471lt8pvn7;' \
--data 'x=1&y=2' --compressed -s
PHPSESSID
쿠키가 전송됩니다 만 중요 : 서버 액세스에 대한 필요가 특정 헤더를 설정 할 필요가 없기 때문에이 작동합니다.
응답 : 정확하고 액세스 할 수 있습니다.
지금 내가하려고 Ajax와 로컬 크롬 브라우저 :
Failed to load http://www.foo.com/bar.php : No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' http://localhost:8888 ' is therefore not allowed access.
참조 :
나는 다음과 같은 오류 메시지가 나타납니다
$.ajax({
type: "POST",
ContentType: "application/json; charset=UTF-8",
dataType: "json",
data: {x : '1', y: '2'},
url: 'http://www.foo.com/bar.php',
complete: function(data) {
console.log('RESPONSE TEXT>>>>>>>>', data.responseText);
}
});
Allow-Control-Allow-Origin
크롬 확장 프로그램을 활성화하고 다시 실행합니다.
이번엔 작동합니다. 그러나 쿠키가 전송되지 않으므로 액세스 할 수 없습니다.
응답 : 잘못되어 액세스 할 수 없습니다.
Ajax 요청 헤더에 쿠키를 추가
beforeSend : function(xhr) {
xhr.setRequestHeader('Cookie', 'PHPSESSID=vjjuo34g4gh46ajd471lt8pvn7;');
},
쿠키가 설정되고 오류가 콘솔에 표시되지 않습니다, 오류 :
Refused to set unsafe header "Cookie"
응답 : 올바르지 않으며 액세스 할 수 없습니다.
우리는 우리가 쿠키를 추가 할 수 있도록 Ajax 요청이 추가 : 어떤 일이 것은 나의 선호하는 쿠키가 설정되지 않는 것입니다
xhrFields: {
withCredentials: true,
},
. 그러나 미리 구성된 쿠키는 요청 된 도메인에 대한 내 도메인으로 설정됩니다.
(이 쿠키는 문제가 아닌 쿠키라고 가정합니다.)
그러나 다음과 같은 메시지가 콘솔에 나타납니다 시간 :
Failed to load http://www.foo.com/bar.php : The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. Origin ' http://localhost:8888 ' is therefore not allowed access. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.
응답 : 올바른,하지만 EMPTY 반환! 왜?!
당신은 요청이 필요했다 쿠키를 포함 것을 알 수있다. 그러나 data.responseText
및 JavaScript에서 정확한 응답을받지 못했습니다.
그러나 Developer Tools> Network> Response
응답 텍스트가 올바르게 표시되는 것은 이상한 일입니다.
왜 이런 일이 발생하며 결국 위 이미지의 CURL
요청과 같은 올바른 응답을 얻을 수 있습니까?
편집 :
출력 명령 console.log(data)
의. 참조 :
이번에 빨간색 메시지가 변경된 것 같습니다. 또한 응답 데이터를로드 할 시간이없는 것처럼 보입니다. Response
크롬 탭!
'dataType와 :이 항목에 대한 자세한 정보가 필요하면
내가 당신에게이 사이트 추천 "JSON"을'아약스 자동 객체에 JSON 응답을 구문 분석합니다. console.log (데이터)를 가지고 무엇을 가지고 있는지보십시오. – Taplar
은 CORS를 우회하는 것이 ** 서버에서 CORS를 올바르게 사용하는 것보다 훨씬 어렵습니다. ** –
PHP에서 cors를 활성화하는 데 유용한 리소스 https://stackoverflow.com/a/9866124/1175966 – charlietfl