CORS(跨域资源共享)

通过XHR实现Ajax通信的一个主要限制就是跨域安全策略。CORS(Cross Origin Resource Sharing,跨域资源共享)定义了在必须访问跨域资源时,浏览器与服务器如何沟通。

cors,把请求分为2种

  • 简单请求(simple request)
  • 非简单请求 (preflight request),请求方法是OPTIONS

那区分二者的标准是什么? 如下:

  • 请求的方法只能是GET, POST, HEAD的一种
  • 请求的header的只能是Accept,Accept-Language, Content-Language,Content-Type这些字段,不能超出这些字段
  • 对于请求的header的Content-Type字段,只能是以下值
    text/plain
    multipart/form-data
    application/x-www-form-urlencoded

都满足以上条件的就是简单请求,否则就是非简单请求。
比如我们经常使用的Content-Type:application/json; charset=utf-8,这个请求就是非简单请求

作者:答案cp3
链接:https://juejin.cn/post/7028169618405457956
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

IE对CORS的实现

通过XDR实现,XDR与XHR的区别:

  • 不携带cookie
  • 只能设置请求头部信息中的Content-Type字段
  • 不能访问响应头部信息
  • 只支持Get和Post请求

其他浏览器对CORS的实现

通过跨域XHR实现,限制如下:

  • 不能使用setRequestHeader()设置自定义头部
  • 不能发送和接受cookie
  • 调用getAllResponseHeaders()方法时总是返回空

预检请求(Preflighted Requests)

一个 CORS 预检请求是用于检查服务器是否支持 CORS 即跨域资源共享。支持开发人员使用自定义的头部、GET或POST之外的方法,以及不同类型的主体内容。
这种请求使用OPTION方法发送下列头部信息

  • Origin:与简单请求相同
  • Access-Control-Request-Method:请求自身使用的方法
  • Access-Control-Request-Headers:自定义的头部信息,多个头部信息用逗号隔开。
    如果预检请求通过了,在一定时间内重复请求是不用再次发起预检请求。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值