http 概述
HTTP,全稱 Hypertext Transfer Protocol,超文本傳輸協(xié)議,是一種用于分布式、協(xié)作式和超媒體信息系統(tǒng)的應(yīng)用層協(xié)議。HTTP是萬維網(wǎng)數(shù)據(jù)通信的基礎(chǔ)。
此外HTTP協(xié)議是無狀態(tài)協(xié)議,不會(huì)在客戶端亦或服務(wù)端保存信息
請(qǐng)求的過程:
- 客戶端:請(qǐng)求www.lxweimin.com
- 請(qǐng)求DNS獲取www.lxweimin.com的IP地址
- HTTP生成請(qǐng)求www.lxweimin.com頁面的報(bào)文
- TCP 將HTTP請(qǐng)求分隔為合適的長度 發(fā)送 - IP 搜索并中轉(zhuǎn)該請(qǐng)求知道到達(dá)服務(wù)端
- 服務(wù)端:
- TCP 解析報(bào)文
- HTTP 解析請(qǐng)求
- 回傳請(qǐng)求的資源
URL & URI
- URL,全稱 Uniform Resource Locator ,統(tǒng)一資源定位符;
- URI, 全稱 Uniform Resource Identifier, 統(tǒng)一資源標(biāo)識(shí)符;
請(qǐng)求報(bào)文&響應(yīng)報(bào)文
curl -v http://www.google.com
* Rebuilt URL to: http://www.google.com/
* Trying 172.217.25.4...
* Connected to www.google.com (172.217.25.4) port 80 (#0)
> GET / HTTP/1.1
> Host: www.google.com
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 302 Found
< Cache-Control: private
< Content-Type: text/html; charset=UTF-8
< Referrer-Policy: no-referrer
< Location: http://www.google.com.hk/?gfe_rd=cr&dcr=0&ei=TR-lWYnIK7Ol8wef3YGoAQ
< Content-Length: 272
< Date: Tue, 29 Aug 2017 08:01:17 GMT
<
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A >here</A>.
</BODY></HTML>
* Connection #0 to host www.google.com left intact
請(qǐng)求報(bào)文-圖解HTTP
響應(yīng)報(bào)文-圖解HTTP
Post請(qǐng)求
HTTP 方法
- GET
訪問URI標(biāo)識(shí)的資源,經(jīng)服務(wù)器解析請(qǐng)求后返回響應(yīng)內(nèi)容。
curl http://www.google.com
- POST
用于傳輸實(shí)體的主體
curl -d "test" www.example.com
- PUT
PUT 方法用來傳輸文件,要求在 請(qǐng)求報(bào)文的主體中包含文件內(nèi)容,然后保存到請(qǐng)求 URI 指定的位置 - HEAD
只接收?qǐng)?bào)文頭部,用于確認(rèn)URI的有效性及資源跟新的日期時(shí)間等。
## 僅HEAD
curl -I http://www.google.com
## HEAD 和 響應(yīng)主體
curl -i www.sina.com
- OPTIONS
用來查詢針對(duì)請(qǐng)求 URI 指定的資源支持的方法。
<!---請(qǐng)求---> OPTIONS * HTTP/1.1 Host: www.hackr.jp
<!---響應(yīng)---> HTTP/1.1 200 OK
Allow: GET, POST, HEAD, OPTIONS
<!--- (返回服務(wù)器支持的方法) --->
cookie
HTTP協(xié)議是無狀態(tài)協(xié)議,一方面降低了服務(wù)端的內(nèi)存和cpu消耗,另一方面需要其他方式記錄客戶端的狀態(tài)。
curl -c cookies http://example.com ## 沒有保存?
curl -b cookies http://example.com ## 以cookies文件為cookie發(fā)起請(qǐng)求
curl -b "name=xxx" www.example.com ## 以字符串里的鍵值對(duì)作為cookie發(fā)起請(qǐng)求
curl --cookie "NAME1=VALUE1; NAME2=VALUE2" www.example.com
狀態(tài)碼
類別 | 原因短語 |
---|---|
1XX | Informational(信息性狀態(tài)碼) 接收的請(qǐng)求正在處理 |
2XX | Success(成功狀態(tài)碼) 請(qǐng)求正常處理完畢 |
3XX | Redirection(重定向狀態(tài)碼) 需要進(jìn)行附加操作以完成請(qǐng)求 |
4XX | Client Error(客戶端錯(cuò)誤狀態(tài)碼) 服務(wù)器無法處理請(qǐng)求 |
5XX | Server Error(服務(wù)器錯(cuò)誤狀態(tài)碼) 服務(wù)器處理請(qǐng)求出錯(cuò) |
- 2XX 成功
- 200 OK
表示從客戶端發(fā)來的請(qǐng)求在服務(wù)器端被正常處理了 - 204 No Content
該狀態(tài)碼代表服務(wù)器接收的請(qǐng)求已成功處理,但在返回的響應(yīng)報(bào)文 中不含實(shí)體的主體部分。另外,也不允許返回任何實(shí)體的主體。 - 206 Partial Content
標(biāo)識(shí)客戶端進(jìn)行了范圍請(qǐng)求,而服務(wù)器成功執(zhí)行了這部分的GET請(qǐng)求。響應(yīng)報(bào)文中包含由 Content-Range 指定范圍的實(shí)體內(nèi)容。
- 200 OK
- 3XX 重定向
- 301 Moved Permanently
永久重定向,請(qǐng)求的資源以備分配了新的URI,以后應(yīng)該使用新的URI請(qǐng)求。
- 301 Moved Permanently
$ curl -I www.sina.com
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Tue, 29 Aug 2017 09:19:19 GMT
Content-Type: text/html
Content-Length: 178
Connection: close
Location: http://www.sina.com.cn/
Expires: Tue, 29 Aug 2017 09:20:54 GMT
Cache-Control: max-age=120
Age: 25
Via: http/1.1 cnc.beixian.ha2ts4.214 (ApacheTrafficServer/4.2.1.1 [cRs f ])
X-Cache: HIT.214
X-Via-CDN: f=edge,s=cnc.beixian.ha2ts4.219.nb.sinaedge.com,c=103.37.140.12;f=Edge,s=cnc.beixian.ha2ts4.214,c=123.126.157.219
## 允許跳轉(zhuǎn)
$ curl -IL www.sina.com
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Tue, 29 Aug 2017 09:20:09 GMT
Content-Type: text/html
Content-Length: 178
Connection: close
Location: http://www.sina.com.cn/
Expires: Tue, 29 Aug 2017 09:21:51 GMT
Cache-Control: max-age=120
Age: 18
Via: http/1.1 cnc.beixian.ha2ts4.214 (ApacheTrafficServer/4.2.1.1 [cRs f ])
X-Cache: HIT.214
X-Via-CDN: f=edge,s=cnc.beixian.ha2ts4.211.nb.sinaedge.com,c=103.37.140.12;f=Edge,s=cnc.beixian.ha2ts4.214,c=123.126.157.211
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 29 Aug 2017 09:20:09 GMT
Content-Type: text/html
Content-Length: 601168
Connection: close
Last-Modified: Tue, 29 Aug 2017 09:16:09 GMT
Vary: Accept-Encoding
Expires: Tue, 29 Aug 2017 09:21:09 GMT
Cache-Control: max-age=60
X-Powered-By: shci_v1.03
Age: 0
Via: http/1.1 cnc.beixian.ha2ts4.205 (ApacheTrafficServer/4.2.1.1 [cHs f ])
X-Cache: HIT.205
X-Via-CDN: f=edge,s=cnc.beixian.ha2ts4.219.nb.sinaedge.com,c=103.37.140.12;f=Edge,s=cnc.beixian.ha2ts4.205,c=123.126.157.219
- 302 Found
臨時(shí)性重定向。該狀態(tài)碼表示請(qǐng)求的資源已被分配了新的 URI,希 望用戶(本次)能使用新的 URI 訪問。
curl -I www.google.com
HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Referrer-Policy: no-referrer
Location: http://www.google.com.hk/?gfe_rd=cr&dcr=0&ei=XC-lWfuhNbCl8weshYbAAQ
Content-Length: 272
Date: Tue, 29 Aug 2017 09:09:48 GMT
-
4XX 客戶端錯(cuò)誤
- 400 Bad Request
請(qǐng)求的報(bào)文中存在語法錯(cuò)誤。 - 401 Unauthorized
該狀態(tài)碼表示發(fā)送的請(qǐng)求需要有通過 HTTP 認(rèn)證(BASIC 認(rèn)證、 DIGEST 認(rèn)證)的認(rèn)證信息。另外若之前已進(jìn)行過 1 次請(qǐng)求,則表示用 戶認(rèn)證失敗。 - 403 Forbidden
請(qǐng)求被服務(wù)器拒絕了 - 404 Not Found
服務(wù)器上沒有找到資源
- 400 Bad Request
-
5XX 服務(wù)器錯(cuò)誤
- 500 Internal Server Error
服務(wù)器端執(zhí)行請(qǐng)求是發(fā)生了錯(cuò)誤。 - 503 Service Unavailable
服務(wù)不可用,無法處理請(qǐng)求
- 500 Internal Server Error
HTTP 部首
? ~ curl -v www.google.com
* Rebuilt URL to: www.google.com/
* Trying 216.58.199.4...
* Connected to www.google.com (216.58.199.4) port 80 (#0)
> GET / HTTP/1.1 ## 請(qǐng)求行
> Host: www.google.com ## 請(qǐng)求資源所在互聯(lián)網(wǎng)域名
> User-Agent: curl/7.43.0 ## 請(qǐng)求的瀏覽器和用戶代理名稱等信息
> Accept: */* ## 用戶能處理的媒體類型及其相對(duì)優(yōu)先級(jí)
>
< HTTP/1.1 302 Found ## 狀態(tài)行
< Cache-Control: private ## 緩存相應(yīng)部首 僅向特定用戶返回響應(yīng)
< Content-Type: text/html; charset=UTF-8 ## 實(shí)體首部 實(shí)體主體內(nèi)對(duì)象的媒體類型
< Referrer-Policy: no-referrer ##
< Location: http://www.google.com.hk/?gfe_rd=cr&dcr=0&ei=NJymWaaXM4rM8gec9IXoBg ## 將響應(yīng)接收方引導(dǎo)至某個(gè)與請(qǐng)求 URI 位置不同的資源,該字段會(huì)配合 3xx :Redirection 的響應(yīng),提供重定向的 URI。
< Content-Length: 272 ## 實(shí)體部首 實(shí)體主體部分的大小(單位是字 節(jié))
< Date: Wed, 30 Aug 2017 11:06:28 GMT
<
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A >here</A>.
</BODY></HTML>
* Connection #0 to host www.google.com left intact