作者: Colin Jao 饒康立 – VMware資深技術顧問,主要負責VMware NSX產品線,目前致力於網路虛擬化、分散式安全防護技術與新應用遞送方案的介紹與推廣。
延續前篇的『給一般資訊工程師看的HTTP協議名詞解釋』,我們要繼續說明什麼是HTTP內的Header以及Cookie。抓一下前面的圖,當我們使用瀏覽器上的網頁開發工具時,可以檢視HTTP協議的資訊如下:
HTTP Header (表頭、標頭、檔頭)
中文是什麼不重要,通常我們就直呼為Header。Header是HTTP協議內最重要的在瀏覽器與網站間傳遞參數的方法,簡單說明:
- 瀏覽器發出的HTTP Request以及網站回應的HTTP Response內都可以帶多個Header。上圖內顯示HTTP請求內的多個Header。Response內同樣地也有多個Header
- Header是以Type: Value的形式來表示。舉例來說在上圖內,Host這個標頭的內容是www.vmware.com,Accept-Language這個標頭的內容是en-US,en;q=0.8,zh-TW;q=0.5,zh;q=0.3,Connection這個標頭的內容是keep-alive
- 某些Header是標準,定義在RFC裡面的,而某些Header則是所謂的『事實標準』,也就是說沒有RFC定義,但多個廠商產品有使用到,襲以成俗,大家都這樣用,比如說X-Forwarded-For這些。
- 特定企業,或某些特定的瀏覽器,也會定義自己的Header。簡而言之,只要瀏覽器(或是發送Restful-API的來源端)與網站端,兩邊都看得懂就好。
了解Header含義是我們在做網站進階維運與參數配置時常會使用到的,但Header內容眾多,建議大家有興趣或需要使用到時,還是多在Internet上查詢相關資訊,一個可以用來起始的頁面是維基百科的整理 https://en.wikipedia.org/wiki/List_of_HTTP_header_fields,或抓幾個常碰到的放在下面表格:
這裡列出幾個超級常見的Header做簡單的進一步解釋:
- Accept與Content-Type: 用來告知網站,瀏覽器接收/發送的文件型態。瀏覽器要求文件時使用Accept,瀏覽器發送資訊時採用Content-Type
- Authorization:用來進行HTTP認證的資訊
- User-Agent與Server:瀏覽器使用User-Agent告知自己的相關資訊(是哪種瀏覽器,第幾版)。網站使用Server告知自己的相關資訊(是Apache還是IIS啦,第幾版…)
- Location與Referer:當網站告訴瀏覽器要進行轉址 (Redirection) 時,轉址的URL就放在Location這個表頭內,而用戶之前是因為連往哪裡的原始網址,則是記錄在Referer
- Set-Cookie與Cookie:後面會再說明,網站使用Set-Cookie配置出Cookie值,瀏覽器後續的連線就將設定的Cookie放置於Cookie表頭內
- X-Forwarded-For:事實標準,帶入用戶連入的來源IP地址
Cookie
Cookie是由網站建立並由使用者的網頁瀏覽器儲存的小文字資訊。網站可透過Set-Cookie這個標頭把想儲存的資料送給瀏覽器,瀏覽器存下來後,後續往這個網站的連接,就會用Cookie這個標頭,把前面送過來的資訊再傳去給網站。
為什麼要這樣做呢?因為HTTP協議本身是一個『無狀態』的協議。但透過Cookie,網站可以將不同的HTTP要求關聯起來,確認像是
- 哪些不同的HTTP Request是屬於同一個用戶 / 交易
- 這個用戶 / 瀏覽器之前的連線紀錄 / 行為
- 比如說負載平衡器要做連線堅持,同一個用戶或瀏覽器的連線必須往後送往同一個網站時,也可以透過配置cookie來確認哪些request是屬於同一連線。
通常送出一個Cookie時除了名稱與值之外,還有一些額外的屬性配置,包括了但不限制於
- expires: 這個Cookie的保存時間
- domain / path: 這個Cookie可使用的網域與路徑
- secure: 強化安全用,指名這個Cookie是在HTTPS還是未加密的HTTP都可以使用
- samesite: 強化安全用,指名瀏覽器在不同網域內是否可使用此Cookie
- httponly: 強化安全用,限制僅有HTTP連線可加入此cookie(而第三方機制如javascript等不能使用)
好,就先寫到這邊。本篇與前一篇網誌就常見的HTTP名詞作了初步介紹與解釋,主要是希望對沒那麼熟悉HTTP協議的夥伴們一個簡單的描繪,如果大家要進行深入的研究,在Internet上有海量的相關文章可以繼續研讀。熟悉上述名詞後,我們對客戶於網站的進階配置與維運需求,至少應該可以『聽懂』了。
但是聽懂了需求,接著要怎麼做呢?那就是接下來系列文要繼續討論的NSX Advanced Load Balancer內的Policy與Datascript機制了。
Comments
0 Comments have been added so far