1. 域名

域:由协议,子域名,主域名,端口,请求的资源文件组成

跨域 - 图2

2. 跨域

  1. 跨域: 协议,子域名,主域名,端口不同时候就叫跨域
  2. 当协议,子域名,主域名,端口号,任意一个不同时,就算作不同的域。
  3. 不同域之间请求资源就算做跨域。
  4. Javascript出于安全性的考虑,不允许跨域调用其他页面的对象。简单理解就是因为Javascript同源策略的限制,a.com域名下的js无法操作b.com域名下的对象。
  5. 同源策略:javascript出于同源策略,不允许从一个域访问另一个域的对象。

3. 解决跨域

3.1 jsonp跨域

Jsonp(JSON with Padding) 是 json 的一种”使用模式”,可以让网页从别的域名(网站)那获取资料,即跨域读取数据。

  1. $.ajax({
  2. url:"http://192.168.4.18:8000/ad",
  3. method:"get",
  4. dataType:"jsonp",
  5. success:res=>{
  6. console.log(res)
  7. }
  8. })

3.2 script标签

原理: script不受同源策略的限制

  1. var script = document.createElement("script");
  2. script.src = "http://192.168.4.18:7000/ad?&callback=handleResponse";
  3. document.body.prepend(script);
  4. function handleResponse(res) {
  5. // 对response数据进行操作代码
  6. console.log(res)
  7. }

3.3 服务器端跨域

跨域 - 图3

  1. koa.js
  2. koa2-cors//中间
  3. const cors = require("koa2-cors");
  4. app.use(cors({
  5. origin:"*"
  6. }));
  7. //所有其他的域,都可以访问本域
  1. const koa = require("koa");
  2. const app = new koa();
  3. app.use(async ctx=>{
  4. ctx.set('Access-Control-Allow-Origin','*')
  5. ctx.body = {
  6. name:"cheng"
  7. }
  8. })
  9. app.listen(5000)