Ajax JSON 跨域请求 服务(WebApi,WCF或者其他)

直接来干货。

程式在 单台IIS下工作正常,换到域名下(负载均衡)就开开各种跨域了。研究了下,只要是符合以下条件的,基本上可以通用一种解决方案:

条件是:

  1. HTTP方法:GET,Head,POST之外的方法

  2. 使用POST方法,而且使用application/x-www-form-urlencoded, multipart/form-data, or text/plain 之外的 Content-Type,例如:以 POST 发送XML、JSON 等

  3. 使用自定义头

解决方案:

  移除 IIS下的OPTIONSVerbHandler Handle Mapping,

  或者 在WebConfig 种 添加:

 <system.webServer>
<handlers>
      <remove name="OPTIONSVerbHandler" />
      <!-- 略 -->
    </handlers>
  </system.webServer>

  再或者 直接拦截OptionS请求,

  

if (request.Method.Method==HttpMethod.Options.Method)
                {
                    return base.SendAsync(request, cancellationToken).ContinueWith(
                        task => { return request.CreateResponse(HttpStatusCode.OK); }
                            );
                }

究其原因,AJAX请求时,总会先发送一个OptionS,接着才发正常的请求。而IIS默认对Options的直接拦截,不做处理,直接返回,但是未包含 Access-Control-Allow-Origin Header,所以请求失败,就没有第二次正常的请求了。

时间: 2024-10-08 01:05:36

Ajax JSON 跨域请求 服务(WebApi,WCF或者其他)的相关文章

原生JS实现Ajax及Ajax的跨域请求

  前  言          如今,从事前端方面的程序猿们,如果,不懂一些前后台的数据交互方面的知识的话,估计都不太好意思说自己是程序猿.当然,如今有着许多的框架,都有相对应的前后台数据交互的方法. 而,其中,用得最多的应该苏算是JQuery的Ajax了.但是,今天,影子向大家介绍的是原生js的Ajax,及跨域请求. 一. JQuery的Ajax 首先,先回忆下JQuery的Ajax写法: $.ajax({ url: , type: '', dataType: '', data: { }, s

原生JS实现Ajax的跨域请求

原生JS如何实现Ajax的跨域请求? 在解决这个问题之前,我们务必先清楚为什么我们要跨域请求,以及在什么情况下会跨域请求. 了解一下:"同源策略",你就知道了: 同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互.这是一个用于隔离潜在恶意文件的关键的安全机制. 它的定义是: 一段脚本向后台请求数据,只能读取属于同一协议名.同一主机名.同一端口号下的数据: 所以,请求不同协议名.不同端口号.不同主机名下面的文件时, 将会违背同源策略,无法请求成功,需要进行跨越处理!!

Ajax之跨域请求

一.引子 我现在开启了两个django项目,分别叫Demo1和Demo2,Demo1中有一个路径'http://127.0.0.1:8000/index/',对应的视图是index视图返回一个index页面,页面中只有一个button按钮,按钮绑定了一个单击事件,点击之后会发送一个ajax请求,请求的路径为'http://127.0.0.1:8001/ajax/',Demo1的ip和端口号是:'http://127.0.0.1:8000/',Demo2的ip和端口号是:'http://127.0

Ajax-07 基于Ajax实现跨域请求

跨域 跨域名访问,如c1.com域名向c2.com域名发送请求 本质:浏览器存在同源策略机制,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性. django服务端准备 url.py: from django.conf.urls import url from hello import views urlpatterns = [ url(r'cors/', views.cors, name='cors'), url(r'jsonp/', views.jsonp, name=

JSON跨域请求

轻松搞定JSONP跨域请求 一.同源策略 要理解跨域,先要了解一下"同源策略".所谓同源是指,域名,协议,端口相同.所谓"同源策略",简单的说就是基于安全考虑,当前域不能访问其他域的东西. 一些常见的是否同源示例可参照下表: 在同源策略下,在某个服务器下的页面是无法获取到该服务器以外的数据的.例如我们在自己的网站通过ajax去获取豆瓣上https://developers.douban.com/wiki/?title=api_v2提供的接口数据.这里我们以搜索图书为

ajax j跨域请求sonp

需求 遇到的问题 解决方案 需求 如今,该项目需要获得数据访问外部链接.它是跨域.使用ajax 直提示: 遇到的问题 1. 怎样使用ajax 跨域请求数据 2. 能不能post请求 解决的方法 经过网上查找资料.能使用jsonp请求跨域数据. jsonp请求数据仅仅能get.不支持post跨域请求 用法.见代码: $.ajax({ type: "post",//这里写post也没用,也是get请求 url: "url", dataType: "jsonp&

ajax本地跨域请求以及解决方法

什么是跨域? ??我们通常所说的跨域是狭义的,是由浏览器同源策略限制的一类请求场景.所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源,只要没有同时满足这三个条件的请求即为跨域请求,跨域请求控制台一般会出现类似错误: XMLHttpRequest cannot load http://xxxxx.php. No 'Access-Control-Allow-Origin' header is present on the requested reso

使用mui.ajax完成跨域请求

一.代码 mui.ajax({ type:"post", url: serverip + '/api/v1/requestSMS/?jsoncallback=?', async:false, data: { mobile: mobile }, dataType: "jsonp", jsonp: "jsoncallback", success: function(data, status, xhr){ console.log("succe

Ajax 跨域请求 jsonp获取json数据

遇到Ajax的跨域请求出问题 找了中解决办法如下: 参考内容:http://justcoding.iteye.com/blog/1366102 由于受到浏览器的限制,该方法不允许跨域通信.如果尝试从不同的域请求数据,会出现安全错误.如果能控制数 据驻留的远程服务器并且每个请求都前往同一域,就可以避免这些安全错误.但是,如果仅停留在自己的服务器上,Web 应用程序还有什么用处呢?如果需要从多个第三方服务器收集数据时,又该怎么办? 理解同源策略 同源策略阻止从一个域上加载的脚本获取或操作另一个域上的