0

这是 jQuery 文档:
http ://api.jquery.com/load/

如附加说明所述:

由于浏览器安全限制,大部分“Ajax”请求都受同源策略的约束;请求无法从不同的域、子域或协议成功检索数据。

有没有办法绕过这个限制?

4

2 回答 2

0

一种方法是在服务器上创建一个请求外部页面的代理页面。实现取决于所使用的技术,但想法是您可以对代理页面进行 ajax 调用,而不是与调用页面位于同一域中。

于 2013-11-12T06:12:15.243 回答
0

是的,有几种方法可以解决这个问题。但我强烈建议CORS(跨域资源共享)。CORS 是解决跨域 Ajax 的新兴标准。这正在取代 JSONP 等方法(存在已知的安全问题)。

不幸的是,旧的 IE 版本 (6-9) 不支持 CORS,但是已经为浏览器建立了 polyfill,它们本身不实现 CORS。easyXDM就是这样一种 polyfill。

在基本级别上,下面是一个示例请求(来自上面的 MDN 链接),其中浏览器生成一个带有Origin标头的请求,指示请求的域,由端点验证:

GET /resources/access-control-with-credentials/ HTTP/1.1
Host: bar.other
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://foo.example/examples/credential.html
Origin: http://foo.example
Cookie: pageAccess=2

支持 CORS 的 Ajax 端点可以用浏览器验证的相应标头进行响应。请参阅此示例中的 Access-Control-Allow-Origin 和 Access-Control-Allow-Credentials:

HTTP/1.1 200 OK
Date: Mon, 01 Dec 2008 01:34:52 GMT
Server: Apache/2.0.61 (Unix) PHP/4.4.7 mod_ssl/2.0.61 OpenSSL/0.9.7e mod_fastcgi/2.4.2 DAV/2 SVN/1.4.2
X-Powered-By: PHP/5.2.6
Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Credentials: true
Cache-Control: no-cache
Pragma: no-cache
Set-Cookie: pageAccess=3; expires=Wed, 31-Dec-2008 01:34:53 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 106
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Content-Type: text/plain

浏览器也可以发送一个 pre-flight(使用OPTIONS动词),它可以向服务器指示 Ajax 调用将使用哪些标头或动词。预检实际上是一个独立于主要 Ajax 调用的调用,但仅在特定条件下调用。

许多 Web 服务器(IIS、Apache)通过模块支持 CORS。服务器将需要配置以将来源、允许的动词、标题等列入白名单。也可以使用通配符,但不建议使用。

于 2013-11-12T06:19:01.323 回答