Javascript 加载外部页面的跨域变通方法

Javascript 加载外部页面的跨域变通方法,javascript,jquery,Javascript,Jquery,以下是jQuery文档: 如补充说明所述: 由于浏览器的安全性限制,大多数“Ajax”请求都受到限制 同一原产地政策;请求无法成功检索 来自不同域、子域或协议的数据 有没有办法绕过这个限制?一种方法是创建一个代理页面,请求服务器上的外部页面。实现取决于所使用的技术,但其思想是,您可以对代理页面进行ajax调用,而代理页面将位于与调用页面相同的域中。是的,有几种方法可以解决此问题。但我强烈建议(跨域资源共享)。CORS是解决跨域Ajax的新兴标准。这正在取代JSONP(它有已知的安全问题)等方法

以下是jQuery文档:

如补充说明所述:

由于浏览器的安全性限制,大多数“Ajax”请求都受到限制 同一原产地政策;请求无法成功检索 来自不同域、子域或协议的数据


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

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

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

不幸的是,旧的IE版本(6-9)不支持CORS,但是已经建立了用于浏览器的polyfills,这些浏览器并没有本机实现CORS。就是这样一种多填料

在基本级别上,下面是一个示例请求(来自上面的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端点可能会使用适当的头进行响应,浏览器会验证这些头。请参见本例中的访问控制允许源和访问控制允许凭据:

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(使用选项动词),它可以向服务器指示Ajax调用将使用哪些标题或动词。pre-flight实际上是一个独立于主Ajax调用的调用,但仅在特定条件下调用


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

CORS似乎很有希望,但如果您能提供一个提琴,让我知道如何在操作中使用它,我将不胜感激。谢谢对于支持CORS的浏览器,客户端(浏览器)将发送飞行前请求,这是主请求之前的一种握手,或根据HTTP动词、是否涉及自定义请求头等立即发送实际请求。提供Ajax响应的服务器还需要支持CORS,使用适当的标题和实际响应数据进行响应。感谢您的回答!“一种方法是创建一个代理页面,请求服务器上的外部页面。”例如,如何使用
PHP