2010-06-29 29 views
5

Đây là tình huống của tôi:miền chéo XMLHttprequest

Tôi có máy chủ Web, Máy khách và máy thứ ba chạy một số chương trình lắng nghe XMLHttpRequests.

Khách hàng truy cập Webserver từ máy khách, thực hiện một số thay đổi và sau đó nhấp vào 'Lưu'. Tại thời điểm này, dữ liệu đang được gửi trở lại máy chủ Web và đến máy thứ ba. Tất cả điều này đang được thực hiện bằng cách sử dụng đối tượng Javascript và XMLHttpRequest.

Bài đăng lên máy chủ Web hoạt động tốt, tuy nhiên đăng lên máy thứ ba không hoạt động, vì nó có IP/miền khác.

Tôi làm cách nào để thực hiện công việc này? Máy khách -> Máy thứ ba không hoạt động, vì trên một miền khác Máy chủ web -> Máy thứ ba không hoạt động, do sự cố tường lửa

Bất kỳ ý tưởng nào được đánh giá cao!

Trả lời

3

Những gì bạn đang gặp phải là Same origin policy, không phải là sự cố tường lửa.

Nếu các máy chia sẻ một miền cấp cao nhất, bạn có thể set their document.domain properties to match:

Hai trang web chia sẻ một top-level chung miền có thể lựa chọn để giao tiếp mặc dù thất bại là "cùng một host" kiểm tra bởi cùng đặt thuộc tính document.domain DOM tương ứng của mình thành cùng một đoạn có điều kiện, bên phải là tên máy chủ lưu trữ hiện tại của chúng.

Nếu không, bạn có thể cần phải thiết lập máy chủ đầu tiên của mình thành proxy yêu cầu tới máy chủ khác.

2

Bạn cũng có thể sử dụng iframe hack. Khung nội tuyến được lưu trữ bởi tên miền thứ hai có thể được hiển thị trong trang được lưu trữ bởi tên miền đầu tiên và window object cho khung nội tuyến sẽ có thể truy cập được từ ngữ cảnh của trang gốc.

+1

Điều này nghe không giống ý tưởng tồi, tôi nghĩ bạn cũng có thể postMessage() giữa các khung trong trường hợp này. – erikvold

1

Một tùy chọn khác (được thừa nhận là một chút công nghệ cao) là sử dụng YQL nếu dữ liệu không nhạy cảm. Bạn cũng có thể sử dụng YQL & JSON-P để tìm nạp dữ liệu từ các miền khác.

3

Bạn có thể triển khai CORS (Cross-Origin Resource Sharing) trên máy chủ của mình.

Phiên bản hiện tại của các trình duyệt máy tính để bàn lớn đã hỗ trợ nó trong một thời gian, Opera và Explorer 10 là phiên bản cuối cùng để thêm hỗ trợ.

Tôi không chắc chắn CORS được hỗ trợ rộng rãi như thế nào trên các trình duyệt di động tại thời điểm này.

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