加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

http的默认option请求

(2018-09-28 09:06:43)
分类: 技术
最近开发遇到这样一个问题,http的请求 无论是post和get都会发两个http请求。如果是get会先发一个http option请求,在发一个http get请求。如果是post,会先发一个http option请求,再发一个http post请求。
如果两个http请求间隔时间很短小于五秒,那么option请求就不会出现。
复现条件是
设置了
http头 Content-Type= 'application/json;charset=utf-8 ',
后来查了http协议,如果头是json格式的话,http会先发一个option协议探测服务端是否支持这个格式,以及跨域访问的支持。简单来说就是先派一个排头兵去探探路,如果这个路通了再派大军去访问。

如果设置Content-Type= 'application/x-www-form-urlencoded那么就不会发option去探路。

默认情况下,以flyio为例 get会采用Content-Type= 'application/x-www-form-urlencoded这个头,post会采用application/json;charset=utf-8这个头,所以我们很多地方就会看到post的时候会先发一个option,而get的时候没有。
本质原因是因为Content-Type这个 参数造成的。

我们后台需要对option方法做一些特殊的处理,加快对option的返回。

那么既然application/json访问会增加访问次数,为什么还需要用这个格式呢。因为有些前端需要传很复杂的json,application/x-www-form-urlencoded这个格式无法满足,它只能支持一层简单的json,复杂的多层json无法实现。因此就需要用application/json这个格式,把复杂的json转化为json字符串来传。
注:如果不使用contentType: “application/json”,也就是说contentType为空的时候,则data可以是对象

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有