http 协议 & curl命令

http 概述

HTTP,全称 Hypertext Transfer Protocol,超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网数据通信的基础。
此外HTTP协议是无状态协议,不会在客户端亦或服务端保存信息

请求的过程:

  • 客户端:请求www.jianshu.com
    - 请求DNS获取www.jianshu.com的IP地址
    - HTTP生成请求www.jianshu.com页面的报文
    - TCP 将HTTP请求分隔为合适的长度 发送
  • IP 搜索并中转该请求知道到达服务端
  • 服务端:
    - TCP 解析报文
    - HTTP 解析请求
    - 回传请求的资源

URL & URI

  • URL,全称 Uniform Resource Locator ,统一资源定位符;
  • URI, 全称 Uniform Resource Identifier, 统一资源标识符;

请求报文&响应报文

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 HREF="http://www.google.com.hk/?gfe_rd=cr&dcr=0&ei=TR-lWYnIK7Ol8wef3YGoAQ">here</A>.
</BODY></HTML>
* Connection #0 to host www.google.com left intact
请求报文-图解HTTP

响应报文-图解HTTP

Post请求

HTTP 方法

  • GET
    访问URI标识的资源,经服务器解析请求后返回响应内容。
curl http://www.google.com
  • POST
    用于传输实体的主体
curl -d "test" www.example.com
  • PUT
    PUT 方法用来传输文件,要求在 请求报文的主体中包含文件内容,然后保存到请求 URI 指定的位置
  • HEAD
    只接收报文头部,用于确认URI的有效性及资源跟新的日期时间等。
## 仅HEAD
curl -I http://www.google.com
## HEAD 和 响应主体
curl -i www.sina.com 
  • OPTIONS
    用来查询针对请求 URI 指定的资源支持的方法。
<!---请求---> OPTIONS * HTTP/1.1 Host: www.hackr.jp 
<!---响应---> HTTP/1.1 200 OK 
             Allow: GET, POST, HEAD, OPTIONS  
             <!--- (返回服务器支持的方法)  --->

cookie

HTTP协议是无状态协议,一方面降低了服务端的内存和cpu消耗,另一方面需要其他方式记录客户端的状态。

curl -c cookies http://example.com ## 没有保存?
curl -b cookies http://example.com ## 以cookies文件为cookie发起请求
curl -b "name=xxx" www.example.com ## 以字符串里的键值对作为cookie发起请求
curl --cookie "NAME1=VALUE1; NAME2=VALUE2" www.example.com

状态码

类别 原因短语
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器错误状态码) 服务器处理请求出错
  • 2XX 成功
    • 200 OK
      表示从客户端发来的请求在服务器端被正常处理了
    • 204 No Content
      该状态码代表服务器接收的请求已成功处理,但在返回的响应报文 中不含实体的主体部分。另外,也不允许返回任何实体的主体。
    • 206 Partial Content
      标识客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文中包含由 Content-Range 指定范围的实体内容。
  • 3XX 重定向
    • 301 Moved Permanently
      永久重定向,请求的资源以备分配了新的URI,以后应该使用新的URI请求。
$ 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

## 允许跳转
$ 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
    临时性重定向。该状态码表示请求的资源已被分配了新的 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 客户端错误

    • 400 Bad Request
      请求的报文中存在语法错误。
    • 401 Unauthorized
      该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、 DIGEST 认证)的认证信息。另外若之前已进行过 1 次请求,则表示用 户认证失败。
    • 403 Forbidden
      请求被服务器拒绝了
    • 404 Not Found
      服务器上没有找到资源
  • 5XX 服务器错误

    • 500 Internal Server Error
      服务器端执行请求是发生了错误。
    • 503 Service Unavailable
      服务不可用,无法处理请求

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   ## 请求行
> 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=NJymWaaXM4rM8gec9IXoBg ## 将响应接收方引导至某个与请求 URI 位置不同的资源,该字段会配合 3xx :Redirection 的响应,提供重定向的 URI。
< Content-Length: 272  ## 实体部首 实体主体部分的大小(单位是字 节)
< 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 HREF="http://www.google.com.hk/?gfe_rd=cr&dcr=0&ei=NJymWaaXM4rM8gec9IXoBg">here</A>.
</BODY></HTML>
* Connection #0 to host www.google.com left intact
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 本篇文章篇幅比较长,先来个思维导图预览一下。 一、概述 1.计算机网络体系结构分层 2.TCP/IP 通信传输流 ...
    涤生_Woo阅读 54,923评论 24 557
  • 1. 网络基础TCP/IP HTTP基于TCP/IP协议族,HTTP属于它内部的一个子集。 把互联网相关联的协议集...
    yozosann阅读 3,435评论 0 20
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,326评论 6 152
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 5,201评论 3 82