http 協(xié)議 & curl命令

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)容。
  • 3XX 重定向
    • 301 Moved Permanently
      永久重定向,請(qǐng)求的資源以備分配了新的URI,以后應(yīng)該使用新的URI請(qǐng)求。
$ 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ù)器上沒有找到資源
  • 5XX 服務(wù)器錯(cuò)誤

    • 500 Internal Server Error
      服務(wù)器端執(zhí)行請(qǐng)求是發(fā)生了錯(cuò)誤。
    • 503 Service Unavailable
      服務(wù)不可用,無法處理請(qǐng)求

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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 本篇文章篇幅比較長,先來個(gè)思維導(dǎo)圖預(yù)覽一下。 一、概述 1.計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)分層 2.TCP/IP 通信傳輸流 ...
    滌生_Woo閱讀 55,244評(píng)論 24 557
  • 1. 網(wǎng)絡(luò)基礎(chǔ)TCP/IP HTTP基于TCP/IP協(xié)議族,HTTP屬于它內(nèi)部的一個(gè)子集。 把互聯(lián)網(wǎng)相關(guān)聯(lián)的協(xié)議集...
    yozosann閱讀 3,468評(píng)論 0 20
  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,440評(píng)論 6 152
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,948評(píng)論 18 139
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng),內(nèi)容來源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,252評(píng)論 3 82