Tôi có một máy trên lan cục bộ (machineA) có hai máy chủ web. Đầu tiên là bản dựng sẵn trong XBMC (trên cổng 8080) và hiển thị thư viện của chúng tôi. Máy chủ thứ hai là tập lệnh python CherryPy (cổng 8081) mà tôi đang sử dụng để kích hoạt chuyển đổi tệp theo yêu cầu. Việc chuyển đổi tệp được kích hoạt bởi yêu cầu AJAX POST từ trang được cung cấp từ máy chủ XBMC.
- Goto http: // machineA: 8080 hiển thị thư viện
- Thư viện được hiển thị
- Người dùng nhấp vào liên kết 'convert', đưa ra lệnh sau -
Yêu cầu jQuery jQuery
$.post('http://machineA:8081', {file_url: 'asfd'}, function(d){console.log(d)})
- Trình duyệt đưa ra yêu cầu HTTP TÙY CHỌN với các tiêu đề sau;
Tiêu đề yêu cầu - TÙY CHỌN
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
- Máy chủ trả lời như sau;
Tiêu đề phản hồi - TÙY CHỌN (TÌNH TRẠNG = 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
- Cuộc trò chuyện sau đó dừng lại. Về lý thuyết, trình duyệt sẽ đưa ra yêu cầu POST khi máy chủ trả lời với các tiêu đề CORS (?) Chính xác (Access-Control-Allow-Origin: *)
Để khắc phục sự cố, tôi cũng đã ban hành lệnh $ .post tương tự từ http://jquery.com . Đây là nơi tôi bị bối rối, từ jquery.com, yêu cầu bài viết hoạt động, một yêu cầu TÙY CHỌN được gửi theo sau bởi POST. Các tiêu đề từ giao dịch này là dưới đây;
Tiêu đề yêu cầu - TÙY CHỌN
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
Tiêu đề phản hồi - TÙY CHỌN (TÌNH TRẠNG = 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
Tiêu đề yêu cầu - 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
Tiêu đề phản hồi - 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
Tôi không thể tìm ra lý do tại sao cùng một yêu cầu sẽ hoạt động từ một trang web, nhưng không phải là một trang web khác. Tôi hy vọng ai đó có thể chỉ ra những gì tôi đang thiếu. Cảm ơn bạn đã giúp đỡ!