iss7 不允许 POST 请求的 OPTIONS 预检请求 - 如何启用?
Posted
技术标签:
【中文标题】iss7 不允许 POST 请求的 OPTIONS 预检请求 - 如何启用?【英文标题】:iss7 does not allow the OPTIONS preflight request for POST request - how to enable? 【发布时间】:2012-11-24 11:53:07 【问题描述】:我们正在运行托管在 Windows Azure 中的 WCF 服务,并尝试从托管在其他地方的网站执行 POST 请求,但事实证明这非常棘手。显然,在 iis7 端的实际 POST 请求之前允许 OPTIONS 预检请求似乎真的很困难。
即使我们的 web.config 中有 <system.webserver>
定义
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Origin,X-Requested-With,Content-Type,Accept" />
<add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS"/>
</customHeaders>
</httpProtocol>
为了安全
<security>
<requestFiltering>
<verbs>
<add verb="OPTIONS" allowed="true" />
</verbs>
</requestFiltering>
</security>
我们不断收到 HTTP 405 Method not Allowed 响应。
我在 *** 的不同帖子中尝试了多种技巧,但我开始感到绝望,因为似乎没有任何效果......网站在 Chrome 中工作,因为它似乎不关心预检响应,但 IE 挂在 HTTP 405响应。
有谁知道无论如何都可以允许通过 web.config 进行预检 OPTIONS 请求(以及如何),或者我们是否需要开始为预检请求实现我们自己的处理程序(如果是这样的话,一个例子会很棒:))?
谢谢, 马蒂
【问题讨论】:
【参考方案1】:查看this thread。我认为 WebDAV 安装在 Web 角色上(虽然无法确认)。您必须 RDP 到 Web 角色实例并检查是否是这种情况。如果是,则需要创建 startup task 来删除 WebDAV。
您也可以查看this 和that 文章,了解如何通过 appcmd 或 vbscript 在 IIS 中配置动词(均可通过启动任务执行)
看来这些东西必须在应用程序主机配置级别进行配置,不允许在 web.config 级别进行。
【讨论】:
感谢 Astaykov 提供的良好链接,我们需要研究这些并开始处理 statup 任务。 一篇有很好解释和完整步骤的博文,作者:here【参考方案2】:IIS(至少版本 7.*)肯定有预检请求处理的错误。 我使用的是经典的 asp 并将此代码添加到 Web.config 解决了这个问题
<handlers>
<remove name="OPTIONSVerbHandler" />
<add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="IsapiModule" scriptProcessor="C:\Windows\System32\inetsrv\asp.dll" resourceType="Unspecified" requireAccess="None" />
</handlers>
【讨论】:
以上是关于iss7 不允许 POST 请求的 OPTIONS 预检请求 - 如何启用?的主要内容,如果未能解决你的问题,请参考以下文章
PHP配置请求头允许跨域拦截OPTIONS请求接收POST请求参数
带有预检的 POST 请求包含允许的来源,但错误是不允许来源
请求 'OPTIONS /logout' 与 'POST /logout' 不匹配