.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的網站請求數據。