Lỗi CORS trên cùng một miền?


86

Tôi đang gặp sự cố CORS kỳ lạ ngay bây giờ.

Đây là thông báo lỗi:

XMLHttpRequest cannot load http://localhost:8666/routeREST/select?q=[...] 
Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin

Hai máy chủ:

  • localhost: 8666 / routeREST /: đây là một máy chủ Python Bottle đơn giản.
  • localhost: 8080 /: Python simpleHTTP máy chủ nơi tôi chạy ứng dụng Javascript y. Ứng dụng này đang thực thi các yêu cầu Ajax trên máy chủ ở trên.

Bất kỳ suy nghĩ về những gì có thể là vấn đề?

BIÊN TẬP:

Và ... cổng là vấn đề. Cảm ơn câu trả lời của bạn :)

Nếu bất kỳ ai cũng đang sử dụng máy chủ chai Python, bạn có thể làm theo câu trả lời được đưa ra trên bài đăng này để giải quyết vấn đề CORS: Chai Py: Bật CORS cho các yêu cầu jQuery AJAX


10
Vì chúng nằm trên các cổng khác nhau nên không giống nhau!
một số

Số cổng khác nhau. Điều này có thể vi phạm quy tắc Nguồn gốc chéo.

4
Lưu ý rằng IE không tính đến số cổng.
Ray Nicholus

@some Hầu hết các trình duyệt cũng kết luận rằng chúng không giống nhau nếu một trình duyệt có 'www' và trình duyệt kia thì không. Các chi tiết của ma quỷ.
Hiếm khi 'Where's Monica' Needy

@SeldomNeedy example.com, www.example.com, www1.example.com và mirror.www.example.com đều là các miền khác nhau. example.com , example.com , example.com , example.com:80443 đều có nguồn gốc khác nhau.
một số

Câu trả lời:


122

Nó chỉ được coi là tương tự nếu các giao thức , máy chủ cổng là như nhau: Cùng xứ Chính sách

Nếu bạn muốn kích hoạt nó, bạn phải tuân theo Chia sẻ Tài nguyên Nhiều Nguồn gốc (cors) bằng cách thêm các tiêu đề. Mozilla có các ví dụ

Bạn cần thêm Access-Control-Allow-Origin làm tiêu đề trong phản hồi của mình. Để cho phép mọi người (có thể bạn KHÔNG nên làm điều đó):

Access-Control-Allow-Origin: *

Nếu bạn cần hỗ trợ nhiều nguồn gốc (ví dụ: cả hai example.comwww.example.com), hãy đặt Access-Control-Allow-Origincâu trả lời của bạn thành giá trị của Origin-header từ yêu cầu (sau khi bạn xác minh rằng Nguồn gốc được liệt kê trong danh sách trắng.)

Cũng lưu ý rằng một số yêu cầu gửi yêu cầu trước khi xuất phát, với phương thức TÙY CHỌN, vì vậy nếu bạn viết mã của riêng mình, bạn cũng phải xử lý các yêu cầu đó. Xem Mozilla để biết ví dụ .


8
Điều này nên được đánh dấu bằng màu đỏ, viết hoa và in đậm ở mọi nơi mà AJAX tham gia.
Zoltán Schmidt

5
Là một phụ lục cho câu trả lời này, lưu ý rằng 'Access-Control-Allow-Origin: https://example.com'không tương đương với 'Access-Control-Allow-Origin: https://www.example.com'. Nếu trang web của bạn có thể truy cập được qua cả hai, bạn nên có cả hai trong tiêu đề phản hồi của mình.
Hiếm khi 'Where's Monica' Needy

1
Lưu ý rằng không có yêu cầu preflight được gửi theo mặc định cho các yêu cầu đơn giản như GET, POSTHEAD. Xem bài viết MDN được liên kết trong câu trả lời để biết thêm chi tiết.
Emile Bergeron

@SeldomCần thiết bạn không thể có tiêu đề trùng lặp
Mike Flynn

@MikeFlynn Phải thừa nhận rằng từ ngữ của tôi hơi lỏng lẻo, nhưng tôi không cố gắng gợi ý điều đó; máy chủ chỉ cần được cấu hình để gửi tiêu đề thích hợp, theo yêu cầu.
Hiếm khi 'đâu Monica' Nghèo

31

Các số cổng khác nhau.

Yêu cầu được coi là miền chéo nếu bất kỳ lược đồ, tên máy chủ hoặc cổng nào không khớp.


1
Ngoại trừ 443 và 80.
Joseph Lust

15
bao gồm 443 và 80
code_monk

4
Làm thế nào một xác nhận cho vấn đề có thể là giải pháp của vấn đề? Đăng câu trả lời đi anh bạn.
Ritesh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.