Host 請求頭指明瞭請求服務器的域名/IP地址和端口號。html
組成:域名+端口號html5
例子:test.com:1998web
若是沒有給定端口號,會自動使用被請求服務的默認端口(好比請求一個HTTP的URL會自動使用80端口)。跨域
HTTP/1.1 的全部請求報文中必須包含一個 Host 頭字段。若是一個 HTTP/1.1 請求缺乏 Host 頭字段或者設置了超過一個的 Host 頭字段,一個400(Bad Request)狀態碼會被返回。瀏覽器
咱們知道,不一樣的域名經過 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 請求頭決定着訪問哪一個虛擬主機。服務器
Referer 首部包含了當前請求頁面的來源頁面的地址,即表示當前頁面是經過此來源頁面裏的連接進入的。微信
組成:協議+域名+端口號+路徑+參數(注意,不包含 hash值)post
須要注意的是 referer 其實是 "referrer" 誤拼寫。
在如下幾種狀況下,Referer 不會被髮送:
服務端通常使用 Referer 首部識別訪問來源,可能會以此進行統計分析、日誌記錄以及緩存優化等,還有個常見的用途是圖片防盜鏈。
防盜鏈原理是:當用戶訪問網頁時,referer就是前一個網頁的URL;若是是圖片的話,一般指的就是圖片所在的網頁。當瀏覽器向服務器發送請求時,referer就自動攜帶在HTTP請求頭了。 圖片服務器根據這個請求頭判斷,若是 referer 不是本身的服務器,就將其攔截。
好比說掘金的圖片:
user-gold-cdn.xitu.io/2019/9/23/1…
直接在瀏覽器中打開是能夠訪問的,由於此時 referer 不會被髮送。
而若是把圖片放到本身的網站下,是看不到正常圖片的。
由於 referer 不在掘金白名單裏。(掘金、微信等客戶端能看到,由於在掘金白名單裏)
那麼如何破解盜鏈呢,經常使用的是用一個服務器程序做爲代理爬蟲,服務器爬蟲能夠自由地設置請求頭。
可是 referrer 存在不少問題。好比說在請求外部網站的時候,攜帶着 url 的不少參數信息,而這些信息其實是隱私的,因此存在必定的隱私暴露風險。 下面的 origin 就不存在這種隱私問題。
請求首部字段 Origin 指示了請求來自於哪一個站點。該字段僅指示服務器名稱,並不包含任何路徑信息。除了不包含路徑信息,該字段與 Referer 首部字段類似。
該首部用於 CORS 請求或者 POST 請求。
組成:協議+域名+端口號
注意:只有跨域請求(能夠看到 response 有對應的 header:Access-Control-Allow-Origin),或者同域時發送post請求,纔會攜帶origin請求頭。 若是瀏覽器不能獲取請求源,那麼 origin 知足上面狀況也會攜帶,不過其值爲null。
而referer不論何種狀況下,只要瀏覽器能獲取到請求源都會攜帶。若是瀏覽器若是不能獲取請求源,那麼請求頭中不會攜帶referer。
用於 CORS: 當咱們的瀏覽器發出跨站請求時,服務器會校驗當前請求是否是來自被容許的站點。服務器就是經過 Origin 字段的值來進行判斷。
參考