2012-08-13 3 views
13

요청의 Origin 헤더 내용을 복사하는 Access-Control-Allow-Origin 헤더로 HTTP OPTIONS 메소드에 대한 응답을 제공하려고합니다.액세스 제어 허용 - 원본 헤더가 작동하지 않습니다 - 내가 뭘 잘못하고 있니?

내가 알아낼 수없는 이유로 이것은 분명히 작동하지 않습니다.

는 TL; DR : 옵션에서 응답은 말한다 :

Access-Control-Allow-Origin: http://10.0.0.105:9294 

이후의 GET가 있습니다

Origin:http://10.0.0.105:9294 

크롬은 말한다 :

Origin http://10.0.0.105:9294 is not allowed by Access-Control-Allow-Origin 

하지 무슨 일? 크롬의 개발자 도구 창에 찾고으로

세부 더 많이 ...

, 요청 헤더는 다음과 같습니다

OPTIONS /user/kris HTTP/1.1 
Host: 10.0.0.104:8080 
Connection: keep-alive 
Access-Control-Request-Method: GET 
Origin: http://10.0.0.105:9294 
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1 
Access-Control-Request-Headers: origin, x-requested-with, content-type, accept 
Accept: */* 
Referer: http://10.0.0.105:9294/ 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 

응답 헤더는 다음과 같습니다

HTTP/1.0 200 OK 
Date: Mon, 13 Aug 2012 11:23:45 GMT 
Server: WSGIServer/0.1 Python/2.7.3 
Content-Length: 0 
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD, OPTIONS 
Access-Control-Max-Age: 10 
Access-Control-Allow-Origin: http://10.0.0.105:9294 
Access-Control-Allow-Headers: X-Requested-With, Authorization, X-Huzu-User, Content-Type, Accept 
Content-Type: text/html; charset=UTF-8 

jQuery를은을 전송 한 후 OPTIONS가 위의 응답을 요청하면 2 가지 이상한 일이 발생합니다. 옵션 응답 (여기서는 200이다) 에러로 현상 콘솔에 표시 : GET 요청이 거부

OPTIONS http://10.0.0.104:8080/user/kris 200 (OK) 

후. 콘솔 오류 :

XMLHttpRequest cannot load http://10.0.0.104:8080/user/kris. Origin http://10.0.0.105:9294 is not allowed by Access-Control-Allow-Origin. 

나는 볼 수 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

여기에 게시하는 데 사용할 수있는 jQuery 코드에 대한 최소한의 실패 사례는 없습니다. javascript 코드에 이상한 점이 없다고 가정합니다. 즉, 위에 나온 OPTIONS 요청의 결과로 단일 jQuery get()입니다. 내 질문은 : 응답에 무엇이 잘못 되었습니까? – scav

+0

나만인가, 아니면 호스트 URL (10.0.0.104:8080)과 referer url (10.0.0.105:9294/) 사이에 차이점이 있습니까? – rene

+0

@rene 예. 내 서버는 내 로컬 컴퓨터 (10.0.0.104:8080)에서 실행되는 python wsgi 응용 프로그램이며, 크로스 사이트 테스트는 10.0.0.105:9294에서로드하는 페이지에서 발생합니다.나는 referer가 액세스 제어에 어떤 영향을 미치는지 모른다. 그게 관련 있다고 생각합니까? 그렇다면 어떻게해야합니까? – scav

답변

20

좋아, 내가 가지고 있다고 생각해. 사전 비행 OPTIONS 요청을 적절하게 처리해야하지만 교차 사이트 리소스 요청이 작동하려면 이 충분하지 않은 것으로 보입니다 ().

옵션 요청이 만족스러운 헤더를 다시 제공 한 후 동일한 URL 에 대한 후속 요청에 대한 모든 응답도이 필요한 "액세스 제어 - 허용 - 원산지"헤더가 있어야 그렇지 않으면 브라우저가 그들을 삼킬 것이다, 디버거 창에 나타나지 않습니다.

따라서 처럼 보일 것입니다. OPTIONS 응답의 문제로 인해 브라우저가 요청을 취소했지만 실제로 브라우저는 실제 요청의 응답 헤더를보고 거부합니다.

+0

와 동일합니다. ur은 (와)과 같은 질문을 수행 했으므로이 비슷한 질문으로 나를 도울 수 있습니까? ? http://scackoverflow.com/questions/11953132/no-response-obtained-while-implementing-cors –

+3

@scav 어떻게 해결하셨습니까 – Hunt

+0

@scav +1 충분히 감사드립니다. 디버깅 시간을 절약 해 줬습니다! – alf

관련 문제