Vitals:XMLHttpRequest bị từ chối bởi Access-Control-Allow-Origin mặc dù nguồn gốc phù hợp một cách hoàn hảo
Version Chrome 23.0.1271.64 Mac OS X 10.8.2
Tình hình:
Tôi có một dịch vụ web được hiển thị tại https://api.myapi.com/ ... Tôi muốn cho phép các ứng dụng JavaScript tương tác với API này. CORS cảm thấy như phù hợp nhất rõ ràng (jsonp và bạn bè là khủng khiếp, hack khủng khiếp).
tôi có thể nhìn thấy trong Công cụ cho nhà phát triển yêu cầu preflight đang được gửi ra:
Request URL: https://api.myapi.com/someapi
Request Method: OPTIONS
Status Code: 200 OK
Request Headers
Accept: */*
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Access-Control-Request-Headers: origin, authorization, accept
Access-Control-Request-Method: GET
Connection: keep-alive
Host: api.myapi.com
Origin: http://prototypes.mycompany.com
Referer: http://prototypes.mycompany.com/somepage.html
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11
Response Headers
Access-Control-Allow-Headers: Accept,Authorization,Content-Length,Content-Type,Cookie
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,HEAD,OPTIONS
Access-Control-Allow-Origin: http://prototypes.mycompany.com
Access-Control-Allow-Credentials: true
Connection: close
này sẽ rất tốt, đặc biệt là phản ứng Access-Control-Allow-Origin
tiêu đề dường như để phù hợp với tiêu đề yêu cầu Origin
một cách chính xác.
Ngay sau đó, yêu cầu thực tế đang cố gắng:
Request URL: https://api.myapi.com/someapi
Request Headers
Accept: application/json, text/javascript, */*; q=0.01
Authorization: <custom authentication scheme, removed>
Origin: http://prototypes.mycompany.com
Referer: http://prototypes.mycompany.com/somepage.html
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11
Nó sau đó xuất hiện như "Hủy" và các lỗi sau được phát ra:
XMLHttpRequest không thể tải https://api.myapi.com/someapi. Xuất xứ http://prototypes.mycompany.com không được cho phép bởi Access-Control-Allow-Origin.
Tôi bắt đầu với *
là nguồn gốc được phép, nhưng không thành công với cùng một vấn đề.
Tôi đã sao chép sự cố này trên Mobile Safari cho iOS 5 và Firefox. Trong Firefox, hành vi thậm chí còn khó hiểu hơn: Máy chủ phản hồi 200 OK và sau đó 6-7KB dữ liệu (đó là những gì tôi mong đợi). Nhật ký phía máy khách nói rằng nó có 200 OK và ~ 300 byte dữ liệu (không có tiêu đề phản hồi, không có phản hồi nào cả ...) và sau đó kích hoạt trình xử lý "lỗi".
Tôi đang thiếu gì?
Vì tôi đã đăng câu hỏi, tôi đã thêm 'Access-Control-Allow-Credentials', không có hiệu lực. Tôi sẽ thêm 'Origin' nhưng tôi không nghĩ rằng đây là vấn đề - sẽ không phải là thông báo lỗi sau đó báo cáo rằng một tiêu đề không hợp lệ đã được chỉ định? –