1.跨域
1)同源政策
-
-
域名相同
-
端口相同(http默认80端口,https默认443端口)
如果非同源,共有三种行为受到限制。
-
-
DOM 无法获得。
-
==AJAX 请求无效==(可以发送,但浏览器会拒绝接受响应)。
在发送Ajax请求的时候,请求的地址只要违反了同源政策,那么就属于跨域请求。
1.1
其原理就是在客户端借助 script
标签请求服务端的一个地址,服务端的这个地址返回一段带有调用某个全局函数调用的 JavaScript 脚本(而非一段 HTML),将原本需要返回给客户端的数据通过参数传递给这个函数,函数中就可以得到原本服务端想要返回的数据。
1.2
$.ajax({ type: 'GET', // 为了兼容各个版本的jQuery,最好在url上加入如下所示的callback // url: 'http://127.0.0.1:4000/getStu2?callback=?', url: 'http://127.0.0.1:4000/getStu2', success: function (res) { console.log(res); }, dataType: 'jsonp' // 必须指定预期服务器返回数据的类型为jsonp }); 要访问接口 app.get('/getStu2', (req, res) => { let data = [ {id: 1, name: '张三疯', age: 30}, {id: 2, name: '张三疯', age: 30}, {id: 3, name: '张三疯', age: 30} ]; data = JSON.stringify(data); // 获取url中的callback参数 // 使用url模块 // 使用express,可以使用req.query来获取参数了 // console.log(req.query); // { callback: 'abcd' } let fn = req.query.callback; res.send(fn + '(' + data + ')'); })
// 实现跨域的快捷方法 // 使用它的时候,必须加callback=? $.getJSON('http://127.0.0.1:4000/getStu2?callback=?', function (res) { console.log(res); }, 'jsonp');
3.1
Cross Origin Resource Share,跨域资源共享
1 app.get('/getStu3', (req, res) => { 2 // // 允许任意源访问,不安全 3 // res.setHeader('Access-Control-Allow-Origin', '*') 4 // 允许指定源访问 5 res.setHeader('Access-Control-Allow-Origin', 'http://www.xxx.com') 6 res.send('hello'); 7 })