HTTP 協議
做爲web開發人員,瞭解一些http協議的知識頗有必要。本文簡單介紹了HTTP協議的知識,如有錯誤的地方,望你們指正。html
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的格式:web
http://host[":"port][abs_path]瀏覽器
- host: 表明主機域名或IP地址
- port: 端口號,缺省端口80
- abs_path : 請求資源的URL,若是沒有,填 "/",一般瀏覽器會幫咱們自動完成。
EG:
一、輸入:www.cnblogs.com
瀏覽器自動轉換成:http://www.cnblogs.com/
4. HTTP請求
4.1 請求報文格式:
![](http://static.javashuo.com/static/loading.gif)
- HTTP的請求由3部分組成:請求行、請求頭、請求體。
- SP表明空格、CRLF表明換行
- 瀏覽器必須以這個格式發送請求,服務器才能正常解析和響應。
4.2 請求報文示例
![](http://static.javashuo.com/static/loading.gif)
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://static.javashuo.com/static/loading.gif)
- HTTP的響應也是由3個部分組成:響應行、響應頭,響應體
- 響應行:status code 表示響應的狀態碼,description是描述信息。
- 一樣 SP表明空格、CRLF表明換行,
- 響應必須以這種規範格式發送給瀏覽器,瀏覽器才能正常解析並顯示。
5.2 響應報文示例
![](http://static.javashuo.com/static/loading.gif)
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狀態碼大全的文檔。app
6. HTTP消息報頭
HTTP消息報頭分4類:普通報頭、請求報頭、響應報頭、實體報頭
每個報頭域都是由名字+「:」+空格+值 組成,消息報頭域的名字是大小寫無關的。post
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 響應過時的日期和時間。
參考文獻
HTTP協議詳解
HTTP 狀態碼大全文檔下載
Content-Type文檔下載