定義
超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網絡協議。
HTTP的作用就是指導瀏覽器和服務器如何進行溝通。那麼又是如何實現溝通的呢?
如上圖所示:客戶端的瀏覽器發起請求--->服務器在其80端口接收到請求之後,然後根據客戶端的請求發出對應響應返回內容,將相關數據發送給客戶端---->瀏覽器負責下載響應內容;
tips:
80端口專門用來服務HTTP;
如下圖,URL構成如下:
這裡解釋一下錨點:
HTTP請求
1.發送請求的格式: 第一部分: 動詞 路徑 協議/版本 第二部分: key1 : value1 第二部分:key2 : value2 第二部分:key3 : value3 第二部分:Content-Type : application / x-www-form-urlencoded (我要上傳的數據內容的類型和格式) 第二部分: Content-Length:10 (我要上傳的數據的長度) 第二部分:HOST:http://www.baidu.com //目標域名 第二部分:User-Agent : Curl/7.54.0 //你通過哪個軟件(工具發起請求的) 第三部分: 第四部分:要上傳的數據
- 請求最多包含四部分,至少三部分,也就是第四部分 可以空著;第三部分永遠都是一個回車(/n)主要作用就是劃出三四部分的界限;動詞主要有GET(獲取),POST(上傳數據:主要是用戶名,密碼,頭像之類的數據),PUT(整體更新,就是將你上傳的所有數據全都替換掉),PATCH(局部更新,就是將你上傳的數據中的一部分更新掉),DELETE(刪除)等;這裡的路徑包括查詢參數,但是不包括錨點如果你不寫路徑,默認為/;(路徑必須以/開頭)第二部分的Content-Type標註了第四部分的格式 注:不按照協議來,會報錯的!
curl使用實例:
curl -s -v -- "https://www.baidu.com/s?wd=JavaScript"
如果你不寫路徑,默認為/
用chrome作一個實驗
可以看到http的請求;
http響應
響應示例:
目前需要對content-length和content-type需要了解一下:
以向百度發送請求為例,我們請求的時候會帶上我們的數據,返回的時候百度服務器會返回百度相關的數據(包括響應的格式,這裡為文本,以及響應的長度);
響應的格式
1.協議/版本號 狀態碼 狀態解釋 2.key1: value1 2.key2: value2 2.Content-Length:17931 2.Content-Type:text/html 3. 4.要下載的內容
狀態碼:需要記憶,是服務器對瀏覽器要說的話:
- 1xx:不常用2xx:表示成功,200表示普通成功(如果是get,則返回200給你);204表示創建成功(如果你是post,服務器就可能返回一個204給你);3xx:表示你滾吧;(301:表示以前在這裡的那個人永久搬走了,我會在第二部分告訴你它搬到哪裡了;302:表示他臨時不在,可能過幾天就回了)4xx:表示你錯了(比如你輸入的網址有錯誤)5xx:表示我錯了==
用chrome做一個實驗
響應部分的第一部分和第二部分在Headers裡面;
第四部分在response裡面;
curl命令的使用
curl命令是一個利用URL規則在命令行下工作的文件傳輸工具。它支持文件的上傳和下載,所以是綜合傳輸工具,但按傳統,習慣稱curl為下載工具;
curl命令通常由動作,{關鍵詞},路徑,協議/版本組成。如下命令:
curl -X POST -d "1234567890" -H "xxx" -- "https://www.baidu.com"
-X表示請求動作,默認是GET,如果不指定動作的話。-d是data表示將相應的數據發送給服務器,然後等待服務器的響應。-H表示設置HTTP頭部額外的內容。之後服務器會響應該請求。HTTP協議是無狀態的連接協議,服務器無法知道客戶是否擁有權限訪問該服務器。Token就是一種存儲在客戶端cookie或者Local Storage的一種身份驗證方法。當客戶端發送請求後,服務器端會去驗證客戶端身份,然後發送一個Token,客戶端每次請求都會要求攜帶一個合法的Token。
下面再舉個例子:
curl -X POST -s -v -H "richard: xxx" -- "https://www.baidu.com"
原文地址:https://zhuanlan.zhihu.com/p/46716496
閱讀更多 前端小學生 的文章