前言
我們知道目前很多應用系統中的內容傳輸協議採用的HTTP協議,因此不管你是前端人員、後端人員、運維人員,甚至是管理人員,都需要掌握HTTP知識!!
HTTP發展歷史
HTTP/0.9
該版本只有一個命令GET;沒有HEADER等描述數據的信息; 服務器發送完畢,就關閉TCP連接。
HTTP/1.0
該版本增加了很多命令;增加status code 和header;多字符集支持、多部分發送、權限、緩存等。
HTTP/1.1
該版本增加了持久連接、Pipeline,增加host和其他一些命令。持久連接會在HTTP特性中介紹;如果沒有pipeline,那麼Web服務器就需要串行處理請求,而有了pipeline,Web服務器就並行處理請求;而增加host實現了一臺物理設備可以運行多個web服務。
HTTP/2.0
所有數據以二進制傳輸,之前版本使用字符串進行傳輸;同一個連接 裡面發送多個請求不再需要按照順序來;頭信息壓縮以及推送等提高效率的功能。
HTTP三次握手
為什麼要三次握手?因為網絡是有可能延遲的,當客戶端沒有收到服務端的確認包,如果沒有第三次握手,那麼服務端不知道上次傳輸是不是被客戶端正常接收了,如果沒有接收,服務端的這個端口也是打開的,這就比較浪費資源。
HTTP報文
HTTP報文分為請求報文和響應報文,請求報文和響應報文分為起始行、首部(header)和主體(body),請求報文的首部包括三部分,分別是HTTP方法、資源目錄和協議,而響應報文的首部包括協議版本、狀態碼和狀態嗎對應的意思,比如200狀態的意思是ok。需要注意的是:HTTP header和HTTP body之間以一行分隔。
HTTP方法
HTTP方法定義對資源的操作,常用的有GET、POST等,這就就不詳細展開了。
HTTP Code
HTTP Code用於定義服務器對請求的處理結果,各個區間的code有不用的語義。1xx 表示信息響應類,表示接收到請求並且繼續處理;2xx 表示成功;3xx 表示重定向;4xx 表示客戶端出錯;5xx 表示服務器出錯。
HTTP特性
跨域請求
同源策略,也就是說當兩個請求的URL的協議、host和端口都相同的情況下,我們才認為這兩個請求是同域的即同源,而只要協議、host和端口只要有一項是不同的,我們就認為是不同源的,即跨域,例如:
http://www.mukedada.com:80
http://www.mukedada.com:8080
上述兩個請求就是跨域請求。需要注意的是跨域請求不是說瀏覽器限制了發起跨站請求,瀏覽器只是將返回結果攔截下來,最好的例子就是CSRF跨站腳本攻擊。如果我們想讓瀏覽器放行返回結果,則通過以下方法:
- 服務端設置Access-Control-Allow-Origin參數為允許,例如'Access-Control-Allow-Origin' : '*'
- 、和
閱讀更多 末路狂奔在路上 的文章