前端跨域原理及測試方式

2021-10-06 02:12:59 字數 1296 閱讀 3818

近期專案組做了很多客戶端原生轉h5化的工作,將原生的業務邏輯在fe前端實現一遍,因此需要後端配合工作最多的就是要處理各個介面、靜態資源的跨域問題,接下來對跨域原理及問題進行乙個小的總結。

跨域是瀏覽器在h5頁面施加的乙個安全限制,不允許瀏覽器在當前**執行或者呼叫其他「非同源」的資源和指令碼,源如:「是由三元組組成,即:協議、網域名稱、埠號,h5在請求後端資源時,自身發起的協議哪個屬性與後端配置的跨域規則不一致都會導致跨域問題。

h5與請求後端源

是否同源

非同源(協議不同)

非同源(埠不同)

非同源(協議不同,預設http協議)

/index.html

/getinfo

同源跨域問題產生的流程如下圖所示:

我們模擬www.baidu.com/index.html的h5頁面中的指令碼請求介面www.taobao.com/goods/price/1中的資料
在乙個http請求發起時,瀏覽器首先根據同源策略將自身「源」與後端資源做匹配,若不匹配則傳送的請求為跨域請求(請求header中攜帶origin引數,origin即為h5本地資源位址);接著後端接收到有origin引數的header,將自身資源或介面的跨域策略進行返回。後端一般配置跨域策略有兩個維度,視為同源的網域名稱(access-control-allow-origin)、可執行的http方法(access-control-allow-methods);最後瀏覽器根據自身發起請求的源網域名稱和http方法判斷是否可跨域。

通過上述原理的講述,我們作為後端開發,如何對後端資源(介面)是否跨域進行測試呢?模擬瀏覽器在請求header中新增"origin"即可,在請求header中新增 origin:「www.cloudlearn-h5.speiyou.cn」,測試對應介面是否可以支援www.cloudlearn-h5.speiyou.cn**的h5請求的跨域操作,如果有支援,返回header中會有對應的支援網域名稱及http方法。如下為模擬從源站www.baidu.com發起www.taobao.com/goods/price/1的跨域請求測試,如果返回的header中有對應access-control-allow-origin、access-control-allow-methods,則證明後端資源已經處理跨域。

前端 跨域請求理解及原理

跨域實現的過程大致如下 1 從 發起乙個跨域請求,請求的位址為 2 如果 伺服器b返回乙個如下的header access control allow origin 那麼,這個來自 的跨域請求就會被通過。在這個過程中,request 還會帶上這個header origin 3 不過這裡比較要命的是 ...

js跨域 ajax跨域 跨域方式(前端)

跨域方式 cors 跨域資源共享 當使用xmlhttprequest傳送請求時,瀏覽器會自動加上乙個請求頭 origin,後端在接受到請求後確定響應後會在response headers中加入乙個屬性 access control allow origin,值就是發起請求的源位址 瀏覽器得到響應會進...

webpack 解決前端跨域的原理及方法

跨域問題的產生就是請求不同網域名稱下的資源被拒絕訪問,是瀏覽器的 同源策略 就是一種安全機制 協議 網域名稱 埠 三者只要有一項不同就不可以訪問 webpack解決跨域的原理 解決方式 著急的時候可以先看解決方法,不過更需要看原理,就是為什麼能這麼做。個人理解 同源策略 是瀏覽器做的,所以在訪問服務...