IIS10日志中OPTIONS请求返回200而非301的原因及处理疑问
IIS10日志中OPTIONS请求返回200而非301的原因及处理疑问
嘿,这个问题其实和CORS预请求的机制以及IIS的默认处理逻辑直接相关,我给你捋清楚:
核心原因:CORS预请求的特殊处理逻辑
- OPTIONS是CORS预检查请求:当浏览器要发起跨域的实际请求(比如你的GET)时,会先发送OPTIONS预请求,目的是验证目标服务器是否允许该跨域请求。这个预请求的核心目的是获取CORS权限信息,本身不应该触发业务逻辑里的重定向。
- IIS的默认拦截机制:IIS10会自动处理CORS预请求——它会在执行你的
Response.RedirectPermanent代码之前,就先响应OPTIONS请求,返回200状态码并附带必要的CORS响应头(如果你的站点配置了CORS的话)。而GET请求属于实际业务请求,会正常走到你的重定向逻辑,返回预期的301。
关于是否需要处理的建议
其实这种情况是符合CORS规范的,大概率不需要额外操作,理由如下:
- 浏览器拿到OPTIONS的200响应后,会继续发起原地址的GET请求,这时会收到301重定向,然后跳转到新地址,后续如果新地址需要跨域,浏览器会在新地址重新发起OPTIONS预请求(如果需要)。
- 强制让OPTIONS返回301反而可能出问题:CORS规范里明确不推荐预请求被重定向,部分浏览器不会跟随OPTIONS的重定向,直接导致后续的实际请求失败。
另外你提到的单次OPTIONS请求,大概率是自动化工具在探测站点的跨域权限,这种200返回是正常的,不会影响正常业务,不用太在意。
备注:内容来源于stack exchange,提问作者Merennulli
相关产品推荐
相关产品推荐

