ฉันมีเครื่องบน LAN ท้องถิ่นของฉัน (machineA) ที่มีเว็บเซิร์ฟเวอร์สองเครื่อง ที่แรกก็คือที่สร้างขึ้นใน XBMC (บนพอร์ต 8080) และแสดงห้องสมุดของเรา เซิร์ฟเวอร์ตัวที่สองเป็นสคริปต์ python ของ CherryPy (พอร์ต 8081) ที่ฉันใช้เพื่อทริกเกอร์การแปลงไฟล์แบบออนดีมานด์ การแปลงไฟล์จะถูกเรียกใช้โดยคำขอ AJAX POST จากหน้าที่ให้บริการจากเซิร์ฟเวอร์ XBMC
- ไปที่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 ตกลง)
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
- บทสนทนาก็จะหยุด ในทางทฤษฎีเบราว์เซอร์ควรออกคำขอ POST เมื่อเซิร์ฟเวอร์ตอบกลับด้วยส่วนหัว CORS ที่ถูกต้อง (?) - Access-Control-Allow-Origin: *
สำหรับการแก้ไขปัญหาผมยังได้ออก $ .post เดียวกันคำสั่งจากhttp://jquery.com นี่คือที่ฉันนิ่งงันจาก 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 ตกลง)
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 (สถานะ = 200 ตกลง)
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
ฉันไม่สามารถอธิบายได้ว่าทำไมคำขอเดียวกันนี้ถึงได้ผลจากเว็บไซต์หนึ่ง แต่ไม่ใช่คำขออื่น ฉันหวังว่าบางคนอาจชี้ให้เห็นสิ่งที่ฉันขาดหายไป ขอบคุณสำหรับความช่วยเหลือของคุณ!