什么是HTTP?
超文本傳輸協(xié)議(英文:HyperText Transfer Protocol,縮寫:HTTP)是一種用于分布式、協(xié)作式和超媒體信息系統(tǒng)的應(yīng)用層協(xié)議。HTTP是萬維網(wǎng)的數(shù)據(jù)通信的基礎(chǔ)。
簡單來說,HTTP 的作用就是指導(dǎo)瀏覽器和服務(wù)器如何進(jìn)行溝通

服務(wù)器與瀏覽器的交互
- 瀏覽器負(fù)責(zé)發(fā)起請(qǐng)求
- 服務(wù)器在 80 端口接收請(qǐng)求
- 服務(wù)器負(fù)責(zé)返回內(nèi)容(響應(yīng))
- 瀏覽器負(fù)責(zé)下載響應(yīng)內(nèi)容
HTTP請(qǐng)求
請(qǐng)求的格式
1 請(qǐng)求行:動(dòng)詞 路徑 協(xié)議/版本號(hào) 比如: GET /index.html HTTP/1.1
2 請(qǐng)求頭:
Host: 1.2.3.4
Accept: html, xhtml, xml
User-Agent: Chrome / Mac
Content-Type: application/x-www-form-urlencoded
3 回車
4 消息體:username=xxxx&password=yyyyy
請(qǐng)求的幾個(gè)要點(diǎn)
- 請(qǐng)求最多包含四部分,最少包含三部分。(也就是說第四部分可以為空)
- 第三部分永遠(yuǎn)都是一個(gè)回車(\n)
- 動(dòng)詞可以有 GET POST PUT PATCH DELETE HEAD OPTIONS 等
- 這里的路徑包括「查詢參數(shù)」,但不包括「錨點(diǎn)」
- 如果你沒有寫路徑,那么路徑默認(rèn)為 /
- 第 2 部分中的 Content-Type 標(biāo)注了第 4 部分的格式
用 Chrome 發(fā)請(qǐng)求
- 打開 Network
- 地址欄輸入網(wǎng)址
- 在 Network 點(diǎn)擊,查看 request,點(diǎn)擊「view source」
- 你會(huì)看到請(qǐng)求的前三部分
- 如果有請(qǐng)求的第四部分,那么在 FormData 或 Payload 里面可以看到
HTTP響應(yīng)
發(fā)出請(qǐng)求了之后,應(yīng)該都能得到一個(gè)響應(yīng),除非斷網(wǎng)了,或者服務(wù)器宕機(jī)了。
響應(yīng)的格式
1 狀態(tài)行:協(xié)議/版本號(hào) 狀態(tài)碼 狀態(tài)描述
2 響應(yīng)頭:
Content-Type: text/html;charset=utf-8
Server: bfe/1.0.8.18
Date: Thu, 23 Feb 2017 13:57:26
3 回車
4 消息體
<!doctype html>
<html>....
<head>...
<body>...
響應(yīng)的幾個(gè)要點(diǎn)
- 狀態(tài)碼要背,是服務(wù)器對(duì)瀏覽器說的話
- 1xx 不常用
- 2xx 表示成功
- 3xx 表示滾吧
- 4xx 表示你丫錯(cuò)了
- 5xx 表示好吧,我錯(cuò)了
- 狀態(tài)解釋沒什么用
- 第 2 部分中的 Content-Type 標(biāo)注了第 4 部分的格式
- 第 2 部分中的 Content-Type 遵循 MIME 規(guī)范
用 Chrome 查看響應(yīng)
- 打開 Network
- 輸入網(wǎng)址
- 選中第一個(gè)響應(yīng)
- 查看 Response Headers,點(diǎn)擊「view source」
- 你會(huì)看到響應(yīng)的前兩部分
- 查看 Response 或者 Preview,你會(huì)看到響應(yīng)的第 4 部分
關(guān)于cURL
cURL是一種利用URL語法在命令行方式下工作的文件傳輸工具
下面是幾個(gè)curl的請(qǐng)求與響應(yīng)
curl -L http://baidu.com
curl 發(fā)請(qǐng)求,得到響應(yīng)
curl --head https://www.baidu.com
curl 得到響應(yīng)頭
curl -D - https://www.baidu.com
curl 得到響應(yīng)頭和體
curl -s -v -H "Juff: xxx" -- "https://www.baidu.com"
請(qǐng)求的內(nèi)容為
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.54.0
Accept: */*
Juff: xxx
curl -X POST -s -v -H "Juff: xxx" -- "https://www.baidu.com"
請(qǐng)求的內(nèi)容為
POST / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.54.0
Accept: */*
Juff: xxx
curl -X POST -d "1234567890" -s -v -H "Juff: xxx" -- "https://www.baidu.com"
請(qǐng)求的內(nèi)容為
POST / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.54.0
Accept: */*
Juff: xxx
Content-Length: 10
Content-Type: application/x-www-form-urlencoded
1234567890