iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 8
0
自我挑戰組

寇丁人妻的前端書蟲日誌系列 第 8

Day08:圖解 HTTP Chapter05 與 HTTP 協作的網頁伺服器 筆記精要

用單台虛擬主機實作多個域名

HTTP / 1.1 開始允許一台伺服器可以建立多個網頁站點。例如:提供網頁寄存服務的公司可以用一台伺服器幫多個客戶服務,以每個客戶持有的域名運作各自的網站,這是利用虛擬主機的關係。

在網路上域名通過 DNS 來進行域名解析,關聯到 IP 地址再訪問目標網站。如果一台伺服器寄存了兩個域名,當收到請求的時候就要知道需要訪問哪個域名。

在一樣 IP 地址下,由於虛擬主機可以寄存不同主機名和域名的 URI,在發送請求時,必須在 host 首部內完整指定主機名稱與 URI。

通訊資料轉發順序:代理、閘道、隧道

HTTP 通訊,除了客戶端和伺服端外,還有一些用於通訊資料轉發的程式,例如:代理、閘道、隧道。他們可以將請求轉發給通訊線路上的下一站伺服器,並可以接收從那台伺服器發送的回應再轉發給客戶端。

  • 代理
    代理是處理轉發的一種程式,他算是伺服端與客戶端的中介站,接收客戶端的請求再轉發給伺服端,也接收伺服端的回應給客戶端。

  • 閘道
    轉發其他伺服器資料的伺服器,接收從客戶端發出的請求時,他就像擁有資料一樣對請求進行處理,有時候客戶端不會知道自己發出的對象是個閘道。

  • 隧道
    隧道是在隔很遠的客戶端和伺服器兩者的中間進行中轉,以保持通訊連接。

代理

代理在接收請求後轉發給其他的伺服器,代理不會改變請求的 URI,會直接轉發給前方持有資源的伺服器,而真正持有資源的伺服器叫做來源伺服器,再從來源伺服器回傳回應,經過代理伺服器再到客戶端。

每次經過代理伺服器轉發請求或回應,會追加 Via header 訊息來標示經過的主機訊息。在通訊的過程中,可以串連多台代理伺服器,請求和回應會像鍊子一樣被連接起來。

什麼時候要使用代理伺服器?利用緩存減少網路頻寬的流量,針對特定網站的請求控制等等。

代理有兩種方式,分為是否使用緩存跟是否修改訊息:

  • 緩存代理:代理轉發回應時,緩存代理會預先將資料緩存在代理伺服器上,當再接收請求時,就可以不用再對來源伺服器那邊取得資料,而是使用保留在代理伺服器上的資料當作回應回傳。
  • 透明代理:轉發請求或回覆時,不對訊息做任何加工處理稱為透明代理,反之稱為非透明代理。

閘道

閘道和代理非常相似,而閘道可以提供通訊線路上非 HTTP 的服務,利用閘道可以提供通訊的安全性,因此可以在客戶端與閘道之間進行加密,例如閘道連接資料庫使用 SQL 語法來查詢資料,另外在購物網站上做信用卡結算時,閘道可以和信用卡系統做連動。

隧道

隧道可以依照需求建立與其他伺服器的通訊線路,到時候可以用 SSL 加密進行通訊,隧道主要是能確保客戶端和伺服端進行安全的通訊,隧道不會去解析 HTTP 請求,也就是保持原本的請求中轉給伺服器,隧道會在雙方斷開連結的時候結束。

保存資訊的緩存

緩存是指代理伺服器和客戶端本地硬碟保存的資料副本,利用緩存可以減少對來源伺服器的訪問,也就節省了流量和時間。

緩存伺服器是代理伺服器的一種,歸類在緩存代理中,意思就是說當代理轉發從伺服器的回應時,代理伺服器會保存一份資料的複製。

緩存伺服器可以利用緩存避免多次從來源伺服器轉發資料,因此客戶端可就近從緩存伺服器取得資料,而來源伺服器也不用多次處理相同請求。

緩存的有效期限

即使緩存伺服器裡面有緩存,也不能保證每次都會返回一樣的資料的請求,因為這關係到緩存資料的有效性。當來源伺服器上的資料更新,如果緩存還是一樣,那就會演變成回傳到舊資料。

即使有緩存,也會因為客戶端的要求、緩存等因素像來源伺服器確認資料的有效性,如果判斷緩存失效,就會再次向來源伺服器取得新資料。

客戶端的緩存

緩存可以存在伺服器,也可以存在客戶端的瀏覽器,如果瀏覽器有緩存就不需要再跟伺服器請求相同的資料,可以直接在本地端讀取,再來當判定緩存過期之後,會再跟來源伺服器確認資料的有效性,但判斷失效,瀏覽器會在請求資料。

在 HTTP 以前的協議

  • FTP
  • NNTP
  • Archie
  • WAIS
  • Gopher

資料來源:《圖解 HTTP》 上野宣 人民郵電出版社
筆記純屬推廣及分享,如有侵權,請告知。
Please advise to remove immediately if any infringement caused.


上一篇
Day07:YDKJS 第三次讀書會
下一篇
DAY09: 圖解 HTTP Chapter06 HTTP 首部 筆記精要(上)
系列文
寇丁人妻的前端書蟲日誌30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言