HTTP之Web服務器

一臺 Web 服務器可搭建多個獨立域名的 Web 網站,也可做爲通訊路徑上的中轉服務器提高傳輸效率。html

HTTP 報文首部

在報文衆多的字段當中,HTTP 首部字段包含的信息最爲豐富。首部字段同時存在於請求和響應報文內,並涵蓋 HTTP 報文相關的內容信息。因 HTTP 版本或擴展規範的變化,首部字段可支持的字段內容略有不一樣。本書主要涉及 HTTP/1.1 及經常使用的首部字段。瀏覽器

HTTP 首部字段

HTTP 首部字段是構成 HTTP 報文的要素之一。在客戶端與服務器之間以 HTTP 協議進行通訊的過程當中,不管是請求仍是響應都會使用首部字段,它能起到傳遞額外重要信息的做用。
使用首部字段是爲了給瀏覽器和服務器提供報文主體大小、所使用的語言、認證信息等內容緩存

HTTP 首部字段是由首部字段名和字段值構成的,中間用冒號「:」分隔。首部字段名: 字段值例如,在 HTTP 首部中以 Content-Type 這個字段來表示報文主體的 對象類型。
Content-Type: text/html就以上述示例來看,首部字段名爲 Content-Type,字符串 text/html 是字段值。
另外,字段值對應單個 HTTP 首部字段能夠有多個值,以下所示。Keep-Alive: timeout=15, max=100服務器

HTTP 首部字段根據實際用途被分爲如下 4 種類型。
通用首部字段(General Header Fields)請求報文和響應報文兩方都會使用的首部。
請求首部字段(Request Header Fields)從客戶端向服務器端發送請求報文時使用的首部。補充了請求的附加內容、客戶端信息、響應內容相關優先級等信息。
響應首部字段(Response Header Fields)從服務器端向客戶端返回響應報文時使用的首部。補充了響應的附加內容,也會要求客戶端附加額外的內容信息。
實體首部字段(Entity Header Fields)針對請求報文和響應報文的實體部分使用的首部。補充了資源內容更新時間等與實體有關的信息。dom

通用首部字段是指,請求報文和響應報文雙方都會使用的首部。ide

Cache-Control

public 指令
Cache-Control: public
當指定使用 public 指令時,則明確代表其餘用戶也可利用緩存網站

Cache-Control: private
當指定 private 指令後,響應只以特定的用戶做爲對象,這與 public 指令的行爲相反。緩存服務器會對該特定用戶提供資源緩存的服務,對於其餘用戶發送過來的請求,代理服務器則不會返回緩存。加密

Connection 首部字段具有以下兩個做用。

控制再也不轉發給代理的首部字段
管理持久鏈接
Connection: close
HTTP/1.1 版本的默認鏈接都是持久鏈接。爲此,客戶端會在持久鏈接上連續發送請求。當服務器端想明確斷開鏈接時,則指定 Connection 首部字段的值爲 Close。spa

請求首部字段

請求首部字段是從客戶端往服務器端發送請求報文中所使用的字段,用於補充請求的附加信息、客戶端信息、對響應內容相關的優先級等內容。.net

Accept 首部字段可通知服務器,用戶代理可以處理的媒體類型及媒體類型的相對優先級。可以使用 type/subtype 這種形式,一次指定多種媒體類型

Accept-Charset: iso-8859-5, unicode-1-1;q=0.8
Accept-Charset 首部字段可用來通知服務器用戶代理支持的字符集及字符集的相對優先順序。另外,可一次性指定多種字符集。與首部字段 Accept 相同的是可用權重 q 值來表示相對優先級。
該首部字段應用於內容協商機制的服務器驅動協商。

Accept-Language: zh-cn,zh;q=0.7,en-us,en;q=0.3

首部字段 Accept-Language 用來告知服務器用戶代理可以處理的天然語言集(指中文或英文等),以及天然語言集的相對優先級。可一次指定多種天然語言集。
和 Accept 首部字段同樣,按權重值 q 來表示相對優先級。在上述圖例中,客戶端在服務器有中文版資源的狀況下,會請求其返回中文版對應的響應,沒有中文版時,則請求返回英文版響應。

Authorization: Basic dWVub3NlbjpwYXNzd29yZA==
首部字段 Authorization 是用來告知服務器,用戶代理的認證信息(證書值)。一般,想要經過服務器認證的用戶代理會在接收到返回的 401 狀態碼響應後,把首部字段 Authorization 加入請求中。共用緩存在接收到含有 Authorization 首部字段的請求時的操做處理會略有差別。

Host: www.hackr.jp
首部字段 Host 會告知服務器,請求的資源所處的互聯網主機名和端口號。Host 首部字段在 HTTP/1.1 規範內是惟一一個必須被包含在請求內的首部字段。
首部字段 Host 和以單臺服務器分配多個域名的虛擬主機的工做機制有很密切的關聯,這是首部字段 Host 必須存在的意義。請求被髮送至服務器時,請求中的主機名會用 IP 地址直接替換解
決。但若是這時,相同的 IP 地址下部署運行着多個域名,那麼服務器就會沒法理解到底是哪一個域名對應的請求。所以,就須要使用首部字段 Host 來明確指出請求的主機名。若服務器未設定主機名,那直接發送一個空值便可。

 

If-Match

首部字段 If-Match,屬附帶條件之一,它會告知服務器匹配資源
所用的實體標記(ETag)值。這時的服務器沒法使用弱 ETag 值。(請參照本章有關首部字段 ETag 的說明)服務器會比對 If-Match 的字段值和資源的 ETag 值,僅當二者一
致時,纔會執行請求。反之,則返回狀態碼 412 Precondition Failed 的響應。還可使用星號(*)指定 If-Match 的字段值。針對這種狀況,服務器將會忽略 ETag 的值,只要資源存在就處理請求。

 

If-Modified-Since: Thu, 15 Apr 2004 00:00:00 GMT

首部字段 If-Modified-Since,屬附帶條件之一,它會告知服務器若If-Modified-Since 字段值早於資源的更新時間,則但願能處理該請求。而在指定 If-Modified-Since 字段值的日期時間以後,若是請求的資源都沒有過更新,則返回狀態碼 304 Not Modified 的響應。If-Modified-Since 用於確認代理或客戶端擁有的本地資源的有效性。獲取資源的更新日期時間,可經過確認首部字段 Last-Modified來肯定

響應頭部

Location: http://www.usagidesign.jp/sample.html
使用首部字段 Location 能夠將響應接收方引導至某個與請求 URI位置不一樣的資源。基本上,該字段會配合 3xx :Redirection 的響應,提供重定向的URI。
幾乎全部的瀏覽器在接收到包含首部字段 Location 的響應後,都會強制性地嘗試對已提示的重定向資源的訪問。

Proxy-Authenticate: Basic realm="Usagidesign Auth"
首部字段 Proxy-Authenticate 會把由代理服務器所要求的認證信息發送給客戶端。它與客戶端和服務器之間的 HTTP 訪問認證的行爲類似,不一樣之
處在於其認證行爲是在客戶端與代理之間進行的。而客戶端與服務器之間進行認證時,首部字段 WWW-Authorization 有着相同的做用。有關 HTTP 訪問認證,後面的章節會再進行詳盡闡述

Content-Type: text/html; charset=UTF-8
首部字段 Content-Type 說明了實體主體內對象的媒體類型。和首部字段 Accept 同樣,字段值用 type/subtype 形式賦值。參數 charset 使用 iso-8859-1 或 euc-jp 等字符集進行賦值。

 

爲 Cookie 服務的首部字段

Cookie 的工做機制是用戶識別及狀態管理。Web 網站爲了管理用戶的狀態會經過 Web 瀏覽器,把一些數據臨時寫入用戶的計算機內。接着當用戶訪問該Web網站時,可經過通訊方式取回以前
發放的 Cookie。調用 Cookie 時,因爲可校驗 Cookie 的有效期,以及發送方的域、路徑、協議等信息,因此正規發佈的 Cookie 內的數據不會因來自其餘 Web 站點和攻擊者的攻擊而泄露。

Set-Cookie: status=enable; expires=Tue, 05 Jul 201
1 07:26:31 GMT; path=/; domain=.hackr.jp;

HTTPS

HTTP 主要有這些不足,例舉以下。
通訊使用明文(不加密),內容可能會被竊聽不驗證通訊方的身份,所以有可能遭遇假裝沒法證實報文的完整性,因此有可能已遭篡改這些問題不只在 HTTP 上出現,其餘未加密的協議中也會存在這類問題。

雖然使用 HTTP 協議沒法肯定通訊方,但若是使用 SSL 則能夠。SSL 不只提供加密處理,並且還使用了一種被稱爲證書的手段,可用於肯定方。
證書由值得信任的第三方機構頒發,用以證實服務器和客戶端是實際存在的。另外,僞造證書從技術角度來講是異常困難的一件事。因此只要可以確認通訊方(服務器或客戶端)持有的證書,

便可判斷通訊方的真實意圖。

    HTTPS 並不是是應用層的一種新協議。只是 HTTP 通訊接口部分用 SSL(Secure Socket Layer)和 TLS(Transport Layer Securi
ty)協議代替而已。一般,HTTP 直接和 TCP 通訊。當使用 SSL 時,則演變成先和
SSL 通訊,再由 SSL 和 TCP 通訊了。簡言之,所謂 HTTPS,其實就是身披 SSL 協議這層外殼的 HTTP。

相關文章
相關標籤/搜索