IIS ajax CORS 访问发送自定义Header时分析

本文探讨了一种特定场景下的跨域请求问题,即使用自定义头部导致预检请求(OPTIONS)失败的情况。通过修改IIS配置成功解决了问题,并对可能存在的处理器bug进行了讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:

a站:http://127.0.0.1/a 

b站:http://localhost/b (IIS7.5)

a站用ajax访问b的资源,代码如下:

$.ajaxSetup({ xhrFields: { withCredentials: true } });//带cookie,不是重点

$.ajax({

  url:"http://localhost/b/home/index",

  header:{myheader:"hello"},//自定义头将让浏览器把此次访问当做复杂请求,会先用OPTIONS做 预请求(preflight request)

     success:function(data){

    alert(data);

}

  

});

b站后台:

(1)必须要设置的响应头:

protected void Application_BeginRequest(object sender, EventArgs e)
{
var response = this.Context.Response;

response.Headers["Access-Control-Allow-Origin"] = "http://127.0.0.1";

response.Headers["Access-Control-Allow-Credentials"] = "true";
response.Headers["Access-Control-Allow-Methods"] = "POST,GET,PUT,OPTIONS";
response.Headers["Access-Control-Allow-Headers"] = "myheader";

}

如果一切正常,应该正常调用 alert(data);

但,对,确实没有调用,响应头 Access-Control-Allow-Origin 没有返回给浏览器,预请求没有通过。

(2)webconfig中:

<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>

<remove name="OPTIONSVerbHandler" />

<!--<remove name="OPTIONS" /> iis 8 -->

 

<add name="OPTIONSVerbHandler" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

把(2)加上,一切正常了,alert(data)被调用。

于是,怀疑OPTIONSVerbHandler这个处理器有bug。

但始终没找到代码。

这个ProtocolSupportModule在Protsup.dll中,不是c#的,估计是c++的,不知用什么反射。

 

转载于:https://www.cnblogs.com/whwqs/p/6971660.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值