.net Core用法:
1. startUP中Configure方法添加:
//使用跨域
app.UseCors("AllowAllOrigin");
2. startUP中ConfigureServices中添加:
services.AddCors(op => { op.AddPolicy("AllowAllOrigin", builder => { builder //.WithOrigins(urls) .AllowAnyMethod() .AllowAnyHeader() // .AllowAnyOrigin()//允许所有主机访问 .AllowCredentials();//允许处理cookie }); });
3. BaseController
使用[EnableCors("AllowAllOrigin")]
一、浏览器不允许Ajax跨站请求,所以存在Ajax跨域问题,目前主要有两种办法解决。
1、在请求页面上使用Access-Control-Allow-Origin标头。
使用如下标头可以接受全部网站请求:
header('Access-Control-Allow-Origin:*')
使用如下标头可以接受指定网站请求:
header('Access-Control-Allow-Origin:http://www.abc.com')
所以,服务器写法:
header('Access-Control-Allow-Origin:*'); die( json_encode(array('msg'=>'msg....')) );
ajax写法和平常一样:
<script> $.ajax({ url:'http://192.168.1.124/homekoo.com/zde/cors_1.php', dataType:'json', success:function(data){ alert(data.msg); } }); </script>
二、跨域通信的几种方式:
-
1、JSONP
-
2、WebSocket
-
3、CORS
-
4、Hash
-
5、postMessage
1 .在CORS和postMessage以前,我们一直都是通过JSONP来做跨域通信的。
JSONP的原理:通过<script>
标签的异步加载来实现的。比如说,实际开发中,我们发现,head标签里,可以通过<script>
标签的src,里面放url,加载很多在线的插件。这就是用到了JSONP。
JSONP的实现:
比如说,客户端这样写:
<script src="http://www.smyhvae.com/?data=name&callback=myjsonp"></script>
上面的src中,data=name
是get请求的参数,myjsonp
是和后台约定好的函数名。
服务器端这样写:
myjsonp({
data: {}
})
于是,本地要求创建一个myjsonp 的全局函数,才能将返回的数据执行出来。
2. WebSocket的用法如下:
var ws = new WebSocket('wss://echo.websocket.org'); //创建WebSocket的对象。参数可以是 ws 或 wss,后者表示加密。
//把请求发出去
ws.onopen = function (evt) {
console.log('Connection open ...');
ws.send('Hello WebSockets!');
};
//对方发消息过来时,我接收
ws.onmessage = function (evt) {
console.log('Received Message: ', evt.data);
ws.close();
};
//关闭连接
ws.onclose = function (evt) {
console.log('Connection closed.');
};
WebSocket的最大特点,就是后台脚本不限语言,标准输入(stdin)就是 WebSocket 的输入,标准输出(stdout)就是 WebSocket 的输出。
3. CORS与JSONP的使用目的相同,但是比JSONP更强大。
JSONP只支持GET
请求,CORS支持所有类型的HTTP请求。JSONP的优势在于支持老式浏览器,以及可以向不支持CORS的网站请求数据。