【图解HTTP读书笔记】第二章:简单的HTTP协议


本章针对HTTP协议结构进行讲解,主要使用HTTP/1.1版本。

2.1 HTTP协议用于客户端和服务器端之间的通信

在这里插入图片描述
HTTP协议能够明确区分那端是客户端,那端是服务器端。

2.2 通过请求和响应的交换达成协议

在这里插入图片描述
换句话说,肯定是先从客户端开始建立通信的,服务器端在没有接收到请求是不会发送响应的。
示例:
在这里插入图片描述
下面是从客户端发给某个HTTP服务器端的请求报文内容:

GET /index.htm HTTP//1.1
Host: hackr.jp
  • GET :表示请求访问服务器的类型(称为方法)
  • 字符串/index.htm :指明了请求访问的资源对象(也叫请求URI)
  • HTTP1.1 :HTTP版本号

请求报文:

在这里插入图片描述
请求首部字段,内容实体后边再说。然后在来看服务器响应:
在这里插入图片描述

  • HTTP1.1 :HTTP版本号
  • 200 OK :状态码和原因短语
  • Data:创建时间
  • 空行之后是实体Body

响应报文:
在这里插入图片描述

2.3 HTTP是不保存状态的协议(无状态协议)

HTTP协议自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理。
在这里插入图片描述

  • 这样做是为了更快的处理大量事务,确保协议的可伸缩性。
  • 但是有些需要保存用户的状态。为了实现保持状态功能引入了Cookie技术。

2.4 请求 URI 定位资源

在这里插入图片描述
当客户端请求访问资源而发送请求时,URI 需要将作为请求报文中的请求 URI 包含在内。

在这里插入图片描述
如果不是访问特定资源而是对服务器本身发起请求,可以用一个 * 来代替请求 URI 。下边是查询 HTTP 服务器支持的HTTP 方法种类的例子。

OPTIONS * HTTP/1.1

2.5 告知服务器意图的HTTP方法

下面,我们介绍HTTP/1.1中可使用的方法:

GET :获取资源

GET 方法用来请求访问已被 URI 识别的资源。指定的资源经服务器端解析后返回响应内容。也就是说,如果请求的资源是文本,那就保持原样返回;如果是像CGI 那样的程序,则返回经过执行后的输出结果。
在这里插入图片描述

POST :传输实体主体

虽然用GET方法也可以传输实体主体,但是一般不用GET方法进行传输,而不是用POST方法。
在这里插入图片描述
在这里插入图片描述
GET 和 POST 的区别(面试)
很多资料写的是GET 一般把数据放到 url 中,POST 一般把数据放到body 中。其实也不是很科学的,理论上完全可以把 POST 数据放在url 中,把 GET 的数据放在body 中。

  • 1、GET 用于从服务器获取资源,POST用于给服务器提交数据(现在很少严格遵守这样的设计初衷,两者都可以用来获取资源或者来提交数据)
  • 2、GET 传输的数据量上限较小(URL长度有限),POST传输数据的数据量较大(在20 年前这句话说法是对的,之前的 url
    最长也就是1k-2k ,但是现在的url 可能会很长,长到甚至可能有几 M )
  • 3、POST 比 GET 更加安全(POST 的安全其实是掩耳盗铃,只是把密码啥的放在body 中,这个密码只是不在 url
    地址栏中,这样懂编程的人随便抓个包就可以看到)

PUT:传输文件

PUT方法用来传输文件。就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。
但是,HTTP/1.1 的PUT 方法自身不带验证机制,任何人都可以上传文件,存在安全问题,因此一般的Web 网站不使用该方法。若配合Web 应用程序的验证机制,或架构设计采用REST标准的同类Web网站,就可能开放使用 PUT 方法。
在这里插入图片描述

HEAD :获取报文首部

HEAD 和 GET 方法一样,只是不反回报文主体部分。用于确认 URI 的有效性及资源更新的日期时间等。
在这里插入图片描述

DELETE :删除文件

与 PUT 方法相反。同样不带安全机制,一般也不使用。
在这里插入图片描述
在这里插入图片描述

OPTIONS :询问支持的方法

在这里插入图片描述

TRACE:追踪路径

容易引发XST攻击,通常不使用。
在这里插入图片描述

CONNECT :要求用隧道协议连接代理

该方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(安全套接层)和 TLS (传输层安全)协议把通信内容加密后经过网络隧道传输。

CONNECT 代理服务器名:端口号 HTTP版本

在这里插入图片描述

2.6 使用方法下达命令

向请求 URI 指定的资源发送请求报文时,采用称为方法的命令。

在这里插入图片描述
在这里插入图片描述

2.7 持久连接节省通信量

HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。
在这里插入图片描述
当浏览包含多张图片的HTML页面时,每次请求会造成无谓的TCP连接建立和断开,增加通信量的开销.
在这里插入图片描述

2.7.1 持久连接

持久连接就是为了解决上述问题。特点是:只要任意一端没有明确提出断开连接,则保持TCP连接状态。
在这里插入图片描述

  • 减少了TCP连接的重复建立和断开造成的额外开销
  • 1.1 中默认都是持久连接

2.7.2 管线化

持久连接使得多数请求以管线化方式发送成为可能。也就是可以同时发送多个请求,而不需要一个接一个的等待响应。
在这里插入图片描述

2.8 使用Cookie 的状态管理

之前说过,HTTP是无状态协议,不保留之前的状态信息,不是特别方便就引入Cookie。当然无状态协议也有他的优点,就是可以减少服务器的CPU及内存资源的消耗。
在这里插入图片描述
Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。
在这里插入图片描述
更多相关的介绍见:深入理解HTTP协议

在这里插入图片描述
参考文献:<图解HTTP>

猜你喜欢

转载自blog.csdn.net/weixin_45532227/article/details/112741838
今日推荐