2011-12-30 3 views
6

크로스 도메인 문제를 조사 중이므로 일부 REST 서비스 호출이 있습니다.도메인 간 AJAX REST 서비스 HTTP 헤더

Request URL: rest_url_on_other_domain 
Request Method:OPTIONS 
Status Code:200 OK 
Request Headers: 
Access-Control-Request-Headers:Origin, x-requested-with, content-type, accept 
Access-Control-Request-Method:POST 
Origin:http://localhost:8080 

Response Headers 
Access-Control-Allow-Headers:Content-Type, Accept 
Access-Control-Allow-Methods:GET, POST 
Access-Control-Allow-Origin:* 
Access-Control-Max-Age:1728000 
Cache-Control:no-cache, no-store 
Connection:keep-alive 
Content-Length:0 
Date:Fri, 30 Dec 2011 11:29:12 GMT 
Expires:-1 
Pragma:no-cache 
Server:nginx/1.0.2 

수 :> 헤더 탭 -이 내가 네트워크에서있어 무엇 헤더 필드 X가 요청한-에 의해 허용되지 않습니다 요청 액세스 제어가-헤더를 허용 : 크롬이 말했다 누군가가이 HTTP 헤더에 대해 설명합니까? 문제점 - 일부 헤더가 서버에서 실패하는지 확인하거나 클라이언트 측 (브라우저)에서 일부 헤더 검사가 실패에 실패합니다. 이 액세스 헤더에 대한 아이디어는 무엇입니까? 간단히 말하면서 자세히 설명해주십시오. 나머지는 내 스스로 배우게 될 것입니다. 미리 감사드립니다!

답변

11

당신이보고있는 것은 Cross-Origin Resource Sharing 프리 플라이트 요청입니다. 요청에 대한 요청 방법은 OPTIONS입니다. 이것은 브라우저가 실제 요청을 보내기위한 권한을 요청하기 위해 사용하는 요청입니다. 자세한 내용을 보려면 다음을 참조하십시오. http://www.html5rocks.com/en/tutorials/cors/

이 특별한 경우 브라우저는 머리글 (Access-Control-Request-Headers 헤더에 있음)을 요청하고 있습니다. 이에 대한 응답으로 Access-Control-Allow-Headers 헤더는 요청 된 모든 헤더를 포함해야합니다. 요청 된 헤더 이상인 경우 브라우저는 예외를 throw하지 않습니다. 이 예에서 응답 헤더는 다음과 같아야합니다.

Access-Control-Allow-Headers: Origin, x-requested-with, content-type, accept 

다른 모든 응답 헤더는 ok입니다. 서버가이 응답을 보내면 브라우저는 데이터에 대한 실제 요청 인 두 번째 요청을 보냅니다.

+1

하지만 요청을 프리 플라이트하는 아이디어는 무엇입니까?이 헤더에 대해 어떤 정보를 얻을 수 있습니까? 대화는 다음과 같습니다 : 프리 플라이트 요청 (Origin 헤더 - "어떤 도메인을 지원합니까?", x-requested-with - "XMLHttpRequests를 지원합니까?", ...), 프리 플라이트 응답에서 "예 "그들 모두에게 그런 비유를하는 것은 나쁘다. 그리고 브라우저가 실제 요청을 보낼 때 - 어떤 조건이 충족되는지 (mb 간단한 예). 고맙습니다! – EnTrERy

+1

프리 플라이트는 브라우저가 요청하는 프리 플라이트입니다 : "안녕하세요, 저는이 도메인에서이 HTTP 메소드를 사용하여 요청했습니다. 요청 헤더가 있습니다. 실제 요청을 보내면 멋지나요?" 그런 다음 서버는 Access-Control-Allow- * 헤더를 보내서 프리 플라이트 요청을 확인합니다. 간단한 OK 대신이 헤더를 사용하는 이유는 첫 번째 요청 후에 프리 플라이트 응답을 캐시 할 수 있기 때문입니다. 이렇게하면 모든 요청에 ​​대해 프리 플라이트를 발행 할 필요가 없어 대역폭을 절약 할 수 있습니다. – monsur

+1

자세한 설명을 부탁드립니다! – EnTrERy