HTTP 協議
作為web開發人員,了解一些http協議的知識很有必要。本文簡單介紹了HTTP協議的知識,若有錯誤的地方,望大家指正。
1.HTTP協議是什么?
- http協議是一個應用層的協議。規定了瀏覽器和服務器之間的通信規范。通常用TCP連接方式。
2.HTTP 1.0、1.1 連接的方式。
- 在HTTP 1.0 中,瀏覽器和服務器使用的是短連接,響應完,立即斷開。
- 請求的過程:3次握手,請求,響應,斷開連接。
- http不保存連接,好處:服務器可以處理更多的連接,但是每次建立連接會降低處理速度。
- 現在主流的版本是HTTP 1.1 ,在HTTP 1.1 中我們使用長連接,一個請求結束后,不斷開,繼續請求。
3.HTTP協議的URL
URL的格式:
http://host[":"port][abs_path]
- host: 代表主機域名或IP地址
- port: 端口號,缺省端口80
- abs_path : 請求資源的URL,如果沒有,填 "/",通常瀏覽器會幫我們自動完成。
EG:
1、輸入:www.cnblogs.com
瀏覽器自動轉換成:http://www.cnblogs.com/
4. HTTP請求
4.1 請求報文格式:
- HTTP的請求由3部分組成:請求行、請求頭、請求體。
- SP代表空格、CRLF代表換行
- 瀏覽器必須以這個格式發送請求,服務器才能正常解析和響應。
4.2 請求報文示例
4.3 請求方法
- GET 請求獲取Request-URI所標識的資源
- POST 在Request-URI所標識的資源后附加新的數據,常用於提交表單。
- HEAD 請求獲取由Request-URI所標識的資源的響應消息報頭
- PUT 請求服務器存儲一個資源,並用Request-URI作為其標識
- DELETE 請求服務器刪除Request-URI所標識的資源
- TRACE 請求服務器回送收到的請求信息,主要用於測試或診斷
- CONNECT 保留將來使用
- OPTIONS 請求查詢服務器的性能,或者查詢與資源相關的選項和需求
get和post是最常用的方法,簡單來說,前者用於獲取數據,后者用於提交數據。
5. HTTP響應
5.1 響應報文格式:
- HTTP的響應也是由3個部分組成:響應行、響應頭,響應體
- 響應行:status code 表示響應的狀態碼,description是描述信息。
- 同樣 SP代表空格、CRLF代表換行,
- 響應必須以這種規范格式發送給瀏覽器,瀏覽器才能正常解析並顯示。
5.2 響應報文示例
5.3響應碼
**200段是成功;300段需要對請求做進一步的處理;400段表示客戶端請求錯誤;500段是服務器的錯誤 **
常見響應碼:
- "200" : OK
- "302" : Found 重定向.
- "400" : Bad Request 錯誤請求,發出錯誤的不符合Http協議的請求
- "403" : Forbidden 禁止
- "404" : Not Found 未找到。演示訪問一個不存在的頁面看報文
- "500" : Internal Server Error 服務器內部錯誤。演示頁面拋出異常。
- "503" : Service Unavailable。一般是訪問人數過多。
PS:會在文章的末尾為大家提供一份HTTP狀態碼大全的文檔。
6. HTTP消息報頭
HTTP消息報頭分4類:普通報頭、請求報頭、響應報頭、實體報頭
每一個報頭域都是由名字+“:”+空格+值 組成,消息報頭域的名字是大小寫無關的。
6.1 普通報頭
應用於所有請求和響應消息且和請求體與響應體無關的信息就存放在普通報頭中。
- Cache-Control: no-cache (用於指示請求或響應消息不能緩存)
- Date 普通報頭域表示消息產生的日期和時間
- Connection: close/keep-alive (是否開啟長連接)
6.2 請求報頭
客戶端向服務器端傳遞請求的附加信息以及客戶端自身的信息存放在請求報頭
常用的請求報頭:
- Accept: text/html,application/xhtml+xml,application/xml; 指定客戶端接受哪些類型的信息。
- Accept-Charset: iso-8859-1,gb2312 客戶端接受的字符集 (缺省是任何字符集都可以接受。)
- Accept-Encoding: gzip,deflate,sdch 可接受的內容編碼。 (缺省是各種內容編碼都可以接受。)
- Accept-Language: zh-CN,zh 指定語言。(缺省各種語言都可以接受。)
- Authorization 用於證明客戶端有權查看某個資源
- Host: www.cnblogs.com 被請求資源的Internet主機和端口號 (缺省端口號:80) 這個報頭是必需的
- User-Agent: Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) 操作系統、瀏覽器和其它屬性
6.2 響應報頭
響應報頭允許服務器傳遞不能放在狀態行中的附加響應信息,以及關於服務器的信息和對Request-URI所標識的資源進行下一步訪問的信息。
常用的響應報頭:
- Location 響應報頭域用於重定向接受者到一個新的位置
- Server:Apache-Coyote/1.1 服務器信息
6.3 實體報頭
請求和響應消息都可以傳送一個實體。
常用的實體報頭:
- Content-Encoding: gzip 內容編碼
- Content-Language: zh-CN 語言
- Content-Length: 10 實體正文的長度
- Content-Type: text/html;charset=GB2312 返回數據的類型
- Last-Modified 實體報頭域用於指示資源的最后修改日期和時間。
- Expires:Thu,15 Sep 2006 16:23:12 GMT 響應過期的日期和時間。