跨域

背景

同源策略:不同域的客户端脚本在没有明确授权的情况下,不能读写对方资源
由于浏览器同源策略的存在,使得某些场景下需要跨域获取数据的场景就需要一些方法来实现跨域请求

同域:同协议 同域名 同端口

ajax跨域之CORS_第1张图片

跨域手段1-CORS

ajax跨域之CORS_第2张图片

举例

服务器A客户端代码




    服务器B服务端代码

    const Koa = require('koa')
    const bodyParser = require('koa-bodyparser')
    const app = new Koa()
    const util = require('./util')
    // bodyParser 插件,处理 post 提交过来的数据
    app.use(bodyParser())
    app.use(async ctx => {
    const url = ctx.url
    util.log(`访问地址:${url};请求方法:${ctx.method}`)
    const origin = ctx.headers.origin //获取域名
    if (origin && ctx.query.cors) {
    ctx.set('Access-Control-Allow-Origin', origin) //满足约定条件,设置响应头
    }
    ctx.body = util.parse({
    data: 'hello cors'
    }, ctx.method)
    })
    app.listen(3000, () => {
    util.log('服务启动,打开 http://127.0.0.1:3000/')
    })

    结果演示

    1.当直接点击获取数据
    ajax跨域之CORS_第3张图片
    响应头中无授权访问字段
    ajax跨域之CORS_第4张图片
    2.当点击跨域访问时
    ajax跨域之CORS_第5张图片
    服务器B返回响应头中带了允许服务器A访问的授权字段
    ajax跨域之CORS_第6张图片