cors与jsonp

在.net中,可以在webApiConfig代码里写,也可以在web.config里配置,但都需要引入System.Web.Cors。这些都是服务器端的配置,对整个项目有效。

  {若只想对某个请求有效,也可以在此次请求中的响应头中设置 HttpContext.Current.Response.Headers.Set("Access-Control-Allow-Credentials", "true");

HttpContext.Current.Response.Headers.Set("Access-Control-Allow-Methods", "POST, GET, DELETE, PUT, PATCH,OPTIONS");HttpContext.Current.Response.Headers.Set("Access-Control-Allow-Methods", "POST, GET, DELETE, PUT, PATCH,OPTIONS");

 HttpContext.Current.Response.Headers.Set("Access-Control-Allow-Headers", "Content-Type,access_token_key");(此句意为服务器读取跨域请求过来的headers头时,只能读取"Content-Type,access_token_key"这两个字段,其他不能读取)

}

1、

2、或者web.config

3、当然也可以采用第三种方式,在Global.asax.cs设置

二、jsonp的原理(转载https://www.cnblogs.com/chiangchou/p/jsonp.html)

跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的。

首先我们需要明白,在页面上直接发起一个跨域的ajax请求是不可以的,但是,在页面上引入不同域上的js脚本却是可以的,就像你可以在自己的页面上使用<img src=""> 标签来随意显示某个域上的图片一样。

、那么看下如何使用<script src="">来完成一个跨域请求:

  当点击"跨域获取数据"的按钮时,添加一个<script>标签,用于发起跨域请求;注意看请求地址后面带了一个callback=showData的参数;

  showData即是回调函数名称,传到后台,用于包裹数据。数据返回到前端后,就是showData(result)的形式,因为是script脚本,所以自动调用showData函数,而result就是showData的参数。

  至此,我们算是跨域把数据请求回来了,但是比较麻烦,需要自己写脚本发起请求,然后写个回调函数处理数据,不是很方便。

猜你喜欢

转载自www.cnblogs.com/pengzhong2007/p/10557326.html