Cùng xứ Chính sách
Bạn đang cố gắng phá vỡ Same Origin Policy. Nó được tích hợp vào mọi trình duyệt và thường không phải là thứ mà bạn có thể hoặc nên vô hiệu hóa/giải pháp/etc. Đây là một hợp đồng bảo mật rất quan trọng giữa trang web của bạn, người dùng và trình duyệt của người dùng.
CORS (có thể)
CORS cho phép máy chủ web của bạn để cho trình duyệt/khách hàng truy cập vào tên miền khác là cho phép. Điều này được thực hiện bằng cách có đầu ra tiêu đề HTTP sau bởi máy chủ web của bạn
Access-Control-Allow-Origin: http://www.example.com
Nếu bạn không thể kiểm soát tiêu đề HTTP, thì bạn không thể sử dụng CORS. Thực hiện điều này là ngôn ngữ/khung công cụ cụ thể.
Xin lưu ý rằng bạn nên kiểm tra để đảm bảo browser compatibility vì IE8/9 có hỗ trợ giới hạn. Cũng lưu ý rằng đây là một vector tấn công tiềm năng. Nó cho phép phản hồi từ các trang web của bên thứ ba để thực thi các cuộc tấn công XSS nếu bạn sử dụng dữ liệu phản hồi vô trách nhiệm.
JSONP (có thể)
JSONP là một cách thông minh để vượt qua và lấy dữ liệu giữa các máy chủ bằng cách tự động thêm một thẻ script
với một atrribute src
bằng "yoururl.com?<your parameter data>"
vào trang của bạn. Đó là cách hợp pháp duy nhất để thực hiện một kỳ công như vậy mà không cần proxy web (xem bên dưới) hoặc một applet (Flash/Java). Tuy nhiên, nó có rủi ro bảo mật riêng nếu bạn không phải là nhà cung cấp cả hai đầu yêu cầu. Hãy nhớ rằng JSONP cho phép máy chủ từ xa thực thi mã trong ngữ cảnh của bạn và bạn phải là very careful who you give that power to.
"Vanilla" AJAX (không thể)
Nếu bạn không sử dụng JSONP để lấy dữ liệu thì bạn có nhiều khả năng cố gắng sử dụng một yêu cầu AJAX để lấy dữ liệu. Yêu cầu AJAX cũng phải tuân theo Chính sách xuất xứ tương tự. Các thư viện JavaScript (ví dụ: jQuery, Prototype, Dojo, v.v.) không thể phá vỡ chính sách này làm hành vi cơ sở cho một yêu cầu Ajax. Họ có thể, tuy nhiên, hỗ trợ JSONP (mà nhớ bây giờ, không phải là AJAX).
AJAX w/Web Proxy (có thể)
Nếu bạn muốn yêu cầu dữ liệu từ máy chủ khác, bạn có thể chuyển tiếp yêu cầu của bạn. Máy chủ trang web chính của bạn sẽ hoạt động như một proxy.Bạn sẽ cần phải thực hiện một yêu cầu AJAX cho máy chủ của riêng bạn, mã phía máy chủ đó sau đó sẽ thực hiện một yêu cầu đến miền khác và sau đó gửi phản hồi cho tập lệnh của bạn thông qua phản hồi cuộc gọi AJAX.
Đây là mẫu phổ biến và được mô tả chi tiết ở đây là Web Proxy Pattern và một hình ảnh thân thiện với Yahoo here (but remember it's Yahoo specific, just take the general idea). Tuy nhiên, phụ thuộc vào ngôn ngữ phía máy chủ. Việc thực hiện tổng thể sẽ giống nhau, tuy nhiên mã để làm như vậy sẽ thay đổi dựa trên ngôn ngữ phía máy chủ của bạn lựa chọn (PHP, Ruby, Python, C, v.v.). Một số ngôn ngữ sẽ có các thư viện/mô-đun/etc để hỗ trợ một mẫu như vậy.
Flash (có thể, không phải mặc định)
Flash trong trạng thái mặc định của nó không hỗ trợ các yêu cầu miền chéo. Nó có thể được bật trong Flash7 + với cross-domain policy files nhưng được đề xuất cao. Kịch bản của bạn sẽ phải giao diện với một API Flash có thể đưa ra các yêu cầu và trả lại dữ liệu cho JavaScript của bạn.
Java Applet (có thể, không phải mặc định)
Java cũng là đối tượng của chính sách cùng một nguồn gốc, nhưng có một công việc tương tự xung quanh sang Flash như described here on its release.
khác nhau khác "hack"
Có hack khác trên mạng, nhưng họ thường yêu cầu bạn phải kiểm soát cả hai đầu hoặc có thoả thuận tiêu chuẩn cho truyền thông. Ví dụ: hack 'window.name'. Tôi không đề nghị hầu hết các phương pháp này.
Solutions khác
Một câu hỏi tương tự như điều này đã được yêu cầu. Nó vạch ra một vài phương pháp khác mà tôi đã không bao gồm: Ways to circumvent the same-origin policy
Các giải pháp tốt nhất
- CORS - nếu bạn tin tưởng vào bên thứ 3
- Web Proxy - nếu bạn không
Một proxy web trên tên miền của riêng bạn có thể cho phép bạn khử trùng dữ liệu được truy xuất, nó cung cấp cho người dùng sự bảo vệ nhất. Tuy nhiên, nếu bạn không làm vệ sinh thì không an toàn hơn bất kỳ phương pháp nào được nêu ở đây. Nếu bạn thực hiện một proxy web của một số loại, hãy chắc chắn rằng yêu cầu của nó được giới hạn và từ các trang web bạn muốn. Khác bạn về cơ bản sẽ được tạo ra một open proxy, có thể bị lạm dụng bởi người dùng nếu phát hiện và giúp bạn gặp rắc rối pháp lý.
Bạn sẽ có thể tìm câu trả lời cho câu hỏi của bạn trong số các câu trả lời cho [Các cách để phá vỡ chính sách cùng nguồn gốc] (http://stackoverflow.com/questions/3076414/ways-to-circumvent-the-same-origin-policy). Câu hỏi của bạn có vẻ cơ bản giống nhau. –
Tôi đang sử dụng YQL + jQuery để truy cập nội dung miền chéo. –