美文网首页前端
说说跨域cros的那些事

说说跨域cros的那些事

作者: 沐雨芝录 | 来源:发表于2019-03-06 15:32 被阅读16次

了解跨域之前我们需要知道什么叫”同源策略“,即域名,协议,端口相同。

我们都知道之前有很多跨域方式:
  1. JSOP,动态创建<script>,设置src获取跨域资源。只能GET请求。
  2. 空iframe加form。可支持POST请求。
  3. window.name + iframe跨域。
  4. postMessage + iframe跨域。
接下来主角登场,今天我们说的是CORS(跨域资源共享)

浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)

  • 只要同时满足以下两大条件,就属于简单请求
  1. 请求方法是以下三种方法之一:
    HEAD
    GET
    POST
  2. HTTP的头信息不超出以下几种字段:
    Accept
    Accept-Language
    Content-Language
    Last-Event-ID
    Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
  • 凡是不同时满足上面两个条件,就属于非简单请求。

简单请求

实现过程
(1)后端主要设置Access-Control-Allow-Origin是允许跨域的域名,如果设置*,则表示接受任意域名的请求。
  如果要发送Cookie,Access-Control-Allow-Origin就不能设为星号,必须指定明确的、与请求网页一致的域名。
(2)前端不需要做什么。

非简单请求

非简单请求是请求方法是PUT或DELETE,或者Content-Type字段的类型是application/json。

非简单请求的CORS请求会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight);

 这种情况下除了设置origin,还需要设置Access-Control-Request-Method以及Access-Control-Request-Headers

Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: X-Custom-Header

 Access-Control-Max-Age 该字段可选,用来指定本次预检请求的有效期,单位为秒。

  • 后端
const query = ctx.request.query
    // 如果需要http请求中带上cookie,需要前后端都设置credentials,且后端设置指定的origin
ctx.set('Access-Control-Allow-Origin', 'http://localhost:9099')
ctx.set('Access-Control-Allow-Credentials', true)以及Access-Control-Request-Headers
ctx.set('Access-Control-Request-Method', 'PUT,POST,GET,DELETE,OPTIONS')
ctx.set('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, t')
  • 前端
    接口请求设置headers属性

如headers: {'X-Custom-Header': 'value'};
xhr.setRequestHeader('X-Custom-Header', 'value');

CORS优势在于支持所有类型的HTTP请求,也可支持全部跨域资源。

相关文章

  • 说说跨域cros的那些事

    了解跨域之前我们需要知道什么叫”同源策略“,即域名,协议,端口相同。 我们都知道之前有很多跨域方式: JSOP,动...

  • 解决node跨域问题

    //cros模块:node跨域cros模块 步骤一:安装cros npm install cors --save-...

  • 跨域-CROS

  • 跨域上传图片 cros方式

    FormData ajax 跨域上传图片 cros方式 FormData参考: http://www.jians...

  • 跨域

    博客 说说跨域那些事儿 不要再问我跨域的问题了 前端常见跨域解决方案(全) 同源策略 JSONP(填充式JSON)...

  • 在 AJAX 中开启 CROS

    什么是 CROS cros 是 xhr 中的高级特性,支持跨域请求。 服务端需要在响应头中添加下面的字段来支持其他...

  • CROS和JSON跨域

    在浏览器的同源策略中,一个网站在未退出的情况下不能请求其他网站的资源,这是为了防止安全攻击。 1. CORS 跨域...

  • 交互那些事(二)

    说完ajax我想必须说说jsonp了,谈到jsonp就必须先说说跨域,首先ajax是不能跨域的,除非后台允许跨域或...

  • 说说跨域那些事儿

    首先纠正一个误区,跨域并非浏览器限制了发起跨站请求的这种能力,恰恰相反,我们可以发出请求,服务端也可以接收到请求并...

  • 一文了解跨域问题

    什么是跨域 不同域名之间的资源访问 解决方法 JSONP,CROS JSONP 原理:html带src属性的标签都...

网友评论

    本文标题:说说跨域cros的那些事

    本文链接:https://www.haomeiwen.com/subject/dnizuqtx.html