两个网站之间需要跨域访问,怎么办?
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(); }
原文:http://www.cnblogs.com/sanqianjin/p/5035324.html