跨域

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章