2017-02-08 2 views
0

관련 question.CORS 요청이 거부되는 이유는 무엇입니까?

테스트 목적으로 API에 POST 요청을 보내려고합니다. 계속 수신 중

프리 플라이트 요청에 대한 응답으로 액세스 제어 검사를 통과하지 못했습니다. 요청한 리소스에 '액세스 제어 허용 허용 원천'헤더가 없습니다. 따라서 '{내 로컬 IP}'는 액세스가 허용되지 않습니다. 응답은 다음 HTTP 상태 코드 (403)

있었다 관련 코드입니다 : 나는 문제가 그들과 함께 아니라는 것을 알고 있기 때문에,

function searchSimilar2(){ 
var base_url = "{request url}" 
var send_url = base_url + "{inline arguments}" 
var params = '{"size":10, "mediaUrl":"https://cdn.yoox.biz/39/39706632kh_20_f.jpg2"}' 

function func(){ 
    console.log(this.response) 
} 

var hReq = new XMLHttpRequest(); 
hReq.open('POST', send_url) 
hReq.setRequestHeader('Content-Type', 'application/json') 
hReq.onload = func; 
hReq.send(params) 

내가 요청 URL 및 인수를 생략.

링크 된 질문에 대한 답변에 따라 JQuery를 사용하지 않고이 요청을 보내는 Python SimpleHTTPServer를 실행하고 있습니다. 이 오류가 계속 발생합니다.

+0

서버가 필요한 CORS 헤더를 다시 보내지 않습니다. 'file : //' URL을 통해 페이지를로드하고 있습니까? 그렇다면 브라우저는 페이지와'http : // localhost' 서버를 두 개의 다른 도메인으로 간주합니다. – Pointy

+0

예, 링크 된 질문에서 읽었습니다. 그래서 simpleHTTPServer를 실행하고 거기에서 자바 스크립트를 실행하는 html 파일을 여는 것입니다. – GreySage

+0

브라우저가 일치하는 부분은 "http"부분 ("http"또는 "https"), 도메인 ** 문자 ** 및 포트 번호입니다. 같은 IP 주소가 아니라 문자열과 비교할 때 동일해야합니다. – Pointy

답변

0

를 서버의 설정을 변경하여, 나는이 작업을 얻었다.

요청에 대한 URL의 일부는 "v1/api"이고, 어떤 이유인지 "api/v1"로 전환하면 모든 것이 작동합니다.

2

SimpleHttpServer 응답에 "Access-Control-Allow-Origin"헤더 값을 설정해야합니다. 헤더 값은 요청하는 응용 프로그램의 호스트 이름 또는 IP를 포함해야합니다. 또한, 모든 기원을 허용하도록 "*"와일드 카드 값을 설정할 수 있습니다

//allow single origin 
self.send_header('Access-Control-Allow-Origin', 'http://yourapp.com') 
self.end_headers() 

- 또는

//allow all origins 
self.send_header('Access-Control-Allow-Origin', '*') 
self.end_headers() 
관련 문제