圖解http學習筆記2.簡單http協議

簡單HTTP協議

[HTTP協議用於客戶端和服務器端之間的通信]

請求訪問文本或圖像等資源的一段稱爲客戶端。

提供資源響應的一端稱爲服務器端。

兩臺計算機之間使用HTTP協議,在一條線路上,必然有一端是客戶端,一段是服務器端

客戶端和服務器端可能互換。使用HTTP協議可以明確區分客戶端和服務器端。

[通過請求和響應的交換達成通信]

HTTP協議規定,請求從客戶端發送,最後服務器端響應請求並返回。

發送請求:

GET /index.htm HTTP/1.1
Host: hackr.jp

假設這是從客戶端發送給某個個HTTP服務器的請求報文的內容。

起始GET表示請求訪問服務器的類型,稱爲方法(method)。隨後的字符串/index.htm指明瞭請求訪問的資源對象,也叫請求URI(request-URI)。最後的HTTP/1.1表示HTTP的版本號,用來提示客戶端使用的HTTP協議功能。

請求報文是由請求方法、請求URI、協議版本、可選的請求首部字段和內容實體構成.

服務器將請求內容的處理結果以響應的方式返回。

200 OK表示的是狀態碼(status code)和原因短語(reason-phrase)。下一行顯示了創建響應的日期時間,是首部字段(header field)內的一個屬性.

接着以一個空行分隔,之後的內容稱爲資源實體的主體(entitybody).

響應報文基本上由協議版本、狀態碼(表示請求成功/失敗的數字代碼)、用以解釋狀態碼的原因短語、可選的響應首部字段以及實體主體構成。

[HTTP是不保存狀態的協議]

HTTP是一種不保存狀態,即無狀態(stateless)協議。HTTP協議自身不對請求和響應之間的通信狀態進行保存。HTTP這個級別,協議對於發送過的請求或響應都不作持久化處理。

使用HTTP協議,每當有新的請求發送,就有對應的新響應產生。協議本身並不保留之前一切的請求或響應報文的信息。爲了更快的處理事務,確保協議的可伸縮性。

HTTP/1.1雖然是無狀態協議,但爲了實現期望的保持狀態功能,引入了Cookie技術,有了Cookie再用HTTP協議通信,就可以管理狀態。

[請求URI定位資源]

當客戶端請求資源發送請求時,URI需要將作爲請求報文中的請求URI包含在內。

除此之外,如果不是訪問特定的資源而是對服務器本身發起請求,可以用*來代替請求URI。如查詢HTTP服務器支持的HTTP方法種類。

OPTIONS * HTTP/1.1

[告知服務器意圖的HTTP方法

HTTP/1.1使用方法

[GET:獲取資源]

GET方法用來請求訪問已被URI標識的資源。指定的資源經服務器端解析後返回響應內容。如富請求的資源是文本,就返回文本,如果是CGI(Common Gateway Interface,通用網關接口)那樣的程序,則返回經過執行後的輸出結果。

Instance

[POST:傳輸實體主體]

一般用POST來傳輸實體主體而不是GET。POST的主要目的不是獲取響應的主體內容。

[PUT:傳輸文件]

PUT方法用來傳輸文件,像FTP協議的文件上傳一樣,要求在請求報文的主題包含文件內容,然後保存到請求URI指定的位置。

HTTP/1.1的PUT方法自身不帶驗證機制,任何人都可以上傳文件,存在安全性問題,Web網站一般不實用該方法。若配合Web應用程序的驗證機制,或架構機制採用REST(REpresentational State Transfer,表徵狀態轉移)標準的同類Web網站,可能會開放使用PUT方法。

[HEAD:獲取報文首部]

HEAD方法和GET方法一樣,只是不返回報文主體部分。用於確認URI的有效性及資源更新的日期時間。

[DELETE:刪除文件]

DELETE方法用於來刪除文件,與PUT相反。DELETE方法按請求URI來刪除指定的資源。

HTTP/1.1的DELETE方法本身和PUT方法一樣不帶驗證機制。當配合Web應用程序的驗證機制,或遵循REST標準還是可能開放使用。

[OPTIONS:詢問支持的方法]

OPTIONS方法用來查詢針對請求URI指定的資源支持的方法(就比如上面所提到的)。

[TRACE:追蹤路徑]

TRACE方法是讓Web服務器端將之前的請求通信環回給客戶端的方法。

發送請求時,在Max-Forwards首部字段中填入數值,每經過一個服務器端就將該數字減1,當數值剛好減到0時,就停止繼續傳輸。最後接收到請求的服務器端則返回狀態碼200OK的響應。

客戶端通過TRACE的方法可以查詢發送出去的請求是怎樣被加工/修改/篡改的。請求想要連接到源目標服務器可能會通過代理中轉。TRACE就是用來確認連接過程中發生的一系列操作。

TRACE方法容易引發XST(Cross-Site Tracing, 跨站追蹤)攻擊。

[CONNECT:要求用隧道協議連接代理]

CONNECT方法要求在與代理服務器通信。主要使用SSL(Secure Sockets Layer, 安全套接層)和TLS(Transport Layer Security, 傳輸層安全)協議把通信內容加密經網絡隧道傳輸。

[使用方法下達命令]

向請求URI指定的資源發送請求報文時,採用稱爲方法的命令。

方法的作用在於,可以指定請求的資源按期望產生行爲。

方法 說明 支持的HTTP協議
GET 獲取資源 1.0、1.1
POST 傳輸實體主體 1.0、1.1
PUT 傳輸文件 1.0、1.1
HEAD 獲得報文首部 1.0、1.1
DELETE 刪除文件 1.0、1.1
OPTIONS 詢問支持的方法 1.1
TRACE 追蹤路徑 1.1
CONNECT 要求用隧道協議連接代理 1.1
LINK 建立和資源之間的聯繫 1.0
UNLINE 斷開連接關係 1.0

[持久連接節省通信量]

HTTP協議的初始版本匯中,每次HTTP通信就要斷開一次TCP連接。

[持久連接]

持久連接(HTTP Persistent Connections, 稱爲HTTP keep-alive或HTTP connection reuse)的方法。持久連接的特點:只要任意一段沒有明確提出斷開鏈接,則保持TCP連接狀態。

好處:減少了TCP連接的重複建立和斷開所造成的額外開銷,減輕了服務器端的負載。相應的提高了速度。

在HTTP/1.1中,所有的連接默認都是持久連接。HTTP/1.0未標準化、

[管線化]

持久連接使多數請求以管線化(pipelining)方式發送成爲可能。從前發送請求後等待並收到響應,才能發送下一個請求。管線化技術不用等待直接發送下一個請求。

請求數越多,管線化效果越明顯。

[使用Cookie的狀態管理]

HTTP是無狀態協議,他不對之前發生的請求和響應的狀態管理,無法根據之前的狀態進行本次的請求處理。

由於不保存狀態,可以減少服務器的CPU及內存資源的消耗。

Cookie技術通過在請求和響應報文中寫入Cookie的首部字段信息,通知客戶端保存Cookie,當下次客戶端再往該服務器發送請求時,客戶端會自動在請求報文中加入Cookie值後發送。

服務器端發現客戶端發送來的Cookie後,檢查來源,然後對比服務器上的記錄,最後得到之前的狀態信息。

例如:

GET /image/ HTTP/1.1
Host: hackr.jp
Cookie: sid=1342077140226724
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章