두 개의 웹 서버가있는 로컬 LAN (machineA)에 컴퓨터가 있습니다. 첫 번째는 XBMC (포트 8080)에 내장 된 것으로 라이브러리를 표시합니다. 두 번째 서버는 필요할 때 파일 변환을 트리거하는 데 사용하는 CherryPy 파이썬 스크립트 (포트 8081)입니다. 파일 변환은 XBMC 서버에서 제공 한 페이지의 AJAX POST 요청에 의해 트리거됩니다.
- 고토 에 http : // machineA : 8080 있는 표시 라이브러리
- 라이브러리가 표시됩니다
- 사용자가 다음 명령을 실행하는 '변환'링크를 클릭하십시오.
jQuery Ajax 요청
$.post('http://machineA:8081', {file_url: 'asfd'}, function(d){console.log(d)})
- 브라우저는 다음 헤더와 함께 HTTP OPTIONS 요청을 발행합니다.
요청 헤더-옵션
Host: machineA:8081
User-Agent: ... Firefox/4.01
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: http://machineA:8080
Access-Control-Request-Method: POST
Access-Control-Request-Headers: x-requested-with
- 서버는 다음과 같이 응답합니다.
응답 헤더-옵션 (상태 = 200 OK)
Content-Length: 0
Access-Control-Allow-Headers: *
Access-Control-Max-Age: 1728000
Server: CherryPy/3.2.0
Date: Thu, 21 Apr 2011 22:40:29 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Content-Type: text/html;charset=ISO-8859-1
- 대화가 중지됩니다. 이론적으로 브라우저는 서버가 올바른 (?) CORS 헤더 (Access-Control-Allow-Origin : *)로 응답 할 때 POST 요청을 발행해야합니다.
문제 해결을 위해 http://jquery.com 에서 동일한 $ .post 명령도 발행했습니다 . jquery.com에서 게시 요청이 작동하고 OPTIONS 요청이 POST에 의해 전송되는 곳입니다. 이 거래의 헤더는 다음과 같습니다.
요청 헤더-옵션
Host: machineA:8081
User-Agent: ... Firefox/4.01
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: http://jquery.com
Access-Control-Request-Method: POST
응답 헤더-옵션 (상태 = 200 OK)
Content-Length: 0
Access-Control-Allow-Headers: *
Access-Control-Max-Age: 1728000
Server: CherryPy/3.2.0
Date: Thu, 21 Apr 2011 22:37:59 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Content-Type: text/html;charset=ISO-8859-1
요청 헤더-POST
Host: machineA:8081
User-Agent: ... Firefox/4.01
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://jquery.com/
Content-Length: 12
Origin: http://jquery.com
Pragma: no-cache
Cache-Control: no-cache
응답 헤더-POST (STATUS = 200 OK)
Content-Length: 32
Access-Control-Allow-Headers: *
Access-Control-Max-Age: 1728000
Server: CherryPy/3.2.0
Date: Thu, 21 Apr 2011 22:37:59 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Content-Type: application/json
한 사이트에서 동일한 요청이 작동하지만 다른 사이트에서는 작동하지 않는 이유를 해결할 수 없습니다. 누군가 내가 누락 된 것을 지적 할 수 있기를 바랍니다. 당신의 도움을 주셔서 감사합니다!