AJAX
跳转到“AJAX”AJAX不是JavaScript的规范,Asynchronous JavaScript and XML,意思就是用JavaScript执行异步网络请求。
// 默认情况下,JavaScript在发送AJAX请求时,URL的域名必须和当前页面完全一致。async function get(url) { let resp = await fetch(url); let result = await resp.text(); return result;}
// 发送异步请求:get('./content.html').then(data => { let textarea = document.getElementById('fetch-response-text'); textarea.value = data;});那是不是用JavaScript无法请求外域(就是其他网站)的URL了呢?方法还是有的,大概有这么几种:
-
通过Flash插件发送HTTP请求,这种方式可以绕过浏览器的安全限制,但必须安装Flash,并且跟Flash交互。不过Flash用起来麻烦,而且现在用得也越来越少了。
-
通过在同源域名下架设一个代理服务器来转发,JavaScript负责把请求发送到代理服务器:
'/proxy?url=https://www.sina.com.cn' -
JSONP,它有个限制,只能用GET请求,并且要求返回JavaScript。这种方式跨域实际上是利用了浏览器允许跨域引用JavaScript资源
<html><head><script src="http://example.com/abc.js"></script>...</head><body>...</body></html>// JSONP通常以函数调用的形式返回,例如,返回JavaScript内容如下:foo('data'); -
CORS,CORS全称Cross-Origin Resource Sharing,是HTML5规范定义的如何跨域访问资源。
Origin表示本域,也就是浏览器当前页面的域。当JavaScript向外域(如sina.com)发起请求后,浏览器收到响应后,首先检查
Access-Control-Allow-Origin是否包含本域,如果是,则此次跨域请求成功,如果不是,则请求失败,JavaScript将无法获取到响应的任何数据。
假设本域是
my.com,外域是sina.com,只要响应头Access-Control-Allow-Origin为http://my.com,或者是*,本次请求就可以成功。