Http全稱為HyperText Transfer Protocol,超文字傳輸協議,它的作用就是指導瀏覽器和伺服器進行溝通,正常的溝通過程是:
瀏覽器發起請求-->伺服器在80埠接收請求-->伺服器返回一個內容響應-->瀏覽器下載響應的內容
發起請求的方式有兩種,一種是直接在瀏覽器輸入對應網址或進行某種操作,另一種是用命令列curl指令發起請求。
1、使用瀏覽器輸入網址發起請求,即url,一個url一般包含以下幾個部分:
協議 域名 埠 路徑 查詢引數 錨點
https為協議名稱,www.baidu.com為訪問的域名,/s是路徑,該路徑不代表真的有對應的檔案存在,?wd=hello&rsv_spt=1為查詢引數,#5為錨點。
在瀏覽器檢視請求和響應內容:
開啟chrome瀏覽器,右上角設定裡選擇更多工具-->開發者工具,會看到多了這樣一個視窗,點選network
重新整理一個網頁時會發現多出很多這樣的請求
點選第一個進入會出現以下頁面:
點選view source即可以看到對應的內容,其中Response Headers為響應內容,Request Headers為請求內容。
2、使用curl指令:
curl用法:curl (選項)(引數)
選項有一些常見的縮寫如下:
-a/--append 上傳檔案時,附加到目標檔案
-A/--user-agent <string> 設定使用者代理髮送給伺服器
-d/--data <data> Http POST方式傳送資料
-D/--dump-header <file> 把header資訊寫入到該檔案中
-e/--referer 來源網址
-f/--fail 連線失敗時不顯示http錯誤
-F/--form <name=content> 模擬http表單提交資料
-G/--get 以get的方式來傳送資料
-H/--header <line> 自定義頭資訊傳遞給伺服器
-i/--include 輸出時包括protocol頭資訊
-I/--head 只顯示請求頭資訊
-j/--junk-session-cookies 讀取檔案忽略session cookie
-k/--insecure 允許不使用證書到SSL站點
-K/--config 指定的配置檔案讀取
-l/--list-only 列出ftp目錄下的檔名稱
-m/--max-time <seconds> 設定最大傳輸時間
-o/--output 把輸出寫到該檔案中
-O/--remote-name 把輸出寫到該檔案中,保留遠端檔案的檔名
-p/--proxytunnel 使用HTTP代理
-s/--silent 靜默模式。不輸出任何東西
-u/--user <user[:password]> 設定伺服器的使用者和密碼
-v/--version 顯示版本資訊
-X/--request <command> 指定什麼命令
命令請求例項:
curl -s -v -H "hello" --"https://www.baidu.com"
意思向百度發起一個請求,同時傳送內容為hello的頭資訊。
可以看到給我們返回了很多東西,其中下面這段是傳送的請求內容和收到的響應內容:
請求的內容最多包含4部分,最少包含3部分,第四部分可以為空:
第一部分:動詞 路徑 協議/版本
動詞(請求的方式GET/POST/PUT/PATCH/DELETE)
Get:請求指定的頁面資訊,並返回資料
Post:向指定資源提交資料進行處理請求
Put:從客戶端向伺服器傳送的資料全面替換指定的文件內容
Patch:從客戶端向伺服器傳送的資料部分替換指定的文件內容
Delete:請求伺服器刪除指定的內容
路徑:發起請求的連結中的路徑,可以為空,但預設都是以/開頭,路徑中包括查詢引數,但是不包括錨點
協議:使用的協議比如https,ftp等等
版本號:協議版本號
第二部分格式:key:value
第三部分:永遠都是一個回車(/n)
第四部分:一般為要上傳的資料,並且在第二部分中如果有content-type,那麼content-type的值標註了第四部分內容的格式。
不寫請求方式時預設為Get方式,也可以換為Post請求,傳送資料到對應連結:
curl -X POST -d "1234" -s -v -H "hello" --"https://www.baidu.com"
得到的請求內容為:
獲得的響應內容:
響應的格式也是由四部分組成:
第一部分:協議/版本號 狀態碼 狀態解釋
狀態碼:
200 :請求成功 202:伺服器成功接收請求 301:被請求的資源已經永久移動到新位置
302:被請求的資源暫時不可以訪問,以後可以再訪問
404:請求失敗,請求所希望得到的資源沒有在伺服器上找到
500:伺服器錯誤 502:作為閘道器或代理工作的伺服器嘗試執行請求時,從上游伺服器得到無效的響應
第二部分格式:key:value,同樣的,content-type標註了第4部分的格式
第三部分:一個回車(/n)
第四部分:要下載的內容
以上是關於對http請求與響應的簡單瞭解。