Với AJAX thuần-http: Bạn đang nói về thực hiện XMLHttpRequest nhiều miền, không được trình duyệt cho phép. Có W3C proposal pending để thực hiện điều này một cách an toàn trong tương lai (được thực hiện một phần bởi IE8, IIRC), nhưng chắc chắn là không thể hiện tại.
Tuy nhiên, cách giải quyết cho làm việc đó một cách an toàn: Subspace (trong đó sử dụng iframe và document.domain
), các fragment identifier technique (một lần nữa, sử dụng iframe) và window.name
technique (một lần nữa, iframe!).
Theo như SSL đi, bạn có thể mua chứng chỉ riêng cho tên miền và tên miền phụ hoặc chứng chỉ ký tự đại diện (* .foo.com) bao gồm cả hai (tự nhiên, ký tự đại diện sẽ đắt hơn).
Nếu bạn có trang HTTPS yêu cầu các mục từ các miền khác, tất cả sẽ được miễn là mọi thứ đều là HTTPS. Điều đó có nghĩa là nếu bạn sử dụng một trong các cách giải quyết iframe, bạn phải chỉ định URL lược đồ https://
trong thuộc tính src
của khung nội tuyến.
Giải pháp cuối cùng, kém hiệu quả hơn là có một tập lệnh trên https://foo.com
rằng các proxy yêu cầu không an toàn http://bar.foo.com
.(Điều này cũng giải quyết vấn đề miền chéo XHR, vì vậy bạn có thể bỏ qua các giải pháp khác.) Tất nhiên, điều đó có nghĩa là bạn đang gửi yêu cầu XHR đến https://foo.com/someurl
, sau đó nhấn http://bar.foo.com/someurl
, nhận phản hồi và gửi lại trình duyệt , vì vậy hiệu suất-khôn ngoan bạn tốt hơn nhiều chỉ cần di chuyển các chức năng phía máy chủ của bar.foo.com vào foo.com, nếu bạn có tùy chọn đó. Nhưng nếu bạn không thể di chuyển kịch bản máy chủ thì proxy là cách để đi.
EDIT: Tôi đã thay đổi 3 grafs cuối cùng sau khi thực hiện một số thử nghiệm bổ sung và nhận được một khung công tác AJAX iframe (#fragmentidentifier one) để hoạt động trên các miền HTTPS khác nhau. Bạn có thể làm AJAX tên miền chéo bằng cách sử dụng iframe miễn là mọi thứ đều là https
và lược đồ https
được sử dụng trong iframe src
. Tóm tắt:
- Câu trả lời ngắn: không có, đúng XHR cross-domain không được phép
- Cách giải quyết với iframe: hiệu quả hơn, cần 2 SSL Certs (hoặc cert ký tự đại diện), hơi phức tạp
- Cách giải quyết với proxy: kém hiệu quả, có thể làm với 1 hoặc 2 SSL certs (1 với yêu cầu phụ trợ để bar.foo.com qua http), hơi phức tạp