通過幾個問題了解HTTP協議

1. Http全稱?

​ 超文本傳輸協議:Hypertext Transfer protocol

2. 常用狀態碼

- 200	響應正常
- 400	Bad Request,請求數據有問題
- 401	Unauthorized,權限不足,資源存在但不讓訪問
- 403	Forbidden,你的IP被屏蔽時會出現
- 404	資源找不到
- 301	重定向
- 500	服務器內部錯誤

3. 常用method

- get		用於獲取資源
- post		用於發送數據到服務端,常用於提交表單數據
- put		用於修改資源屬性
- delete	用於刪除資源

4. Http協議格式

​ 請求和響應的消息協議是一樣的:起始行、消息頭、消息體。三部分以CRLF分隔,最後一個消息頭有兩個CRLF,表示接下來是消息體的內容了。

起始行

​ 請求的起始行稱爲請求行,格式:method uri http/version,如 get /index.html http/1.1

​ 響應的起始行稱爲狀態行,格式 :http/version code desc,如 http/1.1 200 ok。第三個字段是狀態碼的簡單描述信息。

消息頭

​ 消息頭由很多鍵值對組成,鍵值對之間以CRLF作爲分隔。

消息體

​ 消息體是一個字符串,字符串長度由消息頭中的Content-length字段指定。沒有指定則沒有消息體。

5. 分塊傳送

​ 當瀏覽器向服務器請求一個資源時,該資源是一個動態資源,服務器無法預知該資源的大小。此時會採用分塊傳送。

​ 服務器先生成一個chunk,發送這個chunk,再生成一個chunk,再發送一個chunk,直到全部資源傳送完成。分塊傳送需要在請求頭增加一個特殊的鍵值對transfer-encoding: chunked,那麼消息體的內容便是分塊傳送的。

​ chunked傳輸格式如下圖所示,由一段一段的分塊組合而成,每個塊由一個長度行和一個分塊體組成,最後一個分塊長度爲0表示結束。

img

6. 持久連接的機制是怎樣的

​ 早期的Http 1.0每個請求都會發起一個連接,每個頁面數百個請求就會發起數百個連接,非常浪費服務器資源。因此在Http 1.1加入了持久連接的機制,Keep-Alive,使得一個連接可以連續服務多個請求。節省了資源

​ 持久連接並不會一直保持連接,而是通過設置 Keep Alive Timeout和Keep Alive Request限制單個連接的持續時長和最多的請求次數。

​ 如果 Keep Alive Timeout設置爲0,則退化到非持久連接。如果Keep Alive Timeout設置爲超長,當然也不會一直保持,各個瀏覽器都有相關的控制。

7. 什麼叫Pipeline管線化

​ 這也是Http 1.1新引入的特性。之前的請求模式是:一個請求發起,服務器響應完了,再進行下一個請求的發起和響應,這樣當請求一多時就會很慢

​ 改進的方式是,將多個請求按順序打包一起發給服務器,服務器再按順序將多個響應一起打包回覆。這樣就快很多了。如下圖示很形象地描述了管線化前和管線化後

img

img

8. 如何理解Http協議的無狀態性

​ 無狀態指的是服務器的協議層無需爲不同請求之間建立任何相關關係。不過這是協議規定的,但建立在Http協議上的應用會通過Session的方式來達到狀態保存的目錄。

9. GET和POST的區別

  • GET用於獲取資源,POST用於向服務器發送數據
  • GET將數據添加到URL後,POST則是將數據放在請求消息體中
  • 由第二點導致瞭如下三點的不同
    • GET相對POST能讓用戶看到傳輸內容,不安全
    • GET由於URL長度的限制傳輸內容有限,POST則好很多
    • GET由於URL的編碼限制只能傳輸ASCII碼,而POST則可以傳輸正常編碼格式的文件

10. 常見Http消息頭字段

通用頭部字段

- Date				報文創建時間
- Connection		連接的管理:連續或是此次發送後關閉連接
- Cache-Control		緩存控制,如值爲max-age=120,表示緩存120秒有效
- Transfer-Encoding	報文的傳輸編碼格式

請求頭部字段

- Host				請求資源所在服務器:主機+端口
- User-Agent		客戶端將本地的操作系統、瀏覽器和其它屬性發送給服務器,非必須,可修改
- Accept			客戶端希望接收的媒體類型,如 image/webp,image/apng,image/*,*/*;q=0.8
- Accept-Charset	客戶端可接收的字符集
- Accept-Encoding	客戶端可接收的內容編碼,如 gzip, deflate, br
- Accept-Language	客戶端可接收的自然語言,如 zh-CN,zh;q=0.9
- Authorization		用於證明客戶端有權查看某個資源
- refer				

舉例
GET /form.html HTTP/1.1 (CRLF)

Accept:image/gif,image/x-xbitmap,image/jpeg,application/msword,*/* (CRLF)
Accept-Language:zh-cn (CRLF)
Accept-Encoding:gzip,deflate (CRLF)
If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
Host:www.guet.edu.cn (CRLF)
Connection:Keep-Alive (CRLF)

響應頭部字段

- Accept-Ranges		可接受的字節範圍
- Location			讓客戶端重定向到的URL
- Server			Http服務器的安裝信息,如 Apache-Coyote/1.1

實體頭部字段

- Allow				資源可支持的Http方法
- Content-type		實體內容的類型
- Content-Encoding	實體內容的編碼方式
- Content-Language	實體內容的語言
- Content-length	實體內容的長度,單位是字節
- Content-Range		實體內容的位置範圍,一般是發出部分請求時使用
- Last-Modified		請求資源最後修改時間

11. 其它知識補充

應用層協議

  • HTTP
  • FTP
  • SMTP
  • DNS
  • TELNET
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章