「網頁內容無法訪問」可能是跨域錯誤!

2022-02-04 05:12:43 字數 3809 閱讀 9832

5g 時代的宣傳熱火朝天,萬物互聯的生活沉浸到方方面面,網路資源的訪問成了人們生活中不可或缺的存在。訪問使用的多了也經常會遇到無法訪問的情況,這個時候開啟 console 往往會看到下面這種紅彤彤一片。

紅彤彤的報錯資訊多種多樣。但是圖上這個錯誤相信大家肯定經常見到,其實這就是在開發過程中經常遇到的跨域錯誤。那跨域報錯究竟是怎麼產生的呢?又要怎麼解決呢?

cors,即 cross-origin resource sharing (跨源資源共享)。當乙個資源從與該資源本身所在伺服器不同的域、協議或埠請求乙個資源時,就會發起乙個跨域請求。比如, 的 html 頁面通過

的 src 請求 由於網域名稱不同,就會觸發跨域。這是由於瀏覽器的同源策略造成,當然,這也是為了防止一些 xss、csrf 攻擊。目前的許多 html 頁面都會載入來自不同域下的 css 樣式表,影象和指令碼等資源。因此,解決跨域問題顯得尤為重要。

csrf 攻擊:

cross-site request forgery, 跨站請求偽造。是指黑客引誘使用者開啟黑客的**,在黑客的**中,利用使用者的登入狀態發起跨站請

cors 是現在使用率較高的一種網路瀏覽器技術規範,它為 web 伺服器定義了一種方式,允許網頁從不同的域訪問其資源。跨源資源共享標準通過新增一系列 http 頭,讓伺服器能宣告那些**可以通過瀏覽器訪問該伺服器上的資源。此時需要在 response header 中增加跨域相關配置,這樣就可以使得資源的安全訪問成為可能。

另外,對於那些可能對伺服器資料產生***的 http 請求方法(除 get/post/head 方法),瀏覽器必須首先通過 options 方法發起乙個預檢請求(preflight),從而獲知服務端是否允許該跨域請求。伺服器確認允許後,才會發起實際的 http 請求。

目前所有的主流瀏覽器都已基本提供對跨域資源共享的支援,移動瀏覽器也幾乎全部支援,當然我們的老朋友 ie 瀏覽器有一點特殊要求,不能低於 ie10。

弄清楚了 cors 的原理,我們就可以針對當前的場景和需求進行跨域共享配置。

伺服器端

apache

apache 需要使用 mod_headers 模組來啟用 http 頭的設定,預設是啟用狀態的。只需要修改 apache 配置檔案中的 httpd.conf 檔案:

allowoverride none

require all denied

改為下面**

require all denied

header set access-control-allow-origin *

nginx可以使用 headers 核心模組啟用 cors,該模組預設情況下已編譯到 nginx 中:

add_header access-control-allow-origin *;
iis 7將其新增到應用程式/站點根目錄下的 web.config 檔案中:

<?xml version="1.0" encoding="utf-8"?>

tomcattomcat 包括了對 cors 的支援(從 7.0.41 開始)。可參考:

下面示例演示了最低的 cors 配置:

corsfilter

org.apache.catalina.filters.corsfilter

/*

web 端

asp.net

在源頁面新增如下行:

php

在指令碼中新增如下行:

<?php 

header("access-control-allow-origin: *");

expressjs在 node.js 上的 expressjs 應用中,執行以下操作:

res.header("access-control-allow-origin", "*");

res.header("access-control-allow-headers", "x-requested-with");

next()

});// handle the get for this route

});// handle the post for this route

})對於 cdn 訪問中遇到的跨域問題,又拍雲提供了靈活的 cors 配置來解決。

登陸 cdn 控制台,依次進入:服務管理 > 功能配置 > 訪問控制 > cors 跨域共享,點選【管理】按鈕即可開始配置。如下圖所示:

其次,還可以通過又拍雲強大的邊緣規則來強制新增跨域頭,如圖所示:

推薦閱讀

** ftp、ftps 與 sftp

http/3 來了,你了解它麼?

瀏覽器突然無法訪問網頁

這裡涉及到乙個問題 使用者輸入乙個 然後按回車發生了什麼?1.解析url 協議,網域名稱,埠,路徑,資源,引數 2.dns解析 把網域名稱解析成對應的ip 3.資源請求 拿到ip和埠就能找到目標伺服器,然後帶著各種引數請求伺服器,伺服器收到請求後按照他們協商好的格式,把html返回給瀏覽器 4.解析...

本機無法訪問虛擬機器的網頁

最近在研究在linux系統下開發php,以及熟悉linux系統的操作和管理,維護!今天把lamp環境搭建好之後,想測試下,於是就在 var www html 建立了乙個info.php檔案 phpinfo 然後在本機訪問 奇怪的是無法訪問,我使用ping命令也可以ping通。而且我使用putty 乙...

外部主機無法訪問宿主機內容器是怎麼回事

是因為建立的容器採用的網路型別是 bridge,而宿主機沒有啟用 ip 所以,外部主機請求沒有 到對應容器。需要兩個步驟啟用 ip 功能。來自 docker 官方文件 配置 linux 核心允許 ip sysctl net.ipv4.conf.all.forwarding 1將 iptables f...