作為一個開發人員,你需要了解的一些HTTP基礎知識
日常開發過程中,經常會使用到http報文傳遞,今天就來說一說http的一些基礎知識。
首先來看下wiki百科的定義
超文字傳輸協定(英文:HyperText Transfer Protocol,縮寫:HTTP)是一種用於分散式、協作式和超媒體資訊系統的應用層協議。 HTTP是全球資訊網的資料通訊的基礎。
HTTP思維導圖
這裡提供一張HTTP報文組成的思維導圖,下面會圍繞這張圖來展開講解內容。
HTTP版本
超文字傳輸協議已經演化出了很多版本,它們中的大部分都是向下相容的。在 RFC 2145 中描述了HTTP版本號的用法。客戶端在請求的開始告訴伺服器它採用的協議版本號,而後者則在響應中採用相同或者更早的協議版本。現行常用版本是在1999年提出的1.1版本,以下所說的內容都是基於1.1版本來展開的。
HTTP報文組成 —— 行(Line)
請求行
請求行包含HTTP版本、協議、請求路徑、請求方法幾部分資訊。
-
首先來說下請求路徑:
- 協議(Protocol):常用協議一般有http和https兩種;
- 主機(Host):主機域名;
- 路徑(Path):域名子路徑
- 引數(Query String):請求引數
請求路徑由以上幾個部分組成,其中協議和主機是必須項,用來區分不同地址,路徑和引數可以根據需要或有或無。譬如“http://www.baidu.com” 是沒有路徑和引數的,直接指向百度的搜尋主頁,然而在搜尋結果頁,就會有路徑和引數。
請求方法
在http1.1版本中,收錄了八種請求方法,在開發中常用的有四種。
PUT:增
DELETE:刪
POST:改
GET:查
tips:在這裡需要引入一個概念,冪等。**
一個方法重複執行多次,產生的效果是一樣的,那就是冪等(idempotent)的。反之,非冪等。
在上面四種請求方法中,PUT是冪等的,POST是非冪等的。
在這裡再引入一個思考,你們公司的介面,更新資料是用PUT還是POST來做的?
狀態行
狀態行是用來表示請求響應的返回狀態
1xx:指示資訊——表示請求已經接受,繼續處理中
2xx:成功——表示請求已經被成功接收、理解、接受
3xx:重定向——要完成請求必須進行更進一步的操作
4xx/客戶端錯誤——請求有語法錯誤或請求無法實現
5xx/伺服器端錯誤——伺服器未能實現合法的請求
知道了這些狀態碼分類,就可以根據不同的狀態碼,分析請求失敗的大致原因出在哪一方,可以更快的定位問題。
HTTP報文組成 —— 頭(Head)
HTTP的請求和相應都會包含首部,首部中會包含一些請求或響應的額外重要資訊,例如物件型別(content-type),保持連線(keep-Alive)等。
cookie
因為http是無狀態協議,它不對之前發生過的請求和響應的狀態進行管理。也就是說無法根據之前的狀態進行本次的請求處理。
在請求和響應中寫入cookie資訊來控制客戶端的狀態,作為記錄客戶端的狀態位
通用首部
請求首部
響應首部
實體首部
HTTP報文組成 —— 體(Body)
體分為請求體和響應體,根據首部的content-type又可以分為單個整體和多部分組成。
在請求中,有一些請求方法是沒有請求體的,例如GET、DELETE等,這些沒有請求體的方法,所有的引數都作為QueryString引數,儲存在請求路徑中。在1.1版本中,只有POST和PUT是有請求體的。
content-type
單個整體
- text/plain 純文字
- application/json 通用且符合標準
- text/json 相容IE6
- text/html
多部分組成(表單上傳)
multipart /form-data
POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
結語
文章中的內容,可能更偏重於行的講解,對於首部和體部沒有更深層次的介紹。有興趣的話,也可以自己再深入研究下。在這裡推薦兩個關於HTTP的書,一本是《圖解HTTP(上野宣 著 於均良 譯)》,這個書講解的比較淺顯易懂,更容易理解。另一本是HTTP界的權威《HTTP權威指南》,這個書內容更多更全面,想深入學習的可以看一看這本。最後,附上一下《圖解HTTP》 (提取密碼: 8jyg)的PDF版吧,希望有興趣的可以去看一看。
感謝
文章作為學習階段的總結,會存在許多不足之處,如有講解錯誤之處,希望可以及時指出,及時更正。如果從文章中你獲得了新的知識,得到了新的總結,那這篇胡言亂語,就算是有一絲存在的意義吧。
引用
get、put、post、delete含義與區別 - - 十五言
HTTP協議中PUT和POST使用區別 - 其實並不難,是你太悲觀 - 部落格頻道 - CSDN.NET
相關文章
- 網站開發製作需要了解哪些基礎知識網站
- 微信小程式開發過程中需要首先了解一些基礎知識微信小程式
- 每個開發人員都需要了解的一個SQL技巧SQL
- 前端需要了解的http知識前端HTTP
- 直播中需要了解的AAC基礎知識
- 大前端開發人員必知必會的HTTP知識前端HTTP
- 適用於 PHP 開發人員的 Python 基礎知識PHPPython
- 前端開發人員需要了解的CSS原理前端CSS
- 你應該知道的HTTP基礎知識HTTP
- Android開發需要了解的 IM 知識Android
- 作為軟體開發人員真的需要學歷嗎
- 設計師也需要了解的一些前端知識前端
- js的一些基礎知識JS
- 作為IT從業人員,你需要什麼證?
- 開發微信小程式需要了解哪些知識?微信小程式
- 作為一個程式設計師,告訴你一些編碼知識程式設計師
- 入門Java你需要了解的幾個知識要點!Java
- 作為產品經理,你需要了解的基本演算法知識和實操演算法
- 開發基礎知識
- vue的一些基礎知識點Vue
- 移動開發需要了解的UI設計知識移動開發UI
- 圖解http,http基礎知識圖解HTTP
- 為什麼 Web 開發人員需要學習一個 JavaScript 框架?WebJavaScript框架
- 作為一名軟體開發人員 你該如何磨快你的鋸子?
- 每個開發人員都應該知道的WebSockets知識Web
- 你需要了解的 HTTP Status CodeHTTP
- 你需要了解的HTTP協議HTTP協議
- 關於 HTTP 後端人員需要了解的 20+ 圖片!HTTP後端
- 蘋果開發基礎知識蘋果
- 大前端開發者需要了解的基礎編譯原理和語言知識前端編譯原理
- 介面測試人員需要掌握的知識技能
- 需要了解的Data Guard理論知識(一)
- 前端需要了解的色彩知識前端
- 一些關於網路的基礎知識
- 作為一個SAP開發人員,需要學習SAP傳統技術(比如ABAP)以外的開源技術嗎?
- 10 個你需要了解的最佳 javascript 開發實踐JavaScript
- Web開發人員需知的Web快取知識Web快取
- Web 開發人員需知的 Web 快取知識Web快取