一、跨域原理
我們先來了解一下什麼是跨域,當一個請求的協議、域名、埠任何一個與當前頁面地址不同的時候,都被當做是跨域。
跨域存在的主要原因是因為瀏覽器的同源策略限制。同源策略存在的原因是保護用戶隱私和數據安全。同源是指協議、域名、埠均相同。
例如,當前頁面所處的域名為www.domain1.com,如果這個頁面需要請求www.domain2.com的資源,就存在跨域問題。
二、解決跨域的幾種方法
1. JSONP
JSONP(JSON with Padding)是一種跨域訪問的解決方案。原理是利用標籤可以跨域訪問資源的特性,向伺服器動態請求獲取JSON數據,然後伺服器返回帶有callback參數的可執行JavaScript腳本,最終在頁面中執行這個腳本,從而實現跨域訪問數據。
<script>
function jsonCallback(data) {
console.log(data);
}
</script>
<script src="https://www.otherDomain.com/getData?callback=jsonCallback"></script>
2. CORS
CORS(Cross Origin Resource Sharing)是一個W3C標準,是一種瀏覽器級的跨域解決方案。開發者只需要在伺服器端設置相關的Header,就能控制哪些域名可以訪問資源。瀏覽器發出跨域請求時,會自動帶上自定義的頭部信息,伺服器判斷請求頭中是否攜帶特定的頭部信息,設定同意跨域請求,然後將相關信息返回給瀏覽器。
Access-Control-Allow-Origin: https://www.allowedDomain.com
Access-Control-Allow-Methods: POST, GET
Access-Control-Allow-Headers: Content-Type
3. 代理
通過伺服器代理,將請求發送到同一域名下的伺服器,再由同一域名下的伺服器請求跨域資源並將結果返回給客戶端。這種方式存在性能問題,並且後端需要搭建代理伺服器,不推薦使用。
4. iframe跨域
藉助iframe可以實現同源的效果,將跨域請求的資源嵌入到一個隱藏的iframe中,再通過window.postMessage()方法將數據和消息傳遞到主窗口。
三、IIS伺服器跨域配置
1. 配置IIS HTTP響應頭
我們可以通過修改IIS伺服器的HTTP響應頭,來允許不同域下的頁面請求該伺服器的資源。
- 打開IIS管理器,選擇需要配置跨域訪問的網站。
- 在網站根目錄右鍵新建Web.config文件,並將以下代碼複製到文件中:
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="POST,GET" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
以上代碼中,Access-Control-Allow-Origin值設置為*表示接受任意來源的請求,Access-Control-Allow-Headers表示允許攜帶的自定義請求頭,Access-Control-Allow-Methods表示允許的請求方法。
2. 配置IIS URL Rewrite模塊
URL Rewrite模塊是IIS的重要組件之一,可以幫助我們對HTTP請求進行重寫和重定向。我們可以通過該模塊來跨域訪問伺服器資源。
- 打開IIS管理器,選擇需要配置跨域訪問的網站。
- 下載並安裝IIS URL Rewrite模塊,可以從以下的鏈接下載。https://www.iis.net/downloads/microsoft/url-rewrite
- 在IIS管理器上方的工具欄中,點擊「URL重寫」打開配置頁面,添加以下配置:
<rewrite>
<outboundRules>
<rule name="CrossDomain" patternSyntax="Wildcard">
<match filterByTags="Tag/A">*.domain1.com</match>
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Rewrite" value="https://{HTTP_HOST}/{R:0}" />
</rule>
</outboundRules>
</rewrite>
以上配置實現了當頁面來源為domain1.com時,將HTTP請求轉換成HTTPS請求,從而實現跨域訪問。
四、結語
以上是iis跨域配置的兩種方式,讀者可以按需選擇適合自己的方法來實現跨域訪問。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/247198.html