图解HTTP

URL和URI

HTTP请求报文格式

  1. 请求报文:请求方法、请求URI、协议版本、可选请求首部字段、[空行]、内容实体
  2. 请求报文示例
    图解HTTP

HTTP响应报文

  1. 响应报文:协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段、[空行]、实体主体
  2. 响应报文示例
    图解HTTP

图解HTTP

HTTP状态介绍

  1. HTTP是一种不保存状态,即无状态协议。使用HTTP协议,每当有新的请求发送时,就会有新的响应产生。写一本书并不保留之前一切的请求或响应报文的消息。这是为了更快的处理大量事务,确保协议的可升缩性
  2. HTTP虽然是无状态协议,但是为了实现保持状态的功能(如用户在不同的网页之间跳转时,维持登录状态),引入了Cookie技术
  3. Cookie计数通过在请求和响应的报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的请求连接,然后对比服务器上的记录,最后得到之前的状态信息。
    图解HTTP

图解HTTP

URI和URL介绍

  1. URI可以是绝对的,也可以是相对的,而URL是一种绝对的URI
  2. URI示例
    图解HTTP

HTTP中可以使用的方法

  1. GET:资源获取
    • GET方法用来请求访问已被URI标识的资源。指定的资源经服务器端解析后返回响应内容
    • 示例:
      图解HTTP
  2. POST:传输实体主体
    • 虽然用GET方法也可以传输实体的主题,但一般不用GET方法进行传输,而是用POST方法。虽说POST的功能与GET相类似,但POST的主要目的并不是获取响应的主体内容
    • 示例:
      图解HTTP
  3. PUT:传输文件
    • PUT方法用来传输文件。就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置
    • 示例
      图解HTTP
  4. HEAD:获得报文首部
    • 与GET方法一样,只是不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间等
    • 示例
      图解HTTP
  5. DELETE:删除文件
    • DELETE方法用来删除文件,是与PUT相反的方法。DELETE方法按请求URI删除指定的资源
    • 示例
      图解HTTP
  6. OPTIONS:询问支持的方法
    • OPTIONS方法用来查询针对请求的URI指定的资源支持的方式
    • 示例
      图解HTTP
  7. 总结
    图解HTTP

持久连接

  1. HTPP协议的初始版本中,没进行依次HTTP通信就要断开一次TCP连接
  2. HTTP1.1和部分HTTP1.0使用持久连接,特点是,只要任意一端没有明确提出断开连接,则保持TCP连接诶状态

状态码

  1. 状态码的职责是当客户端向服务器发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误
  2. 状态码的类别
    图解HTTP

HTTPS

  1. HTTPS的不足
    • 通信使用明文(不加密),内容可能会被窃听
    • 不验证通信方的身份,因此有可能遭遇伪装
    • 无法证明报文的完整性,所有有可能一草篡改
  2. HTTPS = HTTP+加密+验证+完整性
  3. HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL(Secure Socket Layer)和TSL(Transport Layer Security)协议代替而已。通常HTTP直接与TCP通信,当使用SSL时,则演变成先和SSL通信,再有SSL和TCP通信。简而言之,所谓HTTPS就是身披SSL协议这层外壳的HTTP
  4. 共享**:加密和解密用一个密的方式,也叫做对称**加密
  5. 公开**加密:使用一对非对称的**。一把叫做私有**,另一把叫做公开**。私有**不能让其他任何人知道,而公开蜜月则可以随意发布,任何人都可以获得。使用公开**加密方式,发送密文的一方使用对方的公开**进行加密处理,对方接收到加密信息后,在使用自己的私有**进行解密
  6. 利用数字证书(CA)防止通信方公开的**被恶意篡改
    图解HTTP
  7. 为什么不一直使用HTTP?因为与纯文本通信相比,加密通信会消耗更多CPU和内存资源。如果每次通信都加密,会消耗相当多的资源,平摊到每一台计算机上,能够处理的请求数量必定会随之减少。因此,如果是非敏感的信息则使用HTTP通信,只有在包含个人信息等敏感数据时,才利用HTTPS加密通信。