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

场景:

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。

但始终没找到代码。

时间: 2024-11-25 03:30:27

IIS ajax CORS 访问发送自定义Header时分析的相关文章

header() 被用来发送自定义的 HTTP 报文

header() 被用来发送自定义的 HTTP 报文.关于HTTP报文的更多信息请参考? HTTP/1.1 specification. 请注意一点header()必须在任何实际输出之前调用,不管是普通的html标签,还是文件里面的空行,空格或者是PHP文件里的空行,空格.这是一个非常普遍的错误,在通过include,require,或者其访问其他文件里面的函数的时候,如果在header()被调用之前,其中有空格或者空行.如果不是调用其他文件,仅仅是单独使用一个PHP或者HTML文件,在head

ajax发送json数据时为什么需要设置contentType: &quot;application/json”

1. ajax发送json数据时设置contentType: "application/json”和不设置时到底有什么区别?contentType: "application/json”,首先明确一点,这也是一种文本类型(和text/json一样),表示json格式的字符串,如果ajax中设置为该类型,则发送的json对象必须要使用JSON.stringify进行序列化成字符串才能和设定的这个类型匹配.同时,对应的后端如果使用了Spring,接收时需要使用@RequestBody来注解

Access to XMLHttpRequest at &#39;XXX&#39; from origin &#39;XX&#39; has been blocked by CORS policy: No &#39;Access-Control-Allow-Origin&#39; header is present o AJAX跨域请求解决方法

今天出现了一个问题找了好久先看代码: 这可能是个BUG吧插入代码: dataType: 'jsonp', crossDomain: true, 最终: Access to XMLHttpRequest at 'XXX' from origin 'XX' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present o AJAX跨域请求解决方法 原文地址:https://www.cnblogs

ajax 发送json数据时为什么需要设置contentType: &quot;application/json”

1. ajax发送json数据时设置contentType: "application/json"和不设置时到底有什么区别? contentType: "application/json",首先明确一点,这也是一种文本类型(和text/json一样),表示json格式的字符串,如果ajax中设置为该类型,则发送的json对象必须要使用JSON.stringify进行序列化成字符串才能和设定的这个类型匹配.同时,对应的后端如果使用了Spring,接收时需要使用@Req

ajax——CORS跨域调用REST API 的常见问题以及前后端的设置

RESTful架构是目前比较流行的一种互联网软件架构,在此架构之下的浏览器前端和手机端能共用后端接口. 但是涉及到js跨域调用接口总是很头疼,下边就跟着chrome的报错信息一起来解决一下. 假设:前端域名为front.ls-la.me,后端域名为api.ls-la.com.前端需要访问的接口为http://api.ls-la.com/user/info.json,需要用GET方式访问. 现在,用Ajax向后端发送请求,得到第一个错误.(cors跨域的写法参考:http://blog.csdn.

使用PF_PACKET和SOCK_RAW发送自定义type以太网数据包

本文介绍使用PF_PACKET和SOCK_RAW发送自定义type以太网数据包,使用wireshare抓包可以获取到数据包,为Linux内核增加网络协议做铺垫. 先上码: #include <stdio.h> #include <stdlib.h> #include <unistd.h>           // close() #include <string.h>           // strcpy, memset(), and memcpy() #

通过jQuery或ScriptManager以Ajax方式访问服务

1.客户端和服务端 服务端对外提供服务时,可以通过handler或者webservice.handler比较轻便,但是难以对外公开,只有程序员自己知道它到底做了些什么工作.webservice可以将服务对外公开,调用也方便,更加专业些.如果不是要公开的接口,handler完全可以胜任了.下面是将webservice发布的效果. 客户端在调用服务端的服务时,最简单的莫过于使用jQuery了.当然微软也提供了ScriptMananger来访问WebService.他们之间的关系可以用下图说明. 2.

ASP.Net WebAPI与Ajax进行跨域数据交互时Cookies数据的传递

前言 最近公司项目进行架构调整,由原来的三层架构改进升级到微服务架构(准确的说是服务化,还没完全做到微的程度,颗粒度没那么细),遵循RESTFull规范,使前后端完全分离,实现大前端思想.由于是初次尝试,中途也遇到了不少问题.今天就来讨论一下其中之一的问题,WebAPI与前端Ajax 进行跨域数据交互时,由于都在不同的二级域名下(一级域名相同),导致Cookies数据无法获取. 最开始通过头部(Header)将Cookies传输到其WebAPI,也能解决问题. 下面讲述另外一种解决方案. 解决过

nginx反向代理proxy_set_header自定义header头无效的问题

###案例1环境nginx,linux,tomcat域名访问是走nginx给后端服务器处理的,问题是域名经过nginx访问直接不能获取到headers,直接tomcat访问可以那么问题肯定在nginx上无法处理headers的问题了, 经过查询上面资料得到是nginx的锅,hearders有下划线的锅,nginx设置underscores_in_headers on,参照上面配置说.就可以处理,测试:http://apistore.baidu.com/astore/toolshttpproxyA