HTTP入門(一):在Bash中curl查看請求與響應

HTTP入門(一):在Bash中curl查看請求與響應

HTTP

  • 本文簡單總結HTTP的請求與響應
  • 本文主要目的是對學習內容進行總結以及方便往後查閱。
  • 詳細教程和原理能夠參考HTTP文檔(MDN)。
  • 本文版權歸馬濤濤全部。
  • 本文所引用的圖片和文字版權歸原做者全部,侵權刪。
  • 若有錯誤請在下方評論區指出,歡迎積極討論。

服務器與瀏覽器的交互


交互

  • 瀏覽器負責發起請求
  • 服務器在 80 端口接收請求
  • 服務器負責返回內容(響應
  • 瀏覽器負責下載響應內容

HTTP協議 的做用就是指導瀏覽器和服務器如何進行溝通html

請求


使用curl -s -v -H "Mtt: xxx" -- https://www.baidu.com來在Bash裏創造一個請求,並獲得響應。shell

命令行釋義
截圖: 解釋
-s:簡短的信息
-v> 表示請求, < 表示響應
-H:添加一個響應頭

請求與響應截圖:
請求與響應截圖
請求內容:瀏覽器

> GET / HTTP/1.1                GET方法發送請求,獲取默認根目錄,使用http1.1協議
> Host: www.baidu.com           主機
> User-Agent: curl/7.58.0       用curl7.58這個東西發送的請求
> Accept: */*                   接受服務器返回的任何內容
> Frank: xxx
>                               有一個回車

不一樣參數測試

curl -X POST -s -v -H "Frank: xxx" -- "https://www.baidu.com"測試
請求的內容爲服務器

POST / HTTP/1.1    由於-x改爲了post
Host: www.baidu.com 
User-Agent: curl/7.54.0
Accept: */*
Frank: xxx

curl -X POST -d "1234567890" -s -v -H "Frank: xxx" -- https://www.baidu.com測試
請求的內容爲app

POST / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.54.0
Accept: */*
Frank: xxx
Content-Length: 10   內容長度爲是10
Content-Type: application/x-www-form-urlencoded

1234567890

"-d 1234567890":我要往百度上傳數據1234567890dom

Content-Length: 10 : 內容長度爲是10
Content-Type:我要上傳內容的格式curl

Get是獲取,只看瀏覽器內容,不作其餘的事
post是發表,上傳的意思。例如說我要註冊登陸,就把數據寫在-d裏面,而後請求的時候就直接上傳了。post

總結:請求的格式

1 動詞 路徑(HTTP規定必須以/開頭) 協議/版本
2 Key1: value1
2 Key2: value2
2 Key3: value3
2 Content-Type: application/x-www-form-urlencoded
2 Host: www.baidu.com
2 User-Agent: curl/7.54.0
3 (永遠是回車,用來區分二四部分)
4 要上傳的數據
  1. 請求最多包含四部分,最少包含三部分。(也就是說第四部分能夠爲空)
  2. 第三部分永遠都是一個回車(n)
  3. 動詞有 GET POST PUT(總體更新) PATCH(部分更新) DELETE(刪除一些東西) HEAD OPTIONS 等
  4. 這裏的路徑包括「查詢參數」,但不包括「錨點」(服務器不看錨點,只看路徑)
  5. 若是你沒有寫路徑,那麼路徑默認爲 /
  6. 第 2 部分中的 Content-Type 標註了第 4 部分的格式

響應


上面三個請求示例,前兩個請求對應的響應分別爲學習

HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: Keep-Alive
Content-Length: 2443
Content-Type: text/html(百度返回的時候百度的數據長度和內容的格式)
Date: Tue, 10 Oct 2017 09:14:05 GMT
Etag: "5886041d-98b"
Last-Modified: Mon, 23 Jan 2017 13:24:45 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/

<!DOCTYPE html>
<!--STATUS OK--><html> <head> 後面太長,省略了……

HTTP/1.1 302 Found
Connection: Keep-Alive
Content-Length: 17931
Content-Type: text/html
Date: Tue, 10 Oct 2017 09:19:47 GMT
Etag: "54d9749e-460b"
Server: bfe/1.0.8.18

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"> 後面太長,省略了……
  1. GET 請求和 POST 請求對應的響應能夠同樣,也能夠不同
  2. 響應的第四部分能夠很長

響應的格式

1 協議/版本號 狀態碼 狀態解釋
2 Key1: value1
2 Key2: value2
2 Content-Length: 17931
2 Content-Type: text/html
3
4 要下載的內容

• 狀態碼是服務器對瀏覽器說的話,詳情請看維基百科HTTP狀態碼
• 1xx 不經常使用
• 2xx 表示成功 200成功(get) 204建立成功(post)
• 3xx 表示滾吧 301(之前的人搬走了,搬去哪裏會在第二部分location的一個key:value裏該訴你) 302(外出了,過幾天才會回來表示服務器臨時不在)
• 4xx 表示你丫錯了(確定是訪問者出錯,好比說你輸入了錯誤的地址)
• 5xx 表示好吧,我錯了(表示服務器錯了)
• 第 2 部分中的 Content-Type 標註了第 4 部分的格式
• 第 2 部分中的 Content-Type 遵循 MIME 規範測試

相關文章
相關標籤/搜索