您好,登錄后才能下訂單哦!
這篇文章給大家介紹host、referer和origin的區別有哪些,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
host比較容易理解,來看下MDN網站給的介紹:
Host 請求頭指明了服務器的域名(對于虛擬主機來說),以及(可選的)服務器監聽的TCP端口號。
如果沒有給定端口號,會自動使用被請求服務的默認端口(比如請求一個HTTP的URL會自動使用80端口)。
HTTP/1.1 的所有請求報文中必須包含一個Host頭字段。如果一個 HTTP/1.1 請求缺少 Host 頭字段或者設置了超過一個的 Host 頭字段,一個400(Bad Request)狀態碼會被返回。
從上面的文字中可以總結出如下信息:
1、host的值為客戶端請求的服務器的域名(或者ip)和端口
2、http/1.1中必須包含host請求頭,且只能設置一個;
那么host主要用在什么地方呢?
host用的最多的場景是:單臺服務器設置多個虛擬主機時。
舉個簡單的例子: 我在IP地址為127.0.0.1的服務器上,通過apache配置了兩個虛擬主機:a.com,b.com,這兩個域名通過DNS解析都會指向127.0.0.1,我在瀏覽器中訪問a.com的網站時,DNS將域名轉化為IP地址,此時可以通過客戶端請求頭的host信息判斷訪問的是服務器上對應的虛擬主機。
如圖:
如果沒有host請求頭,客戶端的請求就不能標記出該訪問哪個虛擬主機了。
接著看一下MDN對referer的介紹:
Referer 首部包含了當前請求頁面的來源頁面的地址,即表示當前頁面是通過此來源頁面里的鏈接進入的。服務端一般使用 Referer 首部識別訪問來源,可能會以此進行統計分析、日志記錄以及緩存優化等。
需要注意的是 referer 實際上是 "referrer" 誤拼寫。
在以下兩種情況下,Referer 不會被發送:
1.來源頁面采用的協議為表示本地文件的 "file" 或者 "data" URI;
2.當前請求頁面采用的是非安全協議,而來源頁面采用的是安全協議(HTTPS)。
3.直接輸入網址或通過瀏覽器書簽訪問
4.使用 JavaScript 的 Location.href 或者是 Location.replace()
5.使用html5中noreferrer
<a href="/test/index.php?noreferer" rel="noreferrer" target="_blank">noreferrer</a>
<a href="/test/index.php?noreferer" rel="noreferrer" target="_blank">noreferrer</a>
6.使用 Referer Meta 標簽控制 referer 使用場景,具體參考如下文章:https://www.jb51.net/article/137982.htm
7.使用iframe的hack寫法去除referer。
這里給大家舉一個例子,百度的圖片防盜鏈:
html代碼如下:
鼠標雙擊這張網頁直接打開,也就是file協議訪問,此時是不帶referer的,圖片是顯示的,如圖:
network如圖,此時沒有referer請求頭:
但是我將其發布到服務器上,用http://127.0.0.1/a2.html來訪問,如圖:
圖片不顯示了,為什么呢?觀察請求頭,如圖:
多了一個referer的請求頭,請求頭標識了訪問這張圖片請求的源頭,請求源頭為我的網站,百度圖片服務器根據這個請求頭判斷,然后將我攔截了。
那么如何破解盜鏈呢,常用的是用一個服務器程序作為代理爬蟲,服務器爬蟲可以自由設置請求頭了,還有就是利用iframe的hack寫法了。這種寫法類似xss,那什么是xss呢?這里先不說,下期討論。
iframe去除referer的寫法如下,看代碼:
顯示結果如圖:
再看network如圖:
referer消失了。referer消失后,跳過了百度的防盜鏈。
最后是origin了,看一年MDN對其的介紹:
請求首部字段 Origin 指示了請求來自于哪個站點。該字段僅指示服務器名稱,并不包含任何路徑信息。該首部用于 CORS 請求或者 POST 請求。除了不包含路徑信息,該字段與 Referer 首部字段相似。
可以看到referer與origin功能相似,但是還是有幾點不同,仔細看上面的介紹,總結如下幾點:
1、只有跨域請求,或者同域時發送post請求,才會攜帶origin請求頭,而referer不論何種情況下,只要瀏覽器能獲取到請求源都會攜帶,除了上面提到的幾種情況。
2、如果瀏覽器不能獲取請求源,那么origin滿足上面情況也會攜帶,不過其值為null,如圖:
這點與referer不同,瀏覽器如果不能獲取請求源,那么請求頭中不會攜帶referer。
3、origin的值只包括協議、域名和端口,而erferer不但包括協議、域名、端口還包括路徑,參數,注意不包括hash值。
關于host、referer和origin的區別有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。