Ahm*_*bbi 9 iis windows-authentication cors preflight
我在谷歌和Stack溢出搜索了很多,为我的问题找到了解决方案,但没有任何效果.
这是我的问题:
我使用IIS 7和一个名为WebDEV的特殊编程环境,它不允许直接操作OPTIONSHTTP方法.因此,所有使用代码建议某种服务器端请求处理的解决方案都是不可行的.
我必须使用Window身份验证并禁用匿名访问
我有一个页面使用CORS POST到此服务器.正如此POST应该具有的那样Content-type: Octet-stream,浏览器会发出预检.
当我启用匿名访问时,一切正常(CORS已配置好)
当我禁用匿名访问时,服务器会回复HTTP 401对预检请求的未授权响应,因为它不包含凭据信息.
我试图为IIS写一个接受这样的OPTIONS请求的模块,但是它没有用(无法将模块正确地添加到IIS)
public class CORSModule : IHttpModule
{
public void Dispose() {
}
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += delegate
{
if (context.Request.HttpMethod == "OPTIONS")
{
var response = context.Response;
response.StatusCode = (int)HttpStatusCode.OK;
}
};
}
}
Run Code Online (Sandbox Code Playgroud)问题是:如何在不启用匿名访问或编写某些服务器端代码的情况下,使用HTTP 200响应预检请求?是否有一个简单的配置或现成的模块供IIS使用?至少,将上述模块安装到IIS 7中的具体步骤是什么?
这是使用"URL重写"IIS模块的解决方案.它完美地运作.
1-停止IIS服务(可能没有必要)
2-从https://www.microsoft.com/web/downloads/platform.aspx安装"web平台安装程序"
3-转到"应用程序"选项卡,搜索"URL重写"并下载
4-安装此修补程序KB2749660(可能没有必要)
5-打开IIS配置工具,双击"URL Rewrite"
6-添加一个新的空白规则
7-给它任何名字
8-在"匹配URL"中,指定此模式: .*
9-在"条件"中,指定此条件条目:{REQUEST_METHOD}和此模式:^OPTIONS$
10-在"操作"中,指定:操作类型Personalized response,状态代码200,原因Preflight,描述Preflight
11-启动服务器
现在,无论身份验证如何,服务器都应回复对预检请求的200状态代码响应.
备注:我也禁用了所有压缩,我不知道是否重要.
从 AhmadWabbi 的回答中,轻松将 XML 粘贴到您的 web.config 中:
<system.webServer>
<rewrite>
<rules>
<rule name="CORS Preflight Anonymous Authentication" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{REQUEST_METHOD}" pattern="^OPTIONS$" />
</conditions>
<action type="CustomResponse" statusCode="200" statusReason="Preflight" statusDescription="Preflight" />
</rule>
</rules>
</rewrite>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2718 次 |
| 最近记录: |