1. host
1.1 定義
Host 請求頭指明了請求服務器的域名/IP地址和端口號。
組成:域名+端口號
例子:test.com:1998
如果沒有給定端口號,會自動使用被請求服務的默認端口(比如請求一個HTTP的URL會自動使用80端口)。
HTTP/1.1 的所有請求報文中必須包含一個 Host 頭字段。如果一個 HTTP/1.1 請求缺少 Host 頭字段或者設置了超過一個的 Host 頭字段,一個400(Bad Request)狀態碼會被返回。
1.2 用途
我們知道,不同的域名通過 A 記錄或者 CNAME 方式可以連接都同一個 IP 下,同一個 IP 也可以設置多個不同站點,那么訪問不同的域名都轉發到同一 IP ,怎么區分這些不同的站點呢,就是用的 Host 字段。這樣每次訪問都會根據不同的 Host 的信息請求到不同的站點上面。
簡而言之,就是主要應用在虛擬主機技術上。虛擬主機(virtual hosting)即共享主機(shared web hosting),可以利用虛擬技術把一台完整的服務器分成若干個主機,因此可以在單一主機上運行多個網站或服務。
比如說有一台 ip 地址為 11.11.11.11 的服務器,在這台服務器上部署着淘寶、京東、拼多多的網站,並且配置了三個虛擬主機:a.com, b.com, c.com, 這三個域名都指向 11.11.11.11。 當我們訪問 c.com 的網站時,看到的是拼多多的頁面而不是淘寶和京東的頁面,原因就是 Host 請求頭決定着訪問哪個虛擬主機。
2. referer
2.1 定義:
Referer 首部包含了當前請求頁面的來源頁面的地址,即表示當前頁面是通過此來源頁面里的鏈接進入的。
組成:協議+域名+端口號+路徑+參數(注意,不包含 hash值)
例子:http://test.com:1998/home
需要注意的是 referer 實際上是 “referrer” 誤拼寫。
在以下幾種情況下,Referer 不會被發送:
來源頁面采用的協議為表示本地文件的 “file” 或者 “data” URI;
當前請求頁面采用的是非安全協議,而來源頁面采用的是安全協議(HTTPS);
直接輸入網址或通過瀏覽器書簽訪問;
使用 JavaScript 的 Location.href 或者是 Location.replace();
使用 html5 中 noreferrer
2.2 用途
服務端一般使用 Referer 首部識別訪問來源,可能會以此進行統計分析、日志記錄以及緩存優化等,還有個常見的用途是圖片防盜鏈。
防盜鏈原理是:當用戶訪問網頁時,referer就是前一個網頁的URL;如果是圖片的話,通常指的就是圖片所在的網頁。當瀏覽器向服務器發送請求時,referer就自動攜帶在HTTP請求頭了。
圖片服務器根據這個請求頭判斷,如果 referer 不是自己的服務器,就將其攔截。
比如說掘金的圖片:
https://user-gold-cdn.xitu.io/2019/9/23/16d5d0e6314aac90?imageView2/0/w/1280/h/960/format/webp/ignore-error/1
直接在瀏覽器中打開是可以訪問的,因為此時 referer 不會被發送。
而如果把圖片放到自己的網站下,是看不到正常圖片的。
因為 referer 不在掘金白名單里。(掘金、微信等客戶端能看到,因為在掘金白名單里)
那么如何破解盜鏈呢,常用的是用一個服務器程序作為代理爬蟲,服務器爬蟲可以自由地設置請求頭。
但是 referrer 存在很多問題。比如說在請求外部網站的時候,攜帶着 url 的很多參數信息,而這些信息實際上是隱私的,所以存在一定的隱私暴露風險。
下面的 origin 就不存在這種隱私問題。
3.1 定義
請求首部字段 Origin 指示了請求來自於哪個站點。該字段僅指示服務器名稱,並不包含任何路徑信息。除了不包含路徑信息,該字段與 Referer 首部字段相似。
該首部用於 CORS 請求或者 POST 請求。
組成:協議+域名+端口號
注意:只有跨域請求(可以看到 response 有對應的 header:Access-Control-Allow-Origin),或者同域時發送post請求,才會攜帶origin請求頭。
如果瀏覽器不能獲取請求源,那么 origin 滿足上面情況也會攜帶,不過其值為null。
而referer不論何種情況下,只要瀏覽器能獲取到請求源都會攜帶。如果瀏覽器如果不能獲取請求源,那么請求頭中不會攜帶referer。
3.2 用途
用於 CORS: 當我們的瀏覽器發出跨站請求時,服務器會校驗當前請求是不是來自被允許的站點。服務器就是通過 Origin 字段的值來進行判斷。
我就是個搬運工
————————————————
版權聲明:本文為CSDN博主「wanglele16」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wanglele16/article/details/101547020