两个网站之间需要跨域访问,怎么办?
1、在Web.config里面添加允许跨域的语句
<httpProtocol> <!--跨域--> <customHeaders> <add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Headers" value="Session,Content-Range,Content-Disposition,content-type" /> </customHeaders> </httpProtocol>
但是这样做,就会产生很大的系统漏洞,因为所有的方法都会被跨域请求。如果在Access-Control-Allow-Origin设置固定的允许跨域请求的地址,可由于网站会部署到不同的网址和地址,这个节点会被经常修改,对于运维来说就比较困难了。
2、使用jsonp。
这个jsonp确实可以解决跨域问题,但是对action只能要求成void的。而且还需要设置callback和callback的参数格式,否则即使请求成功,也只能走error方法。
<script> //jsonp里面有个大问题,就是需要将jsonp的callback写在action里面。 $(function () { $("#qwer").click(function () { var code = $("#Code").val(); //设置浏览器支持跨域 //jQuery.support.cors = true; $.ajax({ type: "get", url: "http://localhost:50739/SalesOrder/JsonpActive", dataType: "jsonp", data: { "code": code }, //crossDomain: true, jsonp: "callback", success: function (data) { alert("success " + data.result); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert("error"); } }); }) }); </script>
//jsonp激活序列号 public void JsonpActive(string code) { //Response.Headers.Add("Access-Control-Allow-Origin", "*"); //HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "*"); var result = true; Response.Clear(); Response.Write(Request.QueryString["callback"] + "({"result":"" + result + ""})"); Response.End(); }
3、给单个action设置跨域请求,支持获取页面
$(function () { $("#qwer").click(function () { var code = $("#Code").val(); //设置浏览器支持跨域 jQuery.support.cors = true; $.ajax({ type: "get", url: "http://localhost:50739/SalesOrder/Check, crossDomain: true,//设置浏览器支持跨域 success: function (data) { alert("success " + data); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert("error"); } }); }) });
在action里面设置单独的跨域请求
//允许跨域
HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "*");