http response大小限制_HTTP 协议图解

78aeede19410f5f1cad17810e3944207.png

75aabd243ddc5fe947a61b46f2a037f7.png

HTTP 协议是一个非常重要的网络协议,我们平时能够使用浏览器浏览网页,其中一个非常重要的条件就是HTTP 协议

0,什么是网络协议

3955efacca92ae720b15a973e211d916.png

互联网的目的是分享信息,网络协议是互联网的重要组成部分。

在互联网诞生之前,计算机中的信息是无法跨机器传输的。为了更方便的分享信息,诞生了互联网。

信息能够在不同的计算机之间快速传输,其基础技术就是网络。信息的传输,则涉及到信息的发送接收,那我们就得知道如何发送信息如何接收信息

协议就是约定网络协议就约定了信息在网络之间是如何传输的,即如何发送如何接收

协议分层

网络协议不是一个协议,而是一堆协议。

网络是分层的,分层的好处是,层与层之间分工明确,互不干预。其可分为四层网络协议五层网络协议七层网络协议,粗略一点可以分为四层,详细一点则可以分为五层或七层。

每一层网络都有一组协议,被称为协议簇

1fffcd0e59abe788729822d1ba1e9fac.png

1,什么是HTTP 协议

HTTP 全称为HyperText Transfer Protocol,即超文本传输协议。从字面上理解,其作用就是传输超文本超文本超级文本,它用超级链接的方式,将互联网中无数的文档链接在一起。

可以简单的将超文本理解为我们平时上网浏览的网页,所以可以认为HTTP 协议的作用就是传输网页。

2,HTTP 的发展历史

1de43a58bc48997e55342c28909e57e6.png

HTTP 协议由英国计算机科学家蒂姆·伯纳斯于1989年在欧洲发起,蒂姆·伯纳斯 作为HTTP 的发明者,对HTTP 的发展起到了至关重要的作用,他被称为互联网之父。2017年,他因发明万维网、第一个浏览器和使万维网得以扩展的基本协议和算法而获得2016年度的图灵奖

HTTP 协议标准由W3CIETF 共同制定,最终发布一系列的RFC

HTTP 协议重要的发展阶段如下:

  • 1989年,由蒂姆·伯纳斯 发起
  • 1991年,发布HTTP/0.9,这是HTTP 协议的第一个版本,也是最简单的版本,只支持一个GET 方法,并且只能传输简单的文本字符串。
  • 1996年,发布HTTP/1.0,其内容大大增加,可传输图像视频二进制格式等丰富的网页。支持GETPOSTHEAD 三种方法,增加了HTTP Header头信息,状态码内容编码等功能。
  • 1997年,发布HTTP1.1,是较为完整的版本。在之前的基础上,其主要引入了持久连接分块传输等功能。另外,增加了OPTIONSPUTPATCHDELETETRACECONNECT方法。对于客户端,引入了重要的Host 头部字段,用来指定服务器的域名,使得一个请求可以发往同一台服务器上的不同网站,为虚拟主机的流行打下基础。
  • 2009年,谷歌公开了其自主研发的SPDY 协议,主要解决HTTP1.1 效率不高的问题。SPDY 协议的主要特性被引入了HTTP/2 中。
  • 2015年,发布HTTP/2,而不是HTTP/2.0,是因为标准委员会不打算再发布子版本,下一个新版本将直接是 HTTP/3

equation?tex=%5Cbegin%7Barray%7D%5Bb%5D+%7B%7Cc%7Cc%7C%7D++%5Chline+%E5%B9%B4%E4%BB%BD+%26+%E5%90%AB%E4%B9%89%5C%5C+%5Chline++1989%E5%B9%B4++%26++%E7%94%B1%E8%92%82%E5%A7%86%C2%B7%E4%BC%AF%E7%BA%B3%E6%96%AF+%E5%8F%91%E8%B5%B7++%5C%5C++%5Chline+1991%E5%B9%B4+%26+%E5%8F%91%E5%B8%83HTTP%2F0.9+%5C%5C++%5Chline+1996%E5%B9%B4+%26+%E5%8F%91%E5%B8%83HTTP%2F1.0+%5C%5C++%5Chline+1997%E5%B9%B4+%26+%E5%8F%91%E5%B8%83HTTP%2F1.1+%5C%5C++%5Chline+2009%E5%B9%B4+%26+%E8%B0%B7%E6%AD%8C%E5%85%AC%E5%B8%83SPDY+%5C%5C++%5Chline+2015%E5%B9%B4+%26+%E5%8F%91%E5%B8%83HTTP%2F2+%5C%5C++%5Chline+%5Cend%7Barray%7D%5C%5C

3,HTTP 所在的网络层次

HTTP 协议建立在Tcp/Ip 协议之上,HTTP 属于应用层协议。其协议层结构如下:

e027caf55cd662a630e34119e6de6a83.png

4,HTTP 请求与响应

HTTP 协议是一个请求-响应式协议,一般由客户端(比如浏览器)向服务端发起,服务端处理后,再向客户端返回信息。

客户端发出的消息称为HTTP 请求Request),服务端返回的消息称为HTTP 响应Response)。

16c2d8d264ce97b62397b25fadba66fd.png

每种协议都有它的消息结构,有了消息结构,发送方就知道以怎样的结构发送消息,接收方就知道以怎样的结构接收消息。下面介绍HTTP 消息结构。

5,HTTP 请求消息结构

852c9face591c54c0bb789f9b97bb27c.png

由上图可看出,HTTP 请求由四部分组成:

  • 请求行:分别是请求方法+空格+URL+空格+协议版本+rn
  • 请求头部:由多个请求头部键值对组成,中间以冒号:隔开,每个键值对最后是rn
  • 空行:即rn
  • 请求包体:包体部分

例子:

GET / HTTP/1.0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
Accept: */*

其中: - 第1行是请求行GET 为请求方法,/URLHTTP1.0 为协议版本,中间以空格隔开。 - 第2行与第3行是请求头。 - 请求头下面的空行,这里没有显示。 - 一般GET 请求不包含请求体,所以本请求中没有请求体。

6,HTTP 请求响应结构

ba44503b3c5b25449f27f2241ea60bfc.png

由上图可看出,HTTP 响应由四部分组成:

  • 状态行:分别是协议版本+空格+状态码+空格+状态码描述+rn
  • 响应头部:由多个响应头部键值对组成,中间以冒号:隔开,每个键值对最后是rn
  • 空行:即rn
  • 响应包体:包体部分

例子:

HTTP/1.0 200 OK 
Content-Type: text/plain
Content-Length: 82
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84

<html>
  <body>Hello HTTP</body>
</html>

其中:

  • 第1行为响应状态行HTTP/1.0 为协议版本,200 是响应状态码OK状态码描述,中间用空格隔开。
  • 第2行到第6行为响应头
  • 第7行为空行
  • 第8行到第10行为响应内容

7,HTTP 请求方法

HTTP 协议支持9 种请求方法,最常用的是GETPOST 方法。

equation?tex=%5Cbegin%7Barray%7D%5Bb%5D+%7B%7Cc%7Cc%7C%7D++%5Chline+%E8%AF%B7%E6%B1%82%E6%96%B9%E6%B3%95+%26+%E5%90%AB%E4%B9%89%5C%5C+%5Chline++GET++%26++%E8%8E%B7%E5%8F%96%E6%8C%87%E5%AE%9A%E9%A1%B5%E9%9D%A2%E4%BF%A1%E6%81%AF++%5C%5C++%5Chline++HEAD++%26++%E7%B1%BB%E4%BC%BCGET%5C+%E8%AF%B7%E6%B1%82%EF%BC%8C%E4%BD%86%E5%93%8D%E5%BA%94%E4%B8%AD%E6%B2%A1%E6%9C%89%E5%85%B7%E4%BD%93%E5%86%85%E5%AE%B9%EF%BC%8C%E5%8F%AA%E6%9C%89%E5%93%8D%E5%BA%94Header++%5C%5C++%5Chline++POST++%26++%E5%90%91%E6%8C%87%E5%AE%9AURL%5C+%E6%8F%90%E4%BA%A4%E4%BF%A1%E6%81%AF++%5C%5C++%5Chline++PUT++%26++%E5%90%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BC%A0%E9%80%81%E6%95%B0%E6%8D%AE++%5C%5C++%5Chline++DELETE++%26++%E8%AF%B7%E6%B1%82%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%88%A0%E9%99%A4%E6%8C%87%E5%AE%9A%E5%86%85%E5%AE%B9++%5C%5C++%5Chline++OPTIONS++%26++%E6%9F%A5%E7%9C%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BF%A1%E6%81%AF++%5C%5C++%5Chline++TRACE++%26++%E5%9B%9E%E6%98%BE%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%94%B6%E5%88%B0%E7%9A%84%E8%AF%B7%E6%B1%82%EF%BC%8C%E4%B8%BB%E8%A6%81%E7%94%A8%E4%BA%8E%E6%B5%8B%E8%AF%95%E6%88%96%E8%AF%8A%E6%96%AD++%5C%5C++%5Chline++PATCH++%26++%E6%98%AF%E5%AF%B9PUT%5C+%E6%96%B9%E6%B3%95%E7%9A%84%E8%A1%A5%E5%85%85%EF%BC%8C%E7%94%A8%E6%9D%A5%E5%AF%B9%E5%B7%B2%E7%9F%A5%E8%B5%84%E6%BA%90%E8%BF%9B%E8%A1%8C%E5%B1%80%E9%83%A8%E6%9B%B4%E6%96%B0+++%5C%5C++%5Chline++CONNECT++%26++HTTP%2F1.1%5C+%E5%8D%8F%E8%AE%AE%E4%B8%AD%E9%A2%84%E7%95%99%E7%BB%99%E8%83%BD%E5%A4%9F%E5%B0%86%E8%BF%9E%E6%8E%A5%E6%94%B9%E4%B8%BA%E7%AE%A1%E9%81%93%E6%96%B9%E5%BC%8F%E7%9A%84%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1%E5%99%A8++%5C%5C++%5Chline+%5Cend%7Barray%7D%5C%5C

8,HTTP GET 与POST 方法

GET 方法POST 方法是最常用的两个HTTP 方法,来看下其异同点:

  • 请求内容存放位置不同:GET 方法一般没有请求体,其请求内容放在URL 参数中,POST 方法则将请求内容放在请求体中。
  • POST 方法 安全性更高:GET 请求一般是明文传输,不利于传输敏感数据。POST 请求内容在请求体中,更方便加密,提高安全性。
  • POST 方法传输的数据量更大:GET 请求内容在URL 中,因此有大小限制,而POST 请求 内容在请求体中,理论上没有大小限制。

9,HTTP 请求头字段

这里介绍一些常用的HTTP 请求头字段:

Host:客户端端请求的域名。 Connection:告诉服务端,处理完本请求后,是否关闭连接。 User-Agent:客户端使用的浏览器或APP 类型/版本。 Accept:客户端支持哪些类型的文档。 Accept-Encoding :客户端支持的编码类型。 Accept-Language :客户端支持的语言类型。 Referer :客户端从哪个网页过来的。 Cache-Control:指定缓存机制。

10,HTTP 响应头字段

这里介绍一些常用的HTTP 响应头字段:

Allow:表明服务器支持哪些请求方法,如GET,POST 等。 Content-Encoding:响应内容编码方法。 Content-Type:响应内容属于什么MIME 类型。 Content-Length:响应内容的长度。 Date:当前GMT 时间。 Expiress:响应内容过期时间,过期后将不再缓存内容。 Last-Modified:文档的最后改动时间。 Location:告诉客户端到哪里获取文档,一般用于重定向。 Refresh:浏览器在多少秒后刷新文档。 Server:服务器名字。 Set-Cookie:设置和页面关联的Cookie。 Date:表示消息发送时间。

11,HTTP 响应状态码

服务器在向客户端返回内容时,会带有一个HTTP Status Code(状态码),用于告诉客户端的返回状态。

HTTP 状态码分为5 种类型,由三个十进制数字组成。第一个数字(1-5)代表状态码的分类,后两位是其含义。

equation?tex=%5Cbegin%7Barray%7D%5Bb%5D+%7B%7Cc%7Cc%7C%7D++%5Chline+%E7%8A%B6%E6%80%81%E7%A0%81%E7%B1%BB%E5%9E%8B+%26+%E5%90%AB%E4%B9%89%5C%5C+%5Chline++1xx++%26++%E8%A1%A8%E6%98%8E%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%B7%B2%E7%BB%8F%E6%94%B6%E5%88%B0%E8%AF%B7%E6%B1%82++%5C%5C++%5Chline++2xx++%26++%E8%A1%A8%E6%98%8E%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%B7%B2%E7%BB%8F%E6%88%90%E5%8A%9F%E6%8E%A5%E6%94%B6%E5%B9%B6%E5%A4%84%E7%90%86%E8%AF%B7%E6%B1%82++%5C%5C++%5Chline++3xx++%26++%E8%A1%A8%E6%98%8E%E8%AF%B7%E6%B1%82%E7%9A%84%E8%B5%84%E6%BA%90%E5%B7%B2%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E5%85%B6%E5%AE%83%E5%9C%B0%E6%96%B9++%5C%5C++%5Chline++4xx++%26++%E8%A1%A8%E6%98%8E%E5%AE%A2%E6%88%B7%E7%AB%AF%E7%9A%84%E8%AF%B7%E6%B1%82%E6%9C%89%E9%94%99%E8%AF%AF++%5C%5C++%5Chline++5xx++%26++%E8%A1%A8%E6%98%8E%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%87%BA%E7%8E%B0%E9%94%99%E8%AF%AF++%5C%5C++%5Chline+%5Cend%7Barray%7D%5C%5C

常见状态码

equation?tex=%5Cbegin%7Barray%7D%5Bb%5D+%7B%7Cc%7Cc%7C%7D++%5Chline+%E7%8A%B6%E6%80%81%E7%A0%81+%26+%E6%8F%8F%E8%BF%B0+%26+%E5%90%AB%E4%B9%89%5C%5C+%5Chline++100++%26++Continue++%26+%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%BA%94%E7%BB%A7%E7%BB%AD%E5%85%B6%E8%AF%B7%E6%B1%82++%5C%5C++%5Chline++200++%26++OK++%26++%E8%AF%B7%E6%B1%82%E6%88%90%E5%8A%9F%EF%BC%8C%E4%B8%80%E8%88%AC%E7%94%A8%E4%BA%8EGET%E4%B8%8EPOST%E8%AF%B7%E6%B1%82+%5C%5C++%5Chline++301++%26++Moved%5C+Permanently++%26++%E8%AF%B7%E6%B1%82%E7%9A%84%E8%B5%84%E6%BA%90%E5%B7%B2%E8%A2%AB%E6%B0%B8%E4%B9%85%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E6%96%B0%E5%9C%B0%E5%9D%80+%5C%5C++%5Chline++302++%26++Found++%26+%E8%AF%B7%E6%B1%82%E7%9A%84%E8%B5%84%E6%BA%90%E5%B7%B2%E8%A2%AB%E4%B8%B4%E6%97%B6%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E6%96%B0%E5%9C%B0%E5%9D%80++%5C%5C++%5Chline++304++%26++Not%5C+Modified++%26++%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%AE%BF%E9%97%AE%E7%9A%84%E5%86%85%E5%AE%B9%E6%9C%AA%E4%BF%AE%E6%94%B9%EF%BC%8C%E5%BA%94%E4%BB%8E%E7%BC%93%E5%AD%98%E4%B8%AD%E8%8E%B7%E5%8F%96%E5%86%85%E5%AE%B9+%5C%5C++%5Chline++400++%26++Bad%5C+Request++%26++%E5%AE%A2%E6%88%B7%E7%AB%AF%E7%9A%84%E8%AF%B7%E6%B1%82%E6%9C%89%E8%AF%AF+%5C%5C++%5Chline++401++%26++Unauthorized++%26++%E8%AF%B7%E6%B1%82%E8%A6%81%E6%B1%82%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%BF%9B%E8%A1%8C%E8%BA%AB%E4%BB%BD%E8%AE%A4%E8%AF%81+%5C%5C++%5Chline++403++%26++Forbidden++%26++%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%8B%92%E7%BB%9D%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%AE%BF%E9%97%AE+%5C%5C++%5Chline++404++%26++Not%5C+Found++%26++%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%AF%B7%E6%B1%82%E7%9A%84%E8%B5%84%E6%BA%90%EF%BC%8C%E6%9C%8D%E5%8A%A1%E7%AB%AF%E4%B8%8D%E5%AD%98%E5%9C%A8+%5C%5C++%5Chline++405++%26++Method%5C+Not%5C+Allowed++%26+%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%AF%B7%E6%B1%82%E4%B8%AD%E7%9A%84%E6%96%B9%E6%B3%95%E8%A2%AB%E7%A6%81%E6%AD%A2++%5C%5C++%5Chline++500++%26+++Internal%5C+Server%5C+Error++%26++%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%86%85%E9%83%A8%E9%94%99%E8%AF%AF+%5C%5C++%5Chline++501++%26++Not%5C+Implemented++%26++%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8D%E6%94%AF%E6%8C%81%E8%AF%A5%E8%AF%B7%E6%B1%82+%5C%5C++%5Chline++503++%26++Service%5C+Unavailable++%26++%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%BF%87%E8%BD%BD%EF%BC%8C%E6%9A%82%E6%97%B6%E4%B8%8D%E5%8F%AF%E7%94%A8+%5C%5C++%5Chline+505+%26+HTTP%5C+Version%5C+not%5C+supported+%26+%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E7%9A%84HTTP%E7%89%88%E6%9C%AC%EF%BC%8C%E6%9C%8D%E5%8A%A1%E7%AB%AF%E4%B8%8D%E6%94%AF%E6%8C%81+%5C%5C++%5Chline+%5Cend%7Barray%7D%5C%5C

12,用浏览器演示HTTP

下面通过一个例子实际感受以下HTTP 协议。

在浏览器(我这里用的是Chrome)中访问新浪网https://www.sina.com.cn/,通过F12键,调出浏览器开发者工具

b1e5a4c5a1a3f7f0d5e3af07fc9470d6.png
  1. 点击Network,可查看网络请求
  2. 点击某个请求,可查看该请求信息
  3. 点击Response Header,可查看响应头内容
  4. 点击Request Header,可查看请求头信息
  5. 点击点击Response,可查看响应内容

13,用curl 命令演示HTTP

curl 命令可以发送HTTP(S) 协议,这里有curl 命令的常用方法。

我们使用 curl -v 参数 来显示详细的HTTP 协议包信息:

01459404d855de062c8a94524edf4205.png

14,什么是HTTP/2

HTTP/2 可看作是HTTP1.x 的增强版,其主要解决HTTP1.x 的效率等问题,其消息结构也已经发生了改变。

我们来访问https://http2.akamai.com/demo,来感受下HTTP2的速度。HTTP/1.1 耗时15 秒多,HTTP/2耗时6 秒多。

293226aa377ae87e1d2142e116ba47d8.gif

HTTP2 有如下特点:

  • HTTP2 是一个彻底的二进制协议,所有信息以二进制格式传输。
  • HTTP2 支持多工(Multiplexing),在一个TCP 链接中可同时处理多个HTTP 请求。
  • HTTP2 中的数据流不是按照顺序发送的,是乱序的。
  • HTTP2 支持头信息压缩
  • HTTP2 支持服务端主动向客户端发送信息。

15,什么是HTTPS

acde1fa72b41e6002b7ecfd7f08d86e9.png

HTTPS 中的S 是指Security,即是安全的意思,所以HTTPS 就是安全的HTTP

HTTPS 在HTTP 协议的基础上加入了一层SSL/TLS,用于对HTTP 信息加密,其加密采用非对称加密算法RSA 算法。其协议层结构如下:

ee1b2a6878fe45deb1b6c2404f7a85c4.png

(完。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值