jq ajax的OPTIONS请求

问题描述

今天在进行接口调试的时候,发现某个接口请求了2次。一次GET请求一次OPTIONS请求。

感到诧异,我似乎从始至终只做了一次GET请求,怎么会出现OPTIONS请求。

问题检查

首先第一步,肯定是检查自己的代码。大体浏览一遍后,并没有发现什么新的bug( 笑..

第二步,注释掉我的GET请求然后刷新页面,果然OPTIONS请求消失了,看来问题来自这次GET请求。

第三步,搜索“ajax 两次请求 options”关键词。emmm果然很多雷同的经历,点开几个页面浏览之后问题解决。

问题解决

因为W3C规范中对于跨域请求做了 简单请求 和 复杂请求 的区分,当请求为 复杂请求 时,浏览器会发送一个类型为 OPTIONS 的探测请求来检查请求是否安全,如果OPTIONS获得的回应是拒绝性质的(如403/404/500之类的HTTP状态码),则POST、GET之类的请求将不会发送。

如何区分 简单请求 和 复杂请求

  • 简单请求

1.请求方法是GET、HEAD或者POST,并且当请求方法是POST时,Content-Type必须是application/x-www-form-urlencoded, multipart/form-data或着text/plain中的一个值
2.请求中没有自定义HTTP头部。

  • 复杂请求

1.除GET、HEAD和POST(only with application/x-www-form-urlencoded, multipart/form-data, text/plain Content-Type)以外的其他HTTP方法
2.请求中出现自定义HTTP头部。


评论区