关于CORS预检

  最近公司要求去掉所有请求的代理,于是发现了一个很奇妙的问题,请求一个服务时,使用$.GET()返回的是正确的,但是使用openlayers.request.GET则会返回500,

于是打开控制台看看两个请求之间的区别:

 

   心思缜密的我一下子就发现了问题:openlayers.request.GET发出的竟然是options请求,服务对options请求报错,于是便产生了这个问题;

  那么,为什么openlayers.request.GET发出的是options请求呢,那就的跟踪一下openlayers的源码啦,一顿视奸后,openlayers的请求实际是通过XMLHttpRequest对象来实现的,传参也是正确的,到底在哪出问题了呢???

  原来鸭,是由于openlayers在请求时默认带了一个请求头:Access-Control-Request-Headers:x-requested-with,根据CORS规定,这个请求不属于简单请求(simple request)于是便触发了一个"预检"请求,要求服务器确认可以这样请求,这时该服务对option类型的请求报错,就导致了本次问题的产生。

如何解决呢?

  最简单的,让请求作为简单请求发出,以此避免预检,而想要成为简单请求,就得割舍一些东西,“放下我执,方得自在”,同时满足下面的两个条件,才能称之为简单请求

(1) 请求方法是以下三种方法之一:

  • HEAD
  • GET
  • POST

(2)HTTP的头信息不超出以下几种字段:

  • Accept
  • Accept-Language
  • Content-Language
  • Last-Event-ID
  • Content-Type:只限于三个值application/x-www-form-urlencodedmultipart/form-datatext/plain

  

 

 

转载于:https://www.cnblogs.com/ow-Y/p/10537689.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值