2012-08-13 30 views
13

Tôi đang cố gắng cung cấp phản hồi cho phương thức HTTP OPTIONS với tiêu đề Access-Control-Allow-Origin sao chép nội dung của tiêu đề Gốc trong yêu cầu.Tiêu đề Access-Control-Allow-Origin không hoạt động - Tôi đang làm gì sai?

Điều này dường như không hoạt động, vì những lý do tôi không thể tìm ra.

tl; dr: phản hồi từ OPTIONS nói:

Access-Control-Allow-Origin: http://10.0.0.105:9294 

GET tiếp theo có:

Origin:http://10.0.0.105:9294 

Chrome nói:

Origin http://10.0.0.105:9294 is not allowed by Access-Control-Allow-Origin 

wtf không?

Xem chi tiết ...

Bằng cách nhìn trong cửa sổ công cụ phát triển của Chrome, các tiêu đề yêu cầu là:

OPTIONS /user/kris HTTP/1.1 
Host: 10.0.0.104:8080 
Connection: keep-alive 
Access-Control-Request-Method: GET 
Origin: http://10.0.0.105:9294 
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1 
Access-Control-Request-Headers: origin, x-requested-with, content-type, accept 
Accept: */* 
Referer: http://10.0.0.105:9294/ 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 

Các tiêu đề phản ứng là:

HTTP/1.0 200 OK 
Date: Mon, 13 Aug 2012 11:23:45 GMT 
Server: WSGIServer/0.1 Python/2.7.3 
Content-Length: 0 
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD, OPTIONS 
Access-Control-Max-Age: 10 
Access-Control-Allow-Origin: http://10.0.0.105:9294 
Access-Control-Allow-Headers: X-Requested-With, Authorization, X-Huzu-User, Content-Type, Accept 
Content-Type: text/html; charset=UTF-8 

Sau jQuery gửi nó OPTIONS yêu cầu và nhận được phản hồi ở trên, 2 điều kỳ lạ xảy ra. Câu trả lời OPTIONS (mà là một 200) xuất hiện trong các nhà phát triển giao diện điều khiển như một lỗi:

OPTIONS http://10.0.0.104:8080/user/kris 200 (OK) 

Sau đó một yêu cầu GET bị từ chối. Lỗi trong bảng điều khiển:

XMLHttpRequest cannot load http://10.0.0.104:8080/user/kris. Origin http://10.0.0.105:9294 is not allowed by Access-Control-Allow-Origin. 

Tôi không thể hiểu tại sao không. Tôi đang làm gì sai?

+0

Tôi không có một ví dụ thất bại tối thiểu của mã jQuery sẽ sử dụng bất kỳ để đăng ở đây. Giả sử không có gì lạ về mã javascript, nghĩa là nó chỉ là một jQuery duy nhất nhận được(), dẫn đến yêu cầu OPTIONS được đăng ở trên. Câu hỏi của tôi là: có gì sai với câu trả lời? – scav

+0

Chỉ là tôi hoặc có sự khác biệt giữa url máy chủ (10.0.0.104:8080) và url của người giới thiệu (10.0.0.105:9294/)? – rene

+0

@rene yeah. Máy chủ của tôi là ứng dụng python wsgi chạy trên máy cục bộ của tôi (10.0.0.104:8080) và thử nghiệm chéo trang web đang diễn ra từ trang tôi đang tải từ 10.0.0.105:9294.Tôi không biết tác dụng của người giới thiệu trên điều khiển truy cập là gì. Bạn có nghĩ rằng nó có liên quan? Nếu vậy, tôi phải làm gì với nó? – scav

Trả lời

20

OK, tôi nghĩ mình đã có nó. Dường như việc xử lý thích hợp yêu cầu OPTIONS trước chuyến bay là cần thiết, nhưng KHÔNG PHẢI TRẢ LỜI để yêu cầu tài nguyên trên nhiều trang web hoạt động.

Sau khi yêu cầu OPTIONS quay trở lại với tiêu đề thỏa đáng, tất cả phản hồi cho bất kỳ yêu cầu tiếp theo nào đến cùng một URL cũng phải có tiêu đề "Access-Control-Allow-Origin" cần thiết, nếu không trình duyệt sẽ nuốt chúng, và chúng thậm chí sẽ không hiển thị trong cửa sổ trình gỡ lỗi.

Vì vậy, nó sẽ trông giống như trình duyệt đã hủy yêu cầu do một số vấn đề trong phản hồi OPTIONS, nhưng thực tế, trình duyệt đang xem xét tiêu đề phản hồi từ yêu cầu thực và sau đó từ chối chúng.

+0

Vì ur được thực hiện với truy vấn ur, bạn có thể giúp tôi trong câu hỏi tương tự này không ? http://stackoverflow.com/questions/11953132/no-response-obtained-while-implementing-cors –

+3

@scav Bạn đã giải quyết nó như thế nào – Hunt

+0

@scav +1 Không thể cảm ơn đủ. Bạn đã tiết kiệm cho tôi số giờ gỡ lỗi! – alf

Các vấn đề liên quan