《图解HTTP阅读笔记》第二章 简单的HTTP协议

101 阅读4分钟

本系列笔记为笔者自己阅读时随意记录,不保证准确性,如有错误请在评论区指出。希望能把笔记尽量总结成可以直接背诵的八股~另外,笔者非科班且秋招进行时,书的内容较多,所以只记录也许对秋招有用的知识,过深的知识点以后再补齐!

第二章 简单的HTTP协议

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

客户端:请求资源

服务端:提供资源响应

通过请求和响应的交换达成通信

请求报文构成:1+2+3

  1. 请求方法(Methods)+请求URI+协议版本
  2. 可选的请求首部字段(Content-Type之类的)
  3. 内容实体

响应报文构成:1+2+3

  1. 协议版本+状态码+解释状态码的原因短语
  2. 可选的响应首部字段(首行会显示创建响应的日期时间)
  3. 资源实体的主体

HTTP是不保存状态的协议

HTTP是一种无状态协议,协议对于发送过的请求或响应都不做持久化处理。但是有一些状态在实际使用中是需要保存的,比如购物网站用户的登陆状态。为实现期望的状态保存功能,引入了Cookie技术。

请求URI定位资源

HTTP协议使用URI定位互联网上的资源,正是因为URI的特定功能,在互联网上任意位置的资源都能访问到。

HTTP/1.1中可用的方法

GET:获取资源

GET方法用来请求访问已被URI识别的资源。指定的资源经服务器解析后返回响应内容。

POST:传输实体主体

虽然GET方法也可以传输实体的主体,但一般不用GET方法进行传输,而是用POST方法。

PUT:传输文件

PUT方法传输文件,就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI的指定位置。

但是,鉴于HTTP/1.1的PUT方法自身不带验证机制,任何用户都可以上传文件,存在安全性问题,因此一般的Web网站不使用该方法。若架构设计使用REST标准的同类Web网站,就可能会开放使用PUT方法。

HEAD:获得报文首部

HEAD方法和GET方法一样,只是不返回报文主体部分,只返回首部。用于确认URI的有效性及资源更新的日期时间等。

DELETE:删除文件

DELETE方法按请求URI删除指定的资源,和PUT是反过来的方法。DELETE在http/1.1中同样没有验证机制,所以一般的Web网站也不使用DELETE方法。

OPTIONS:询问支持的方法

OPTIONS可以用来查询请求URI指定的资源支持的方法。

响应实体举例: Allow: GET,POST,HEAD,OPTIONS

TRACE:追踪路径

TRACE方法可以让Web服务器把之前的请求通信环回给客户端。发送请求时,在首部Max-Forwards首部字段填入数值,可以设置往前查询的环数,每往前查一次这个数值就减1,到等于0时就停止继续传输,返回状态码200 OK的响应。 但是TRACE本来就不怎么用,还会引发XST(跨站资源追踪)攻击,就更用不到了。

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

CONNECT方法要求与代理服务器通信时建立隧道,实现用隧道协议实现TCP通信。

持久连接节省通信量

持久连接

HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。为了解决这种频繁连接断开TCP连接导致的通信流量消耗问题,HTTP/1.1和一部分HTTP/1.0想出了持久连接(HTTP keep-alive)的方法。持久连接的特点是,只要任意一端没有明确提出断开连接,TCP连接就一直保持。

持久连接的优点在于减少了TCP重复建立和断开所造成的额外开销,减少了服务器的负载。 在HTTP/1.1中,所有的连接默认都是持久连接。在HTTP/1.0中并未标准化。

管线化

持久连接使得多数请求以管线化(pipelining)发送成为可能。从前发送请求后等待接收到响应才能发送下一个请求。管线化技术出现后,不用等响应即可直接发送下一个请求。这样就能同时并行发送多个请求。

使用Cookie的状态管理

HTTP是无状态协议,通过引入Cookie技术,在请求和响应报文中写入Cookie信息来控制客户端的状态。客户端根据响应报文首部中的Set-cookie字段保存Cookie信息.当下次客户端再向服务端发送请求时会携带Cookie。