国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【跨域】跨域的簡易實現和測試

ninefive / 1942人閱讀

摘要:前言由于自己平時只做做,并沒有遇到太多跨域問題,今天通過幾個樣例模擬實現了幾種跨域方式。

前言

由于自己平時只做做demo,并沒有遇到太多跨域問題,今天通過幾個樣例模擬實現了幾種跨域方式。原文地址 傳送門

本文所有樣例靜態服務器基于nodejs實現,代碼親測可用。測試步驟如下:

1.為了實現跨域訪問的效果,需要下載http-server 作為一個服務器 npm install http-server。用來掛載靜態頁面 index.html 。(訪問http://127.0.0.1:8080 顯示index.html頁面)
2.運行node創建的靜態服務器node server (node搭建靜態服務向下翻)

JSONP跨域 JSONP實現跨域原理

說道跨域可能最先想到就時 jsonp ,實現原理為:同源策略只限制瀏覽器的行為而不限制js,所以可以將請求寫到 script 標簽中。關鍵代碼如下:


前端發出跨域請求數據后,服務端去解析該請求:

const data={...}
const callback = req.parse(req.url,true).query.callback
res.writeHead(200)

//最關鍵的一步,拼接回調函數和作為函數參數的數據data
res.end(`${callback}(${JSON.stringfy(data)})`)

瀏覽器接收到服務端返回的響應,由于發起請求的是script,相當于直接調用方法并傳入參數

具體實現案例

(服務端代碼,node.js)

const url = require("url");

require("http").createServer((req, res) => {
    const data = {
        x: 10
    };
    const callback = url.parse(req.url, true).query.callback
    res.writeHead(200);
    //回調原頁面上函數處理返回結果
    res.end(`${callback}(${JSON.stringify(data)})`);

}).listen(3000, "127.0.0.1");
console.log("服務器已啟動...");

(前端)



    
        
        
    
    
        
        
    
 
JSONP解決Ajax跨域問題

如果是采用js原生,可以參考傳送門

CORS跨域

實現CORS跨域的思想為:CORS通信和Ajax同源請求沒有區別,關鍵在于服務端的配置。要想實現CORS通信,服務端必須要設置一個自定義頭Access-Control-Origin:""來允許跨域訪問

(樣例僅做了一個最簡單的GET請求demo服務端代碼)

require("http").createServer((req,res)=>{
    res.writeHead(200,{
        "Access-Control-Allow-Origin":"http://127.0.0.1:8080"
    })
    res.end("這是來自端口3000的信息,收好了~")
}).listen(3000,"127.0.0.1")

(前端代碼)



    
        
        
    
    
    
    

cors實現跨域的優點是不但能實現 GET , POST 等簡單請求,還能實現 PUT 等非簡單請求跨域

ServerProxy服務器代理

ServerProxy服務器代理實現跨域的核心思想是:將跨域請求操作發送給服務端,由服務端代為請求,然后將請求結返回過來
這里以獲取 CNode:Node.js專業中文社區 論壇上一些數據為場景。如通過 https://cnodejs.org/api/v1/to...,當時因為不同域,所以你可以將請求后端,讓其對該請求代為轉發。

const url = require("url")
const http = require("http")
const https = require("https")

const server = http.createServer((req,res)=>{
    const path = url.parse(req.url).path.slice(1)
    if(path==="topics"){
        https.get("https://cnodejs.org/api/v1/topics", (resp) => {
            let data=""
            resp.on("data",chunk=>{
                data+=chunk
            })
            resp.on("end",()=>{
                res.writeHead(200,{
                    "Content-Type":"application/json;charset=utf-8"
                })
                res.end(data)
            })
        })
    }
}).listen(3000,"127.0.0.1")

console.log("服務器已啟動...");
postMessage

postMessage是HTML5新增的一項功能,postMessage() 方法允許來自不同源的腳本采用異步方式進行有限通信可以實現跨文本文檔,多窗口,跨域消息傳遞。
利用postMessage不能和服務端交換數據,只能在兩個窗口

(創建recieve.html文件)



    
        
        
    
    
        
    

安全性: postMessage 采用的是 雙向安全機制 。發送方發送數據時,會確認接收方的源,而監聽方監聽到 message 事件后,也可以用 event.origin 判斷是否來自于正確可靠的發送方

webSocket實現跨域

websocket是一中全雙工通信協議,該協議不實行同源政策,只要服務器支持,就可以通過它進行跨源通信
websocket的應用實例:https://segmentfault.com/a/11...

document.domain

對于主域相同跨子域的情況,可以通過設置 document.domain 來解決。具體做法是在 example.com/a.html 和 sub.example.com/b.html 兩個文件分別加上 document.domain = example.com
然后通過a.html 文件創建一個iframe,去控制iframe的 window,從而進行交互

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/91801.html

相關文章

  • 前端跨域方法論

    摘要:說明是否允許通訊同一域名允許同一域名下的不同文件夾允許不同端口號不允許不同協議不允許不同域名不允許主域相同,子域不同不允許跨域解決方案由于瀏覽器同源策略是允許標簽這樣的跨域資源嵌套的,所以標簽的資源不受同源策略的限制。 前言 本著學習和總結的態度寫的技術輸出,文中有任何錯誤和問題,請大家指出。更多的技術輸出可以查看我的 github博客。 整理了一些前端的學習資源,希望能夠幫助到有需要...

    leejan97 評論0 收藏0
  • javaweb服務端跨域支持

    摘要:跨域是瀏覽器攔截了服務器端返回的相應,不是攔截了請求。通過來實現跨域使用來實現跨域可以解決下不能跨域的問題,僅僅支持請求服務端多加一個參數,在返回數據時用把具體的數據包裹起來,傳回前端。 項目開發為了支持web瀏覽器ajax的直接請求,涉及到了跨域的需求,通過學習對跨域有了更深入的認識,現在總結一下: 1.跨域說明 跨域指請求和服務的域不一致,瀏覽器和H5的ajax請求有影響,而對服務...

    kycool 評論0 收藏0
  • javaweb服務端跨域支持

    摘要:跨域是瀏覽器攔截了服務器端返回的相應,不是攔截了請求。通過來實現跨域使用來實現跨域可以解決下不能跨域的問題,僅僅支持請求服務端多加一個參數,在返回數據時用把具體的數據包裹起來,傳回前端。 項目開發為了支持web瀏覽器ajax的直接請求,涉及到了跨域的需求,通過學習對跨域有了更深入的認識,現在總結一下: 1.跨域說明 跨域指請求和服務的域不一致,瀏覽器和H5的ajax請求有影響,而對服務...

    dadong 評論0 收藏0
  • zuul實現Cors域的兩種方式(https)

    摘要:大家都知道可以通過實現跨域。第一種方式在服務下添加一個實現跨域,實現起來方便。前端服務和后端服務在同一臺服務器上,服務調用服務時,服務通過負載均衡進入服務時時,服務的請求跨域成功,時,服務的請求跨域失敗。 大家都知道spring boot 可以通過@CrossOrigin實現跨域。但是在spring cloud 里,如果要粒度那么細的去控制跨域,這個就太繁瑣了,所以一般來說,會在路由z...

    wuaiqiu 評論0 收藏0
  • AJAX 跨域解析

    摘要:這里只講解了兩種常見的跨域方式,因為存在一些弊端,因此推薦使用等方式來解決跨域問題。 一、什么是 AJAX 跨域問題 同源策略規定,AJAX 請求(XMLHttpRequest)只能發給同源的網址,否則就會出錯。所謂的同源策略是指 3 個相同:協議相同、域名相同、端口相同。 比如 http://www.example.com/index.html 這個網址,協議是http ,域名是 w...

    tinylcy 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<