HTTP有兩類報文:請求報文和響應報文,由於 HTTP 是面向正文的(text-oriented),因此在報文中的每一個字段都是一些 ASCII碼串,因而每個字段的長度都是不確定的。(HTTP2引入了二進制協議)
這兩種報文的結構基本上是相同的,都是由三部分組成:開始行(用於區分是請求報文還是響應報文)、首部行(一些鍵值對,用以說明一些信息)、實體主體(請求報文一般不用,響應報文也可能不用)。
1、請求報文
請求報文的最主要特點是:開始行(請求行)有三個內容組成,即方法、請求資源的URL、HTTP的版本號。
URL和版本號很好理解,主要看一下方法,方法其實就是命令,對所請求的對象進行一些操作,請求報文的類型就是由所采用的方法決定的。
從HTTP/1.1開始,常用的方法有8種:
以下是一個請求報文的例子:
GET http://www.tsinghua.edu.cn/chn/yxsz/index.html HTTP/1.1
Connection:close (這是首部行的開始,說明使用非持久連接)
User-Agent:Mozilla/5.0 (表明用戶帶來是使用Netscape瀏覽器)
Accept-Language:cn (表明希望優先得到中文版本的文檔)
(最后有一個空行)
2、響應報文
相對應的,對於響應報文來說,最主要的特點是:其開始行(也叫狀態行)由三部分組成,即版本、狀態碼、解釋狀態碼的簡單短語。
而這里主要需要理解的就是狀態碼了,狀態碼都是三位數字,分為5大類共33種。
- 1xx 表示通知信息的,如請求收到了或正在進行處理。
- 2xx 表示成功,如接受或知道了。
- 3xx 表示重定向,表示要完成請求還必須采取進一步的行動。
- 4xx 表示客戶的差錯,如請求中有錯誤的語法或不能完成。
- 5xx 表示服務器的差錯,如服務器失效無法完成請求。
常用狀態碼如下:
狀態碼 | 含義 |
---|---|
100 | 請求已經接收,客戶端可以繼續發送請求 |
101 | 服務器已經收到並且理解了客戶端的請求 |
200 | 一切正常 |
204 | 請求成功,無資源可返回 |
206 | 范圍請求,請求范圍內資源正常返回 |
301 | 永久重定向 |
302 | 暫時重定向,URL可能還會改變 |
400 | 請求存在語法錯誤 |
401 | 請求需要有通過HTTP認證的認證信息 |
403 | 禁止訪問 |
404 | 資源沒找到,not found |
500 | 服務端處理請求發生了錯誤,或web應用存在某些bug或臨時的故障 |
503 | 服務器過載或者臨時維護 |
504 | 網關超時,代理服務器等待應用服務器響應時的超時 |
以下是一個響應報文的例子:
HTTP/1.1 301 Moved Permanently (永久重定向)
Location:http://www.xyz.edu/ee/index.html