2010-03-30 23 views
19

Chính sách gốc tương tự áp dụng cho hai tên miền sau đây như thế nào?Chính sách về nguồn gốc của JavaScript - Làm cách nào để áp dụng cho các tên miền phụ khác nhau?

http://server1.MyDomain.com

http://server2.MyDomain.com

Tôi có thể chạy JS trên một trang được lưu trữ trên server1, nếu nội dung được truy xuất từ ​​server2?

chỉnh sửa theo câu trả lời của Daniel bên dưới, tôi có thể bao gồm tập lệnh giữa các tên miền phụ khác nhau bằng cách sử dụng thẻ <script>, nhưng về yêu cầu không đồng bộ thì sao? Điều gì sẽ xảy ra nếu tôi tải xuống tập lệnh từ server2 vào trang được lưu trữ trên máy chủ 1. Tôi có thể sử dụng tập lệnh để giao tiếp không đồng bộ với dịch vụ trên server2 không?

+1

Mileage sẽ thay đổi một chút với IE, nhưng quy tắc chung là cùng một máy chủ, cùng một cổng cho XHR trực tiếp. Bạn có thể tải tập lệnh từ bất cứ nơi nào bạn chọn nhưng theo như async, tệp nén JSONP là tùy chọn duy nhất của bạn mà không có proxy. –

Trả lời

24

Bạn chỉ có thể bao gồm tập lệnh giữa các tên miền phụ khác nhau bằng cách sử dụng thẻ <script>, vì nó được miễn trừ chính sách.

Sử dụng http://www.example.com/dir/page.html như nguồn (từ Wikipedia):

Compared URL        Outcome Reason 
--------------------------------------------------------------------------------------------- 
http://www.example.com/dir/page.html  Success Same protocol and host 
http://www.example.com/dir2/other.html  Success Same protocol and host 
http://www.example.com:81/dir2/other.html Failure Same protocol and host but different port 
https://www.example.com/dir2/other.html Failure Different protocol 
http://en.example.com/dir2/other.html  Failure Different host 
http://example.com/dir2/other.html   Failure Different host (exact match required) 
http://v2.www.example.com/dir2/other.html Failure Different host (exact match required) 

UPDATE:

Tôi có thể sử dụng kịch bản để giao tiếp không đồng bộ với một dịch vụ trên server2?

Có, bạn có thể sử dụng JSONP để tận dụng chính sách mở cho <script> để truy xuất JSON từ các quốc gia sản xuất khác.

Bạn cũng có thể muốn xem xét việc sử dụng một proxy ngược lại, như desribed trong Stack Overflow sau bài:

+1

@Daniel, cảm ơn bạn đã trả lời. Tôi đã chỉnh sửa câu hỏi với câu hỏi tiếp theo. Bất kỳ cơ hội nào bạn có thể thêm suy nghĩ của bạn vào nó? Cảm ơn – DaveDev

+0

@Dave: Bạn có thể muốn xem JSONP. Bạn cũng có thể xem xét thiết lập proxy ngược, như được mô tả tại đây: http://stackoverflow.com/questions/2482916/what-am-i-missing-in-the-xmlhttprequest/2482941#2482941 –

+0

Đây là một điều tuyệt vời , câu trả lời kỹ lưỡng. – wprl

0

Chắc chắn, bạn có thể chạy bất kỳ kịch bản mà bạn chèn vào bao giờ bạn nhớ nó xuất phát từ đâu. Hãy suy nghĩ về cách chèn bản đồ google trên trang của bạn.

Mô tả của bạn là mẫu được gọi là jsonp. Khi một máy chủ trên một máy chủ khác trả về một kịch bản bạn chèn vào trang của bạn và kịch bản lệnh gọi một hàm trong trang của bạn với các đối số phản hồi.

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