我可以使用跨域 XMHhttpRequest() 搜索 Google 吗?
var xhr = XMLHttpRequest();
xhr.open("GET", www.google.com/?q=what+you+want+to+search, true);
我可以使用跨域 XMHhttpRequest() 搜索 Google 吗?
var xhr = XMLHttpRequest();
xhr.open("GET", www.google.com/?q=what+you+want+to+search, true);
试试看:
curl -H "Origin: http://domain.com" -X OPTIONS --head https://www.google.com/
这目前为您提供:
HTTP/1.1 405 Method Not Allowed
Content-Type: text/html; charset=UTF-8
Content-Length: 962
Date: Fri, 21 Jun 2013 17:58:45 GMT
Server: GFE/2.0
所以不,你不能,至少不能使用他们面向公众的网站。如果是这样的话,那里会有一个Access-Control-Allow-Origin: *
,200 OK。这*
是“任何域”的通配符。所以它要么必须是这样,要么必须与您的出身相匹配。
即使它确实返回了正确的标头,您也必须在浏览器中支持 CORS。您可以在此处查看浏览器兼容性。IE 8 和 9 仅支持 CORS through XDomainRequest
,它有严格的限制(例如,没有 cookie 或自定义标头)。您可以在此处阅读有关访问控制标头的更多信息。
当 CORS 失败时,使用同源策略。
不过有办法。Google REST API确实支持跨源请求:
curl -H "Origin: http://domain.com" -X GET --head "https://www.googleapis.com/customsearch/v1?"
这给了你:
HTTP/1.1 400 Bad Request
Access-Control-Allow-Origin: http://domain.com
Content-Type: application/json; charset=UTF-8
Access-Control-Expose-Headers: Content-Encoding,Content-Length,Content-Type,Server
Date: Fri, 21 Jun 2013 18:12:51 GMT
Expires: Fri, 21 Jun 2013 18:12:51 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Transfer-Encoding: chunked
注意Access-Control-Allow-Origin: http://domain.com
.
所以假设你有一个 API 密钥,你可以,如果你使用 API。