Tôi đang viết một ứng dụng web cho một số dịch vụ sử dụng RESTful API. API có sẵn tại https://api.example và ứng dụng tại https://app.example. Các yêu cầu GET đơn giản sử dụng CORS chỉ hoạt động tốt trong Chrome và Firefox. Một số phương thức chấp nhận dữ liệu qua POST và trả lại mã 303 với uri mới trong tiêu đề Vị trí.Tại sao trình duyệt không thực hiện theo các chuyển hướng bằng XMLHTTPRequest và CORS?
OPTIONS preflight yêu cầu là tốt:
Request Method:OPTIONS
Status Code:200 OK
Request Headers
Accept:*/*
Accept-Charset:UTF-8,*;q=0.5
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,ru;q=0.6
Access-Control-Request-Headers:origin, authorization, content-type
Access-Control-Request-Method:POST
Connection:keep-alive
DNT:1
Host:api.example
Origin:https://app.example
Referer:https://app.example/app/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.32 (KHTML, like Gecko) Chrome/27.0.1425.0 Safari/537.32 SUSE/27.0.1425.0
Tiêu đề phản hồi
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Authorization, Content-Type
Access-Control-Allow-Methods:GET,POST,PUT,DELETE,HEAD,OPTIONS
Access-Control-Allow-Origin:https://app.example
Access-Control-Expose-Headers:*
Access-Control-Max-Age:3628800
Connection:keep-alive
Content-Length:0
Date:Sun, 05 May 2013 15:22:50 GMT
Server:nginx/1.2.5
Sau đó, theo yêu cầu thực tế chỉ dừng lại sau khi nhận được 303:
Request URL:https://api.example
Request Method:POST
Status Code:HTTP/1.1 303 See Other
đáp ứng tiêu đề:
Server:nginx/1.2.5
Location:https://api.example/some_url
Date:Sun, 05 May 2013 15:27:49 GMT
Content-Type:application/json
Content-Length:0
Connection:keep-alive
Access-Control-Max-Age:3628800
Access-Control-Expose-Headers:*
Access-Control-Allow-Origin:https://app.example
Access-Control-Allow-Methods:GET,POST,PUT,DELETE,HEAD,OPTIONS
Access-Control-Allow-Headers:Authorization, Content-Type
Access-Control-Allow-Credentials:true
By user agent RFC nên theo chuyển hướng, nhưng Chrome và FF dường như không hoạt động như mong đợi. Đó có phải là lỗi của trình duyệt hoặc tôi đang làm điều gì sai?
cập nhật: Nếu tôi bắt đầu chromium bằng --disable-web-security, mọi thứ hoạt động tốt.
Yêu cầu của bạn là gì đối với yêu cầu 'thực' (không phải là chuyến bay trước CORS)? Tôi đang gặp một vấn đề rất giống nhau. Bạn đã giải quyết nó bằng bất kỳ cơ hội nào chưa? – vrutberg
Dường như báo cáo lỗi này trong Chromium có thể có liên quan https://code.google.com/p/chromium/issues/detail?id=237490 – vrutberg
@vrutberg có vẻ như chính xác như vậy. Hơn nữa nó * đôi khi * hoạt động. Ví dụ: một bài kiểm tra msdn http://samples.msdn.microsoft.com/ietestcenter/CORS/CORS_014.htm truyền cả trong Chrome và FF. Một người bạn của tôi đã lấy chính xác cùng một mã và đặt trên máy chủ của anh ấy và nó không hoạt động! http://twinspect.net/cors.htm – galadog