什麼是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協議通訊流程
實際上咱們輸入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