手记

HTTP协议详解

1.HTTP介绍

HTTP协议,即超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
HTTP是一个应用层协议,由请求和响应构成,是一个标准的浏览器服务器模型。HTTP是一个无状态的协议。

HTTP协议通常承载于TCP协议之上,有时也承载了TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图所示:


http.jpg

HTTP默认的端口号为80,HTTPS的端口号为443。

浏览网页是HTTP的主要应用,但是这并不代表HTTP就只能应用于网页的浏览。HTTP是一种协议,只要通信的双方都遵守这个协议,HTTP就能有用武之地。比如咱们常用的QQ,迅雷这些软件,都会使用HTTP协议(还包括其他的协议)。


2.HTTP工作流程

一次HTTP操作称为一个事务,其工作过程可分为四步:

(1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
(2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
(3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
(4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。


process.png


3.HTTP报文的语法和组成部分

HTTP报文是简单的格式化数据块。每条报文都包含一条来自客户端的请求,或者一条来自服务器的响应。它们由三个部分组成:对报文进行描述的起始行(start line)、包含属性的首部(header)块,以及可选的、包含数据的主体(body)部分。

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求正文四个部分组成。


request.png


示例:


reqex.png

HTTP响应也由四个部分组成,分别是:状态行、响应头部、空行和响应正文。


response.png


示例:


resex.png


4.响应报文中的状态码

在实际应用中,我们经常根据状态查找网络错误。

返回的状态
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求

XX是00-99范围的数

常见的状态码:

200    OK  请求没问题,实体的主体部分包含了所请求的资源。
300 Multiple Choices    客户端请求一个实际指向多个资源的URL时会返回这个状态码。
301 Moved Permanently   在请求的URL已被移除时使用。永久性重定向
302 Found   临时重定向
303 See Other   告知客户端应该用另一个URL来获取资源。新的URL位于响应报文的Location首部。其主要目的是允许POST请求的响应将客户端定向到某个资源上去。
304 Not Modified    客户端可以通过所包含的请求首部,使其请求变成有条件的。如果客户端发起了一个条件GET请求,而最近资源未被修改的话,就可以用这个状态码来说明资源未被修改。
400 Bad Request 用于告知客户端它发送了一个错误的请求。
401 Unauthorized    与适当的首部一同返回,在这些首部中请求客户端在获取对资源的访问权之前,对自己进行认证。
403 Forbidden   用于说明请求被服务器拒绝了。如果服务器想说明为什么拒绝请求,可以包含实体的主体部分来对原因进行描述。但这个状态码通常是在服务器不想说明拒绝原因的时候使用的。
404 Not Found   用于说明服务器无法找到所请求的URL。通常会包含一个实体,以便客户端应用程序显示给用户看。
405 Method Not Allowed  发起的请求中带有所请求的URL不支持的方法时,使用此状态码。应该在响应中包含Allow首部,以告知客户端对所请求的资源可以使用哪些方法。
500 Internal Server Error   服务器遇到一个妨碍它为请求提供服务的错误时,使用此状态码。
501 Not Implemented 客户端发起的请求超出服务器的能力范围(比如,使用了服务器不支持的请求方法)时,使用此状态码。
502 Bad Gateway 作为代理或网关使用的服务器从请求响应链的下一条链路上收到了一条伪响应(比如,它无法连接到其父网关)时,使用此状态码。
503 Service Unavailable 用来说明服务器现在无法为请求提供服务,但将来可以。如果服务器知道什么时候资源会变为可用的,可以在响应中包含一个Retry-After首部。


5.HTTP首部(头部)字段
  • 通用首部:这些是客户端和服务器都可以使用的通用首部。可以在客户端、服务器和其他应用程序之间提供一些非常有用的通用功能。

  • 请求首部:请求首部是请求报文特有的。它们为服务器提供了一些额外信息,比如客户端希望接收什么类型的数据。

  • 响应首部:响应报文有自己的首部集,以便为客户端提供信息(比如,客户端在与哪种类型的服务器进行交互)。

  • 实体首部:对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。

  • 扩展首部:扩展首部是非标准的首部,由应用程序开发者创建,但还未添加到已批准的 HTTP 规范中去。即使不知道这些扩展首部的含义,HTTP 程序也要接受它们并对其进行转发。

HTTP/1.1规范定义了如下47种首部字段

通用首部字段(9个)

commonHead.png

请求首部字段(19个)

reqHead.png

响应首部字段(9个)

resHead.png

实体首部字段(10个)

entityHead.png

头部字段详细信息https://blog.csdn.net/crystal6918/article/details/54142528


6.HTTP请求方法

HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI指定的资源的不同操作方式:

(1)HEAD- 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否更新。(1.0  1.1)
(2)GET- 向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在web app.中。其中一个原因是GET可能会被网络蜘蛛等随意访问。(1.0  1.1)
(3)POST- 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。(1.0  1.1)
(4)PUT- 向指定资源位置上传其最新内容。(1.0  1.1)
(5)DELETE- 请求服务器删除Request-URI所标识的资源。(1.0  1.1)
(6)OPTIONS- 返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。(1.1)
(7)TRACE- 回显服务器收到的请求,主要用于测试或诊断。(1.1)
(8)CONNECT- HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。(1.1)

(9)PATCH- 用来将局部修改应用于某一资源,添加于规范RFC5789。

方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed);当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。

HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。


7.HTTP协议的主要特点

HTTP协议的主要特点可概括如下:
(1)支持客户/服务器模式。
(2)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
(3)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
(4)无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
(5)无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。


到这里,我们基本梳理清楚了http的大致知识,但是我们还有一下几点没有详细说明。
(1)http协议连接和断开的过程中发生了什么
(2)http缓存
(3)http1.0 1.1 2.0的区别
(4)https到底和http有什么具体的不一样的地方

参考:
HTTP协议详解
HTTP协议详解(超详细)
<HTTP权威指南>读书笔记 ---- HTTP报文
HTTP协议
HTTP首部字段



作者:pattyzzh
链接:https://www.jianshu.com/p/7e401faa8f0e


3人推荐
随时随地看视频
慕课网APP