HTTP中的Host欄位

2021-09-11 04:31:30 字數 1003 閱讀 9113

說白了,http還是tcp協議,所以發起http請求也就是建立tcp連線並傳送的過程,也就是說connect-->send。

tcp在connect的時候必須要知道對方我ip位址和監聽埠。比如我們要發起對www.baidu.com的請求,那第一步就是得到www.baidu.com對應的ip位址,然後connect,進而send。

在http1.1中新增了乙個host頭,那大家有沒有想過host的作用是什麼。因為在connect的時候已經指定了ip,也就是說connect後已經知道主機了,那還用host做什麼。另外需要說明的是host是1.1中才有的,http1.1中如果沒指定host,則返回404。

用curl做乙個實驗

可以看到,伺服器返回了200,表示成功。在這裡通過-h 指定了host欄位,在請求頭中也確實看到了有host欄位,而且可以看到確實http1.1。再ping一下host

ping www.hao23.net
能ping通host,那也就是說host確實存在。

再看看curl時的那個url,在url指定了主機ip(220.195.19.18),再看上面ping的結果,www.hao23.net的ip為119.147.253.16,這是兩個ip,換句話說在乙個請求**現了兩個不同的主機ip,這是怎麼回事?

當不用-h指定host時,curl會自動講host欄位填充為url中的主機(網域名稱),但最後返回的卻是404。

再換一種方法,用-h中的host替換url中的主機。

我們將url中的220.195.19.18替換成了-h中的www.hao23.net,發現最後的返回是200,也就說最後真正訪問的主機是www.hao23.net。為什麼會這樣?

猜想一下:這裡出現了兩個主機,乙個較明顯,乙個較隱蔽,而真正訪問的是教隱蔽的乙個,感覺有點像總分結構————可以讓所有的url一樣,但host不同,可以根據不同的host將同乙個請求定向到不同發主機,從而達到分布均衡的效果。

事實上,host的存在就是為了實現虛擬web伺服器,我的理解就是實現負載均衡。

HTTP中的Host欄位

說白了,http還是tcp協議,所以發起http請求也就是建立tcp連線並傳送的過程,也就是說connect send。tcp在connect的時候必須要知道對方我ip位址和監聽埠。比如我們要發起對www.baidu.com的請求,那第一步就是得到www.baidu.com對應的ip位址,然後con...

http 請求中host欄位作用

可以實現nginx虛擬伺服器 第一部分解析 目前很多乙個ip對應多個網域名稱的情況 nginx虛擬主機的實現原理 在http請求頭中有host欄位,該欄位預設為請求的url 也可以自己設定 當我們傳送乙個請求時,先通過dns網域名稱解析,得到ip,然後建立tcp連線,當伺服器 以nginx為例 收到...

http頭中的host欄位詳解

host 客戶端指定自己想訪問的http伺服器的網域名稱 ip 位址和埠號。今天同事問了乙個問題引發了我對http頭中host欄位的詳細思考,總結了以下5條。1.host欄位可以是網域名稱,也可以是ip位址。host欄位網域名稱 ip後可以跟埠號,如host www.6san.com 8080 2....