2014-05-21 5 views
0

REST api과 연결된 각도 앱으로 작업하고 있습니다.CORS 프리 플라이트는 200을 반환하지만 후속 PUT은 발생하지 않습니다. (외부 REST API를 사용하는 Angular JS)

내 GET 요청이 예상대로 작동하도록 액세스 제어를 설정했습니다. (브라우저는 프리 플라이트 OPTIONS 요청을 보낸 다음 GET을 실행합니다.)

그러나 PUT에 문제가 있습니다.

문제은 PUT의 경우 프리 플라이트 옵션이 정상으로 돌아가는 것으로 보이지만 PUT은 절대 실행되지 않습니다.

먼저 무엇이 작동하고 무엇이 실패하는지 보여줍니다. 나는 전화를 찰스에게 찰스를 사용하고 있습니다. (작동)


GET

1) 플라이트 요청

OPTIONS /v1/account HTTP/1.1 
Host api.mysite.com 
Access-Control-Request-Method GET 
Origin http://127.0.0.1:9000 
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 
Access-Control-Request-Headers accept, authorization 
Accept */* 
Referer http://127.0.0.1:9000/ 
Accept-Encoding gzip,deflate,sdch 
Accept-Language en-US,en;q=0.8 

2) 플라이트 응답

HTTP/1.1 200 OK 
Server nginx/1.6.0 
Date Wed, 21 May 2014 15:43:25 GMT 
Content-Type application/octet-stream 
Content-Length 0 
Connection keep-alive 
Access-Control-Allow-Origin * 
Access-Control-Allow-Methods * 
Access-Control-Allow-Headers Origin, X-Requested-With, Content-Type, Accept, Authorization, WWW-Authenticate, X-BLURR-DEBUG 
Access-Control-Allow-Credentials true 

3) GET 요청

GET /v1/account HTTP/1.1 
Host api.mysite.com 
Accept application/json, text/plain, */* 
Origin http://127.0.0.1:9000 
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 
AUTHORIZATION DFHD8D... 
Referer http://127.0.0.1:9000/ 
Accept-Encoding gzip,deflate,sdch 
Accept-Language en-US,en;q=0.8 
작동하지

4) GET 응답

{ some json as expected } 

PUT() 이제

는 여기 괜찮 프리 플라이트 응답을 반환하는 것 같다하지만, PUT 요청에 도달 결코 PUT입니다 :

1) 플라이트 요청

OPTIONS /v1/account HTTP/1.1 
Host api.mysite.com 
Access-Control-Request-Method PUT 
Origin http://127.0.0.1:9000 
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 
Access-Control-Request-Headers accept, authorization, content-type 
Accept */* 
Referer http://127.0.0.1:9000/ 
Accept-Encoding gzip,deflate,sdch 
Accept-Language en-US,en;q=0.8 
,

2) 프리 플라이트 응답

HTTP/1.1 200 OK 
Server nginx/1.6.0 
Date Wed, 21 May 2014 15:51:41 GMT 
Content-Type application/octet-stream 
Content-Length 0 
Connection keep-alive 
Access-Control-Allow-Origin * 
Access-Control-Allow-Methods * 
Access-Control-Allow-Headers Origin, X-Requested-With, Content-Type, Accept, Authorization, WWW-Authenticate, X-BLURR-DEBUG 
Access-Control-Allow-Credentials true 

문제

PUT에 대한 프리 플라이트 반응이 좋아 것 같다, 그래서 브라우저가 실제를 전송하지 왜 모르겠어요 PUT 요청.

어떤 도움이나 지침이 좋을 것입니다! 고맙습니다.

답변

2

* (별표)는 Access-Control-Allow-Methods 헤더의 유효한 값이 아닙니다. 실제 방법을 나열해야합니다 (예 : GET, PUT). 프리 플라이트 응답이 서버에서 성공했지만 브라우저가 여전히 프리 플라이트를 거부하고 실제 요청을 보내지 않은 것 같습니다. 브라우저의 콘솔 로그에서 오류가 있는지 확인하십시오.

관련 문제