Server + Client + HTTP
- 瀏覽器負(fù)責(zé)發(fā)起請求
- 服務(wù)器在 80 端口接收請求
- 服務(wù)器負(fù)責(zé)返回內(nèi)容徽诲,即響應(yīng)
- 瀏覽器負(fù)責(zé)下載響應(yīng)內(nèi)容
HTTP 的作用就是指導(dǎo)瀏覽器和服務(wù)器如何進(jìn)行溝通。
一、請求
1. 請求示例
-
curl -s -v -H "xxx: yyy" -- "https://www.baidu.com"
請求內(nèi)容
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.60.0
Accept: */*
xxx: yyy
-
curl -X POST -s -v -H "xxx: yyy" -- "https://www.baidu.com"
請求內(nèi)容
POST / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.60.0
Accept: */*
xxx: yyy
-
curl -X POST -d "x12345" -s -v -H "xxx: yyy" -- "https://www.baidu.com"
請求內(nèi)容
POST / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.60.0
Accept: */*
xxx: yyy
Content-Length: 6
Content-Type: application/x-www.form-urlencoded
x12345
2. 請求的格式
一 動詞 路徑 協(xié)議/版本號
二 Key1: value1
Key2: value2
Key2: value3
Content-Type: application/x-www-form-urlencoded
Host: www.baidu.com
User-Agent: curl/7.60.0
三 回車(\n)
四 要上傳的數(shù)據(jù)
- 請求最多包含四部分,最少包含三部分,第四部分可以為空
- 第三部分永遠(yuǎn)都是一個(gè)回車,用于分隔第二和第四部分
- 動詞有 GET\POST\PUT\PATCH\DELETE\HEAD\OPTIONS 等
- 這里的路徑包括 [查詢參數(shù)],但不包括 [錨點(diǎn)]
- 如果你沒有寫路徑筹裕,默認(rèn)路徑為 /
- 第二部分中的Content-Type 標(biāo)注了第四部分的格式
3. 使用Chrome開發(fā)者工具查看 HTTP 請求內(nèi)容
- 打開Network(單擊鼠標(biāo)右鍵、F12窄驹、Ctrl + Shirft + I )
- 地址欄輸入網(wǎng)址
- 點(diǎn)開Network朝卒,查看 request,點(diǎn)擊 [view source]
- 點(diǎn)擊 [view source]乐埠,點(diǎn)擊 [view source]抗斤,點(diǎn)擊 [view source]
- 如果有請求的第四部分,在FormData 或 Payload可以看到
二丈咐、響應(yīng)
1. 響應(yīng)示例
curl -s -v -H "xxx: yyy" -- "https://www.baidu.com"
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-tra nsform
< Connection: Keep-Alive
< Content-Length: 2443
< Content-Type: text/html
< Date: Sun, 26 Aug 2018 11:37:04 GMT
< Etag: "588603ec-98b"
< Last-Modified: Mon, 23 Jan 2017 13:23:56 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>
后面省略......
curl -X POST -s -v -H "xxx: yyy" -- "https://www.baidu.com"
< HTTP/1.1 302 Found
< Connection: Keep-Alive
< Content-Length: 17931
< Content-Type: text/html
< Date: Sun, 26 Aug 2018 11:42:16 GMT
< Etag: "54d97488-460b"
< Server: bfe/1.0.8.18
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
后面省略......
- GET請求和POST請求對應(yīng)的響應(yīng)可以一樣瑞眼,也可以不一樣
- 響應(yīng)的第四部分可以很長很長
2. 響應(yīng)的格式
一 協(xié)議/版本號 狀態(tài)碼 狀態(tài)解釋
二 Key1: value1
Key2: value2
Key3: value3
Content-Length: 17931
Content-Type: text/html
三 回車
四 要下載的內(nèi)容
- 狀態(tài)碼要背,是服務(wù)器對瀏覽器說的話
- 1xx 不常用
- 2xx 表示成功
- 3xx 表示滾吧
- 4xx 表示你丫錯(cuò)了
- 5xx 表示好吧棵逊,我錯(cuò)了
- 狀態(tài)解釋沒什么用
- 第二部分的Content-Type 標(biāo)注了第四部分的格式伤疙,且遵循 MIME 規(guī)范
3. 使用Chrome開發(fā)者工具查看 HTTP 響應(yīng)內(nèi)容
- 打開Network
- 地址欄輸入網(wǎng)址
- 選中第一個(gè)響應(yīng)
- 查看Response Headers,點(diǎn)擊[view source]辆影,點(diǎn)擊[view source]徒像,點(diǎn)擊[view source]
- 看到響應(yīng)的前兩部分
- 查看Response 后者 Preview,看到響應(yīng)的第四部分
三蛙讥、補(bǔ)充
URL 全稱: Uniform Resource Locator(統(tǒng)一資源定位符)
HTML 全稱:Hypertext Markup Language(超文本標(biāo)記語言)
HTTP 全稱:Hypertext Transfer Protocol(超文本傳輸協(xié)議)
DNS 全稱:Domain Name System(域名系統(tǒng))
URI 分為URI 和 URN锯蛀。
URL 是一種 URI,就是我們常說的網(wǎng)址次慢。
URL 包括:協(xié)議旁涤、域名、端口號迫像、路徑劈愚、查詢字符串、錨點(diǎn)
HTTP 的默認(rèn)服務(wù)端口是:80
DNS 的作用:輸入域名闻妓,輸出對應(yīng) IP
我想讓 baidu.com 域名指向 127.0.0.1 這個(gè) IP 應(yīng)該:修改本地 hosts 文件
curl -s -v -- "https://www.baidu.com" 返回的請求是:
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.60.0
Accept: */*
回車
一個(gè)合法的 HTTP 請求第一行:GET / HTTP/1.1
一個(gè)合法的 HTTP 響應(yīng)第一行: HTTP/1.1 200 OK
一個(gè)合法的 HTTP 請求第二部分:
Host: xiedaimala.com
User-Agent: curl/7.60.0
Accept: */*
HTTP 請求中的 Content-Type:表示請求第4部分內(nèi)容的格式
HTTP 響應(yīng)中的 Content-Type:表示響應(yīng)第4部分內(nèi)容的格式
HTTP 響應(yīng)中狀態(tài)碼 200:OK 表示請求已成功菌羽,請求所希望的響應(yīng)頭或數(shù)據(jù)體將隨此響應(yīng)返回。實(shí)際的響應(yīng)將取決于所使用的請求方法纷闺。在GET請求中算凿,響應(yīng)將包含與請求的資源相對應(yīng)的實(shí)體。在POST請求中犁功,響應(yīng)將包含描述或操作結(jié)果的實(shí)體氓轰。
HTTP 響應(yīng)中狀態(tài)碼 301:Moved Permanently 表示被請求的資源已永久移動到新位置,并且將來任何對此資源的引用都應(yīng)該使用本響應(yīng)返回的若干個(gè) URI 之一浸卦。
HTTP 響應(yīng)中狀態(tài)碼 302:Found 表示 Moved Temporarily署鸡,要求客戶端執(zhí)行臨時(shí)的重定向,并且客戶端可以繼續(xù)向原有地址發(fā)送以后的請求限嫌。
HTTP 響應(yīng)中狀態(tài)碼 403:Forbidden 表示沒有權(quán)限訪問此站靴庆,服務(wù)器接收到請求但拒絕提供服務(wù)。
HTTP 響應(yīng)中狀態(tài)碼 404:HTTP 404 或 Not Found 錯(cuò)誤信息是 HTTP 的一種“標(biāo)準(zhǔn)回應(yīng)信息”怒医,此信息代表客戶端在瀏覽網(wǎng)頁時(shí)炉抒,服務(wù)器無法正常提供信息,或是服務(wù)器無法回應(yīng)且不知原因稚叹。404錯(cuò)誤信息可能與“Server Not Found”(無法找到服務(wù)器)或其他類似信息產(chǎn)生混淆焰薄。
HTTP 響應(yīng)中狀態(tài)碼 500:Internal Server Error 表示通用錯(cuò)誤信息,服務(wù)器遇到了一個(gè)未曾預(yù)料的狀況扒袖,導(dǎo)致了它無法完成對請求的處理塞茅,沒用給出具體錯(cuò)誤信息。
HTTP 響應(yīng)中狀態(tài)碼 502:Bad Gateway 表示作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請求時(shí)季率,從上游服務(wù)器接收到無效的響應(yīng)野瘦。