图解HTTP
URL和URI
HTTP请求报文格式
- 请求报文:请求方法、请求URI、协议版本、可选请求首部字段、[空行]、内容实体
- 请求报文示例
HTTP响应报文
- 响应报文:协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段、[空行]、实体主体
- 响应报文示例
HTTP状态介绍
- HTTP是一种不保存状态,即无状态协议。使用HTTP协议,每当有新的请求发送时,就会有新的响应产生。写一本书并不保留之前一切的请求或响应报文的消息。这是为了更快的处理大量事务,确保协议的可升缩性
- HTTP虽然是无状态协议,但是为了实现保持状态的功能(如用户在不同的网页之间跳转时,维持登录状态),引入了Cookie技术
- Cookie计数通过在请求和响应的报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的请求连接,然后对比服务器上的记录,最后得到之前的状态信息。
URI和URL介绍
- URI可以是绝对的,也可以是相对的,而URL是一种绝对的URI
- URI示例
HTTP中可以使用的方法
- GET:资源获取
- GET方法用来请求访问已被URI标识的资源。指定的资源经服务器端解析后返回响应内容
- 示例:
- POST:传输实体主体
- 虽然用GET方法也可以传输实体的主题,但一般不用GET方法进行传输,而是用POST方法。虽说POST的功能与GET相类似,但POST的主要目的并不是获取响应的主体内容
- 示例:
- PUT:传输文件
- PUT方法用来传输文件。就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置
- 示例
- HEAD:获得报文首部
- 与GET方法一样,只是不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间等
- 示例
- DELETE:删除文件
- DELETE方法用来删除文件,是与PUT相反的方法。DELETE方法按请求URI删除指定的资源
- 示例
- OPTIONS:询问支持的方法
- OPTIONS方法用来查询针对请求的URI指定的资源支持的方式
- 示例
- 总结
持久连接
- HTPP协议的初始版本中,没进行依次HTTP通信就要断开一次TCP连接
- HTTP1.1和部分HTTP1.0使用持久连接,特点是,只要任意一端没有明确提出断开连接,则保持TCP连接诶状态
状态码
- 状态码的职责是当客户端向服务器发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误
- 状态码的类别
HTTPS
- HTTPS的不足
- 通信使用明文(不加密),内容可能会被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性,所有有可能一草篡改
- HTTPS = HTTP+加密+验证+完整性
- HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL(Secure Socket Layer)和TSL(Transport Layer Security)协议代替而已。通常HTTP直接与TCP通信,当使用SSL时,则演变成先和SSL通信,再有SSL和TCP通信。简而言之,所谓HTTPS就是身披SSL协议这层外壳的HTTP
- 共享**:加密和解密用一个密的方式,也叫做对称**加密
- 公开**加密:使用一对非对称的**。一把叫做私有**,另一把叫做公开**。私有**不能让其他任何人知道,而公开蜜月则可以随意发布,任何人都可以获得。使用公开**加密方式,发送密文的一方使用对方的公开**进行加密处理,对方接收到加密信息后,在使用自己的私有**进行解密
- 利用数字证书(CA)防止通信方公开的**被恶意篡改
- 为什么不一直使用HTTP?因为与纯文本通信相比,加密通信会消耗更多CPU和内存资源。如果每次通信都加密,会消耗相当多的资源,平摊到每一台计算机上,能够处理的请求数量必定会随之减少。因此,如果是非敏感的信息则使用HTTP通信,只有在包含个人信息等敏感数据时,才利用HTTPS加密通信。