const xhr = new XMLHttpRequest();
xhr.open("GET", " /api", true);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
alert(xhr.responseText);
}
}
};
xhr.send(null);
ajax请求时,浏览器要求当前网页和server 必须同源(安全)
同源: 协议、域名、端口,三者必须一致
前端: http://a.com:8080/; server:https://b.com/api/xxx;
加载图片css js 可无视同源策略
<img src=跨域的图片地址/>
<link href=跨域的css地址/>
<script src=跨域的js地址></script>
<img />可用于统计打点,可使用第三方统计服务
<link /> <script>可使用CDN ,CDN一般都是外域
<script>可实现JSONP
所有的跨域,都必须经过server端允许和配合
未经server端允许就实现跨域,说明浏览器有漏洞危险信号
访问https://imooc.com/,服务端一定返回一个html文件吗?
服务器可以任意动态拼接数据返回,只要符合html格式要求
同理于<script src= "https://imooc.com/getData.js"></script>
<script>可绕过跨域限制
服务器可以任意动态拼接数据返回
所以,<script>就可以获得跨域的数据,只要服务端愿意返回
response.setHeader("Access-Control-Allow-Origin", "http://localhost:8011");
response.setHeader("Access-Control-Allow-Headers", "X-Requested-with");
response.setHeader(
"Access-Control-Allow-Methods",
"PUT,POST,GET,DELETE,OPTIONS"
);
response.setHeader("Access-Control-Allow-Credentials", "true");