IIS环境下同IP多域名JavaScript POST跨域预检405报错修复咨询
问题核心根因
- 前端触发的
TypeError: Preflight response is not successful、TypeError: Failed to fetch两类报错,本质是跨域预检请求未通过:浏览器对携带自定义请求头、非简单Content-Type的POST请求,会自动先发OPTIONS方法的Preflight探测请求,只有预检响应合规才会发送真实POST报文 - 日志特征显示:故障域名的请求全部是
OPTIONS方法收到405状态码,正常域名的请求直接走POST流程返回200,说明同IP下三个域名绑定的IIS站点配置不一致,故障站点未正确放行OPTIONS方法
可落地修复步骤
- 逐站点对齐请求谓词权限
打开IIS管理器,定位到分别绑定mydomainname.com、mydomainname.org、mydomainname.ca的三个站点入口
进入每个站点的「请求筛选」配置,切换到「谓词」标签页,将正常运行的.ca站点的允许谓词规则,完全同步到另外两个故障站点:- 确认开启「允许列表中的动词」开关
- 确保列表中包含
OPTIONS方法的允许条目
- 移除WebDAV模块对OPTIONS请求的拦截
IIS环境下的该类405报错大部分来自默认安装的WebDAV组件,该组件会默认拦截OPTIONS请求返回405:
进入故障站点的「模块」配置页,找到WebDAVModule条目,选择移除即可;无需全局卸载WebDAV功能,仅对故障站点移除该模块的拦截规则即可 - 匹配CORS响应头规则
对照.ca站点的HTTP响应标头配置,给另外两个故障站点添加完全一致的返回规则:- 确保
Access-Control-Allow-Methods响应头包含POST, OPTIONS - 确保
Access-Control-Allow-Origin值匹配前端页面的源地址 - 配置OPTIONS预检请求直接返回200状态码,无需路由到后端业务处理管线
- 确保
- 配置验证
调整完成后无需重启IIS,直接向故障域名发送测试OPTIONS请求,确认返回200状态且携带合规CORS响应头后,触发前端页面的POST请求做最终验证
内容的提问来源于stack exchange,提问作者Warren Pickell
相关产品推荐
相关产品推荐

