jQuery的阿賈克斯注
- 由於瀏覽器的安全限制,大多數阿賈克斯請求都受到了same origin policy;該請求無法成功從不同的域,子域,端口或協議中檢索數據。
- 腳本和JSONP請求不受相同的源策略限制。
有克服跨域屏障的一些方法:
有一些插件,與跨幫助 - 域個請求:
注意!
克服這個問題的最好辦法,就是通過在後臺建立自己的代理,讓代理將指向其他領域的服務,因爲在後端不存在相同的起源政策限制。但是如果你不能在後端做到這一點,那麼請注意以下提示。
警告!
使用第三方代理不是一個安全的做法,因爲他們可以跟蹤你的數據,所以它可以用公共信息中使用,但從來沒有與私人數據。
下面使用所示的代碼示例jQuery.get()和jQuery.getJSON(),兩者都是的jQuery.ajax()
速記方法
CORS Anywhere的
CORS Anywhere是一個node.js代理它將CORS頭添加到代理請求。
要使用API,只需在URL前加上URL即可。 (支持HTTPS:看github repository)
如果你想自動啓用跨域請求需要的時候,可以使用下面的代碼片段:
$.ajaxPrefilter(function (options) {
if (options.crossDomain && jQuery.support.cors) {
var http = (window.location.protocol === 'http:' ? 'http:' : 'https:');
options.url = http + '//cors-anywhere.herokuapp.com/' + options.url;
//options.url = "http://cors.corsproxy.io/url=" + options.url;
}
});
$.get(
'http://en.wikipedia.org/wiki/Cross-origin_resource_sharing',
function (response) {
console.log("> ", response);
$("#viewer").html(response);
});
無論產地
Whatever Origin是一個跨域jsonp訪問。這是anyorigin.com的開源替代品。
從google.com,取數據,你可以使用這個片段:
// It is good specify the charset you expect.
// You can use the charset you want instead of utf-8.
// See details for scriptCharset and contentType options:
// http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings
$.ajaxSetup({
scriptCharset: "utf-8", //or "ISO-8859-1"
contentType: "application/json; charset=utf-8"
});
$.getJSON('http://whateverorigin.org/get?url=' +
encodeURIComponent('http://google.com') + '&callback=?',
function (data) {
console.log("> ", data);
//If the expected response is text/plain
$("#viewer").html(data.contents);
//If the expected response is JSON
//var response = $.parseJSON(data.contents);
});
CORS代理
CORS代理是一個簡單的的node.js代理爲任何網站啓用CORS請求。 它允許您網站上的JavaScript代碼訪問其他域上的資源,這些資源通常會因同源策略而被阻止。
它是如何工作的? CORS代理利用跨源資源共享,這是一項與HTML 5一起添加的功能。服務器可以指定他們希望瀏覽器允許其他網站請求他們託管的資源。 CORS Proxy只是一個HTTP代理服務器,它在響應中添加一個標題,標明「任何人都可以請求這個」。
這是實現此目標的另一種方式(請參見www.corsproxy.com)。所有你需要做的是剝離http://和www。從URL被代理,並與www.corsproxy.com/
$.get(
'http://www.corsproxy.com/' +
'en.wikipedia.org/wiki/Cross-origin_resource_sharing',
function (response) {
console.log("> ", response);
$("#viewer").html(response);
});
CORS代理瀏覽器預先設置URL
最近我發現這一個,它涉及到各種安全導向的跨源遠程共享工具。但它是一個以Flash作爲後端的黑盒子。
你可以看到它在這裏的行動:CORS proxy browser
獲取GitHub上的源代碼:koto/cors-proxy-browser
您也可以從這裏部署您自己的WhateverOrigin.org版本(或自行使用的代碼):https://github.com/ripper234/Whatever-Origin/ – EpicVoyage 2013-11-17 14:18:33
我已經試過這段代碼,它工作正常從跨域加載HTML,但請求的HTML包含未加載響應的圖像。意味着返回的跨域請求的HTML不包含圖像。有沒有什麼辦法來加載圖像也????? – Hitesh 2014-01-21 11:39:10
圖像,CSS和外部JavaScript可以從另一個來源引用,因此,在響應中,您可以通過HTML字符串並替換外部資源的src – jherax 2014-01-21 17:00:19