簡介
HTTP是一種檔案傳輸協議,規定瀏覽器與伺服器的傳輸規則,主要有請求與響應兩部分。
命令列傳送get請求
$ curl -v -- "https://www.baidu.com"
複製程式碼
如上就是curl傳送get請求的寫法,你會看到如下內容
* Rebuilt URL to: www.baidu.com/
* Trying 104.193.88.123...
* TCP_NODELAY set
* Connected to www.baidu.com (104.193.88.123) port 80 (#0)
> GET / HTTP/1.1
> Host: www.baidu.com
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: Keep-Alive
< Content-Length: 2381
< Content-Type: text/html
< Date: Sat, 13 Oct 2018 03:25:42 GMT
< Etag: "588604eb-94d"
< Last-Modified: Mon, 23 Jan 2017 13:28:11 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><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc>
複製程式碼
以上內容中分別是什麼意思呢?
- 星號*開頭的書註釋
- 大於號>開頭的是請求資訊
- 小於號<開頭的是響應資訊
- 後面的是響應內容
命令列傳送post請求
$ curl -X POST -v -- "https://www.baidu.com"
複製程式碼
內容如下
> POST / HTTP/1.1
> Host: www.baidu.com
> User-Agent: curl/7.54.0
> Accept: */*
> Content-Length: 5
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 5 out of 5 bytes
< HTTP/1.1 302 Found
< Connection: Keep-Alive
< Content-Length: 17931
< Content-Type: text/html
< Date: Fri, 19 Apr 2019 07:44:58 GMT
< Etag: "54d97487-460b"
< Server: bfe/1.0.8.18
<
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<style data-for="result" id="css_result">
複製程式碼
請求頭Header
傳送請求的時候,一般需要把伺服器需要的資料傳送過去,可以在命令中加入 -H "xxx: yyy" 到請求頭中,注意:加入請求頭的內容必需是 key: value 的形式
$ curl -X POST -v -H "xxx:yyy" -- "https://www.baidu.com"
複製程式碼
> POST / HTTP/1.1
> Host: www.baidu.com
> User-Agent: curl/7.54.0
> Accept: */*
> xxx:yyy
>
< HTTP/1.1 302 Found
< Connection: Keep-Alive
< Content-Length: 17931
< Content-Type: text/html
< Date: Fri, 19 Apr 2019 07:51:58 GMT
< Etag: "54d97488-460b"
< Server: bfe/1.0.8.18
<
複製程式碼
請求的內容中就多了一行>xxx:yyy
請求格式
1 動詞 路徑 協議/版本
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 要上傳的資料
複製程式碼
- 首先請求至少包含三部分(如果要傳送資料,資料就是第四部分)
- 第一部分包括了用什麼方法(動詞,路徑(請求的網站)用什麼版本(版本)的什麼協議(協議)
- 第二部分包括了請求內容(請求頭)
- 第三部分是一個回車換行符,用來分割第二部分和第四部分
- 第四部分是傳送的資料
注意
- 這裡的路徑包括「查詢引數」,但不包括「錨點」
- 可用的請求方法有 GET POST PUT PATCH DELETE HEAD OPTIONS 等
- 如果你沒有寫路徑,那麼路徑預設為 /
- 第二部分中的 Content-Type 標註了第 4 部分的格式
響應格式
1 協議/版本號 狀態碼 狀態解釋
2 Key1: value1
2 Key2: value2
2 Content-Length: 17931
2 Content-Type: text/html
3
4 要下載的內容
複製程式碼
- 第一部分首先說明我用什麼版本(版本)的什麼協議(協議),狀態碼以及解釋
- 第二部分包括了響應的資訊,但是不是主要內容,只是此次響應的基本資訊
- 第三部分也是一個回車換行符,用來分割第二部分和第四部分
- 第四部分才是響應的內容,一般為JSON資料或者HTML頁面
用Chrome瀏覽器傳送HTTP請求
- 開啟Network
- 位址列輸入地址
- 在Network點選, 檢視request,點選「view source」
- 你會看到請求的前三部分
- 如果有第四部分, 可以在FormData或Payload中看到
用Chrome瀏覽器檢視HTTP響應
- 開啟Network
- 位址列輸入地址
- 選中第一個響應
- 檢視 Response Headers,點選「view source」
- 你會看到響應的前兩部分
- 檢視 Response 或者 Preview,你會看到響應的第 4 部分