HTTP協議

什麼是HTTPhtml

HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。web

HTTP是一個基於TCP/IP通訊協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。瀏覽器

從圖中能夠看出HTTP和HTTPS之間的區別,他們的底層都是差很少的,區別就在於中間,HTTP是TCP,而HTTPS是SSL/TLS(安全套接層/安全傳輸協議)。緩存

HTTP工做原理安全

HTTP協議工做於客戶端-服務端架構(C/S)上。瀏覽器做爲HTTP客戶端經過URL向HTTP服務端即WEB服務器發送全部請求。服務器

Web服務器有:Apache服務器,IIS服務器(Internet Information Services)等。網絡

Web服務器根據接收到的請求後,向客戶端發送響應信息。架構

HTTP默認端口號爲80,可是你也能夠改成8080或者其餘端口。併發

HTTP三點注意事項:ide

  • HTTP是無鏈接:無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。
  • HTTP是媒體獨立的:這意味着,只要客戶端和服務器知道如何處理的數據內容,任何類型的數據均可以經過HTTP發送。客戶端以及服務器指定使用適合的MIME-type內容類型。
  • HTTP是無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。另外一方面,在服務器不須要先前信息時它的應答就較快。

HTTP協議通訊流程

實際上咱們輸入URL後,咱們的瀏覽器給Web服務器發送了一個Request, Web服務器接到Request後進行處理,生成相應的Response,而後發送給瀏覽器, 瀏覽器解析Response中的HTML,這樣咱們就看到了網頁。

可是咱們打開一個網頁是須要瀏覽器屢次發送request

1. 當你在瀏覽器輸入URL http://www.cnblogs.com 的時候,瀏覽器發送一個Request去獲取 http://www.cnblogs.com 的html.  服務器把Response發送回給瀏覽器.

2. 瀏覽器分析Response中的 HTML,發現其中引用了不少其餘文件,好比圖片,CSS文件,JS文件。

3. 瀏覽器會自動再次發送Request去獲取圖片,CSS文件,或者JS文件。

4. 等全部的文件都下載成功後。 網頁就被顯示出來了。

HTTP消息結構

1.request的消息結構

 Request 消息分爲3部分,第一部分叫Request line, 第二部分叫Request header, 第三部分是body. header和body之間有個空行, 結構以下圖

好比打開博客園首頁,以下:

GET http://www.cnblogs.com/ HTTP/1.1
Host: www.cnblogs.com

2.response的消息結構

Response消息的結構, 和Request消息的結構基本同樣。 一樣也分爲三部分,第一部分叫Response line, 第二部分叫Response header,第三部分是body. header和body之間也有個空行,  結構以下圖

HTTP請求方法

HTTP 1.1協議中共定義了八種方法,有時也叫作動做來代表Request-URL指定的資源的不一樣請求方式

1.OPTIONS

返回服務器針對特定資源所支持的HTTP請求方法

能夠利用向web服務器發送‘*’的請求來測試服務器的功能性。

2.HEAD

向服務器索與GET請求相一致的響應,只不過響應體將不會被返回。

這一方法能夠在沒必要傳輸整個響應內容的狀況下,就能夠獲取包含在相應小消息頭中的元信息。

3.GET

向特定的資源發出請求。

注意:GET方法不該當被用於產生「反作用」的操做中,例如Web Application中,其中一個緣由是GET可能會被網絡蜘蛛等隨意訪問

4.POST

向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。

數據被包含在請求體中。POST請求可能會致使新的資源的創建和/或已有資源的修改。

5.PUT

向指定資源位置上傳其最新的內容

6.DELETE

請求服務器刪除Request-URL所標識的資源

7.TRACE

回顯服務器收到的請求,主要用於測試或診斷

8.CONNECT

HTTP/1.1協議中預留給可以將鏈接改成管道方式的代理服務器

HTTP協議雖然定義了以上八種方法,可是最基本的有4種,分別是GET、POST、PUT、DELETE。 一個URL地址用於描述一個網絡上的資源,而HTTP中的GET, POST, PUT, DELETE就對應着對這個資源的查、改、增、刪4個操做。 咱們最多見的就是GET和POST了。GET通常用於獲取/查詢資源信息,而POST通常用於更新資源信息。

GET和POST究竟有什麼區別?

1.最直觀的區別就是GET把參數包含在URL中,POST經過request body傳遞參數;

2.GET在瀏覽器回退時是無害的,而POST會再次提交請求;

3.GET產生的URL地址能夠被Bookmark(做爲書籤),而POST不能夠;

4.GET請求會被瀏覽器主動cache(緩存),而POST不會,除非手動設置;

5.GET請求只能進行url編碼(就是對非字母數字的字符藉助utf-8或gbk來編碼,如華仔URL編碼後變爲%E5%8D%8E%E4%BB%94,

  使用這種方式來解碼:decode = URLDecoder.decode("http://www.dbank.com/documents/%E5%8D%8E%E4%BB%94.jpg","UTF-8");  ),而POST支持多種編碼方式;

6.GET請求參數會被完整保留在瀏覽器歷史記錄裏,而POST中的參數不會被保留;

7.GET請求在URL中傳送的參數是有長度限制的,而POST麼有;

8.對參數的數據類型,GET只接受ASCII字符,而POST沒有限制;

9.GET比POST更不安全,由於參數直接暴露在URL上,因此不能用來傳遞敏感信息;

10 GET參數經過URL傳遞,POST放在Request body中;

其餘:

HTTP是什麼?HTTP是基於TCP/IP的關於數據如何在萬維網中如何通訊的協議。

HTTP的底層是TCP/IP。因此GET和POST的底層也是TCP/IP,也就是說,GET/POST都是TCP連接。GET和POST能作的事情是同樣同樣的。你要給GET加上request body,給POST帶上url參數,技術上是徹底行的通的。

GET和POST本質上就是TCP連接,並沒有差異。可是因爲HTTP的規定和瀏覽器/服務器的限制,致使他們在應用過程當中體現出一些不一樣。

GET產生一個TCP數據包;POST產生兩個TCP數據包

長的說:

對於GET方式的請求,瀏覽器會把http header和data一併發送出去,服務器響應200(返回數據);

而對於POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)。

也就是說,GET只須要汽車跑一趟就把貨送到了,而POST得跑兩趟,第一趟,先去和服務器打個招呼「嗨,我等下要送一批貨來,大家打開門迎接我」,而後再回頭把貨送過去。

由於POST須要兩步,時間上消耗的要多一點,看起來GET比POST更有效。所以Yahoo團隊有推薦用GET替換POST來優化網站性能。但這是一個坑!跳入需謹慎。由於:

1. GET與POST都有本身的語義,不能隨便混用。

2. 據研究,在網絡環境好的狀況下,發一次包的時間和發兩次包的時間差異基本能夠無視。而在網絡環境差的狀況下,兩次包的TCP在驗證數據包完整性上,有很是大的優勢。

3. 並非全部瀏覽器都會在POST中發送兩次包,Firefox就只發送一次。

詳情請看:http://www.techweb.com.cn/network/system/2016-10-11/2407736.shtml

HTTP響應碼

Response 消息中的第一行叫作狀態行,由HTTP協議版本號, 狀態碼, 狀態消息 三部分組成。

狀態碼用來告訴HTTP客戶端,HTTP服務器是否產生了預期的Response.

HTTP/1.1中定義了5類狀態碼, 狀態碼由三位數字組成,第一個數字定義了響應的類別

1XX  提示信息 - 表示請求已被成功接收,繼續處理

2XX  成功 - 表示請求已被成功接收,理解,接受

3XX  重定向 - 要完成請求必須進行更進一步的處理

4XX  客戶端錯誤 -  請求有語法錯誤或請求沒法實現

5XX  服務器端錯誤 -   服務器未能實現合法的請求

常見的響應碼

header

header也是咱們接口測試中須要關注和了解的,下面來看看接口請求中header相關的知識要點,header主要有分爲request header和response header

相關文章
相關標籤/搜索