分享

HTTP和HTTPS协议详细介绍

 bob6317 2022-12-01 发布于广东

摘要:本文详细介绍了HTTP/HTTPS协议的详细知识,能为编程入门打下基础,也可以作为程序员的参考手册。

1. HTTP

1.1 定义和历史

HTTP(HyperText Transfer Protocol超文本传输协议),是WWW(World Wide Web,万维网)的传输协议,是TCP/IP模型的应用层协议,负责Web浏览器和Web服务器之间传输超文本信息(Hypertext),超文本信息可以描述超媒体( Hypermedia),而超媒体包括文本、图形、视频、音频等多媒体(Multimedia)信息,这些信息以web页面(Web Page)为单位,他们之间通过超链接(Hyperlink)相互连接。

HTTP发展历史如下:

1989年,英国科学家蒂姆伯纳斯李,万维网发明者,创建单行 HTTP 协议。

1991年,蒂姆伯纳斯李创建的单行 HTTP 协议被命名为HTTP/0.9,支持连接、断开连接、请求和响应。

1996年,HTTP/1.0 发布,支持GET,Head,和POST。

1997年,HTTP/1.1 ( RFC 2068 ) 发布,这是HTTP 的第一个标准化版本,也是目前广泛使用的版本,支持OPTIONS,GET,HEAD,POST,PUT,DELETE,和TRACE。

2015年,HTTP/2发布,支持对流量的并行化、优先化和流量控制。

2021年,HTTP/3草案发布,支持QUIC,QUIC是2012年谷歌基于UDP开发的新协议。

1.2 功能特点

HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。下图来自网上,是HTTP协议的概况。

文章图片1

1.3交互流程

HTTP1.0采用普通交互流程,多次交互才能完成信息传输,如下:

  • Web浏览器(注:用户代理程序包括web浏览器、爬虫等,以下仅仅提Web浏览器)与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。
  • 通过TCP套接字,Web浏览器向Web服务器发送请求报文,请求报文由请求行、请求头部、空行和请求数据等组成。
  • Web服务器接受请求
  • Web服务器解析请求,并处理请求。
  • Web服务器发送响应报文,响应报文由状态行、响应头部、空行和响应数据4部分组成。
  • Web服务器主动关闭TCP连接,Web浏览器释放TCP连接,除非显式指定keepalive(注:1.0默认使用短连接,但是可以指定使用长连接)。
  • Web浏览器解析HTML内容。
  • Web浏览器首先解析状态,查看表明请求是否成功的状态代码。
  • Web浏览器继续解析每一个响应头。
  • Web浏览器继续读取响应数据HTML,根据HTML的语法对其进行格式化,并在Web浏览器窗口中显示。

HTTP1.1交互流程如下:

  • Web浏览器与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。
  • 通过TCP套接字,Web浏览器向Web服务器发送请求报文,请求报文由请求行、请求头部、空行和请求数据等组成。
  • Web服务器接受请求
  • Web服务器解析请求,并处理请求。
  • Web服务器发送响应报文,响应报文由状态行、响应头部、空行和响应数据4部分组成。
  • Web浏览器解析HTML内容。
  • Web浏览器首先解析状态,查看表明请求是否成功的状态代码。
  • Web浏览器继续解析每一个响应头。
  • Web浏览器继续读取响应数据HTML,根据HTML的语法对其进行格式化,并在Web浏览器窗口中显示。
  • Web浏览器和Web服务器协调进行连接管理工作,默认采用持久连接,因此web浏览器继续发送请求。(注:1.1支持短连接, 长连接, 和 流水线)

下图是1.0和1.1 GET交互流程的对比:

文章图片2

1.4长连接(持久连接)

HTTP1.1采用长连接(持久连接HTTP Persistent Connections),也称为 HTTP keep-alive 或 HTTP connection reuse,只要任意一端没有明确提出断开连接,则保持TCP连接状态,其交互流程如下(来自网上):

文章图片3

上图的“客户端”实际上就是Web浏览器,或者定制的特殊Web浏览器,上图的“服务器”就是Web服务器,“建立TCP连接”包括三个子步骤,“断开TCP连接”包括四个子步骤。

1.5管线化

长连接使得多数请求以管线化(pipelining)方式发送成为可能,HTTP1.1支持管线化传输。管线化技术支持并行发送多个请求。如下图(来自网上):

文章图片4

2.HTTPS

2.1定义和历史

HTTPS是基于SSL/TLS改造HTTP的新协议,全称是Hypertext Transfer Protocol Secure,意思是安全的超文本传输协议,通过传输加密和身份认证保证了传输过程的安全性。

如下图,HTTPS增加了安全层,因此HTTPS的发展历史实际上是SSL/TLS的发展历史。

文章图片5

SSL/TLS发展历史:

1990年,网景公司推出私有SSL协议,用于保护WWW的通讯安全。

1994年,SSL2标准发布,缺点较多。

1995年,SSL3标准发布,相比SSL2,SSL3完全重新设计,一直沿用至今。

1999年,TLS 1.0问世。SSL更名为TLS。

2006年,TLS 1.1发布,仅仅修复了一些关键的安全问题.

2008年,TLS 1.2发布。添加了对已验证加密的支持,并且基本上删除了协议说明中所有硬编码的安全基元,使协议完全弹性化。

2.3交互流程

HTTPS在HTTP基础上增加了数字签名和非对称加解密功能,其交互图如下(来自网上):

文章图片6

2.2 报文协议

HTTP报文包括请求报文和响应报文两大部分,其中请求报文由请求行(request line)、请求头(header)、空行和请求体四个部分组成。而响应报文由状态行、响应头部、空行和响应体四个部分组成。下图是一个具体HTTP报文例子:

文章图片7

3.HTTP请求类型

文章图片8

4.HTTP状态码

4.1 分类

文章图片9

4.2 详细清单

代码

消息

描述

100

Continue

只有请求的一部分已经被服务器接收,但只要它没有被拒绝,客户端应继续该请求。

101

Switching Protocols

服务器切换协议。

200

OK

请求成功。

201

Created

该请求是完整的,并创建一个新的资源。

202

Accepted

该请求被接受处理,但是该处理是不完整的。

203

Non-authoritative Information

请求已经成功被响应,与200 (OK)相比,经过了拥有转换功能的 proxy (代理服务器)的修改。

204

No Content

请求已经成功,客户端客户不需要离开当前页面。默认情况下 204 响应是可缓存的。一个 ETag 标头包含在此类响应中。

使用惯例是,在 PUT 请求中进行资源更新,但是不需要改变当前展示给用户的页面,那么返回 204。如果创建了资源,则返回 201 。如果应将页面更改为新更新的页面,则应改用 200 。

205

Reset Content

通知客户端重置文档视图,比如清空表单内容、重置 canvas 状态或者刷新用户界面

206

Partial Content

请求已成功,并且主体包含所请求的数据区间,该数据区间是在请求的 Range 首部指定的。

如果只包含一个数据区间,那么整个响应的 Content-Type 首部的值为所请求的文件的类型,同时包含 Content-Range 首部。

如果包含多个数据区间,那么整个响应的 Content-Type 首部的值为 multipart/byteranges ,其中一个片段对应一个数据区间,并提供 Content-Range和 Content-Type 描述信息。

300

Multiple Choices

链接列表。用户可以选择一个链接,进入到该位置。最多五个地址。

301

Moved Permanently

所请求的页面已经转移到一个新的 URL。

302

Found

所请求的页面已经临时转移到一个新的 URL。

303

See Other

所请求的页面可以在另一个不同的 URL 下被找到。

304

Not Modified

无需再次传输请求的内容,也就是说可以使用缓存的内容。这通常是在一些安全的方法(safe),例如GET 或HEAD 或在请求中附带了头部信息: If-None-Match 或If-Modified-Since。

305

Use Proxy

被请求的资源必须通过指定的代理才能被访问。Location域中将给出指定的代理所在的URI信息,接收者需要重复发送一个单独的请求,通过这个代理才能访问相应资源。只有原始服务器才能建立305响应。

RFC2068中没有明确305响应,这为了重定向一个单独的请求,而且只能被原始服务器建立,否则可能导致严重的安全后果。

306

Unused

在以前的版本中使用该代码。现在已不再使用它,但代码仍被保留。

307

Temporary Redirect

所请求的页面已经临时转移到一个新的 URL。

308

Temporary Redirect

重定向的响应状态码,说明请求的资源已经被永久的移动到了由 Location 首部指定的 URL 上。浏览器会进行重定向,同时搜索引擎也会更新其链接(SEO :链接汁被传递到了新的 URL)。

在重定向过程中,请求方法和消息主体不会发生改变,然而在返回 301 的情况下,请求方法有时候会被客户端错误地修改为 GET 方法。

400

Bad Request

服务器不理解请求。

401

Unauthorized

所请求的页面需要用户名和密码。

402

Payment Required

您还不能使用该代码。

403

Forbidden

禁止访问所请求的页面。

404

Not Found

服务器无法找到所请求的页面。.

405

Method Not Allowed

在请求中指定的方法是不允许的。

406

Not Acceptable

服务器只生成一个不被客户端接受的响应。

407

Proxy Authentication Required

在请求送达之前,您必须使用代理服务器的验证。

408

Request Timeout

请求需要的时间比服务器能够等待的时间长,超时。

409

Conflict

请求因为冲突无法完成。

410

Gone

所请求的页面不再可用。

411

Length Required

'Content-Length' 未定义。服务器无法处理客户端发送的不带 Content-Length 的请求信息。

412

Precondition Failed

请求中给出的先决条件被服务器评估为 false。

413

Request Entity Too Large

服务器不接受该请求,因为请求实体过大。

414

Request-url Too Long

服务器不接受该请求,因为 URL 太长。当您转换一个 'post' 请求为一个带有长的查询信息的 'get' 请求时发生。

415

Unsupported Media Type

服务器不接受该请求,因为媒体类型不被支持。

416

Range Not Satisfiable

服务器无法处理所请求的数据区间。最常见的情况是所请求的数据区间不在文件范围之内,也就是说,Range 首部的值,虽然从语法上来说是没问题的,但是从语义上来说却没有意义。

416 响应报文包含一个 Content-Range 首部,提示无法满足的数据区间(用星号*表示),后面紧跟着一个“/”,再后面是当前资源的长度。例如:Content-Range: */12777

遇到这一错误状态码时,浏览器一般有两种策略:要么终止操作(例如,一项中断的下载操作被认为是不可恢复的),要么再次请求整个文件。

417

Expectation Failed

客户端错误,意味着服务器无法满足 Expect 请求消息头中的期望条件。

418

I'm a teapot

服务器拒绝冲泡咖啡,因为它是个茶壶。

该错误是超文本咖啡壶控制协议的参考,和 1998 年愚人节的玩笑。

422

Unprocessable Entity

服务器理解请求实体的内容类型,并且请求实体的语法是正确的,但是服务器无法处理所包含的指令。

425

Too Early

服务器不愿意冒风险来处理该请求,原因是处理该请求可能会被“重放”,从而造成潜在的重放攻击。

426

Upgrade Required

服务器拒绝处理客户端使用当前协议发送的请求,但是可以接受其使用升级后的协议发送的请求。

服务器会在响应中使用 Upgrade 首部来指定要求的协议。

428

Precondition Required

表示服务器端要求发送条件请求。

一般的,这种情况意味着必要的条件首部——如 If-Match ——的缺失。.

当一个条件首部的值不能匹配服务器端的状态的时候,应答的状态码应该是 412Precondition Failed,前置条件验证失败。

429

Too Many Requests

表示在一定的时间内用户发送了太多的请求,即超出了“频次限制”。

在响应中,可以提供一个 Retry-After 首部来提示用户需要等待多长时间之后再发送新的请求。

431

Request Header Fields Too Large

表示由于请求中的首部字段的值过大,服务器拒绝接受客户端的请求。客户端可以在缩减首部字段的体积后再次发送请求。

该响应码可以用于首部总体体积过大的情况,也可以用于单个首部体积过大的情况。

这种错误不应该出现于经过良好测试的投入使用的系统当中,而是更多出现于测试新系统的时候

451

Unavailable For Legal Reasons

(因法律原因不可用)服务器由于法律原因,无法提供客户端请求的资源,例如可能会导致法律诉讼的页面。

500

Internal Server Error

未完成的请求。服务器遇到了一个意外的情况。

501

Not Implemented

未完成的请求。服务器不支持所需的功能。

502

Bad Gateway

未完成的请求。服务器从上游服务器收到无效响应。

503

Service Unavailable

未完成的请求。服务器暂时超载或死机。

504

Gateway Timeout

网关超时。

505

HTTP Version Not Supported

服务器不支持'HTTP协议'版本。

506

Variant Also Negotiates

内部服务器配置错误,其中所选变量/变元自身被配置为参与内容协商,因此并不是合适的协商端点

507

Insufficient Storage

服务器不能存储相关内容

508

Loop Detected

服务器中断一个操作,因为它在处理具有“Depth: infinity”的请求时遇到了一个无限循环

509

Not Extended

在HTTP扩展框架协议中 ,一个客户端可以发送一个包含扩展声明的请求,该声明描述了要使用的扩展。如果服务器接收到这样的请求,但是请求不支持任何所描述的扩展,那么服务器将使用510状态码进行响应。

5.首部字段

HTTP/1.1种规定了47种首部字段:

5.1通用首部字段

文章图片10

5.2请求首部字段

文章图片11

5.3响应首部字段

文章图片12

5.4实体首部字段

文章图片13

5.5其他首部字段

Cookie、Set-Cookie、Content-Disposition、Connection、Keep-Alive、Proxy-Authenticate、Proxy-Authorization、Trailer、TE、Transfer-Encoding、Upgrade etc...

6.参考资料

(1)HTTP

https://wiki.developer.mozilla.org/zh-CN/docs/Web/HTTP

(2)rfc2616-http1.1协议英文版.pdf

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多