HTTP实用指南|青训营笔记

116 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第7天

初始HTTP

什么是HTTP

  • 超文本传输协议(Hyper Text Transfer Protocol)
  • 应用层协议,基于TCP协议
  • 请求响应
  • 简单可扩展
  • 无状态

协议分析

image.png

协议分析-报文

HTTP/1.1

  • request

    起始行:method 目标地址 协议版本

    请求行

    请求体

  • response

    响应行:协议版本 状态码

    响应头

    响应体

method:

image-20220803235020932.png 状态码:

image-20220803235342592.png 常用请求头

image-20220804000441799.png RESTful API

Restful API.png 常用响应头 image-20220804000718815.png 缓存

image-20220804000911828.png 缓存请求路径

image-20220804001450747.png cookie

image-20220804001731012.png

发展:HTTP2

  • 概述:更快、更稳定、更简单
  • 最小单位:帧(frame) ——HTTP/2通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧四朴树的数据流
  • 二进制
  • 消息:与逻辑请求或响应消息对应的完整的一系列帧
  • 数据流:已建立的连接内的双向字节流,可以承载一条或多条消息
  • 交错发送,接收方重组织

image-20220804002403306.png

  • HTTP/2连接都是永久的,而且仅需要每个来源一个连接
  • 流控制:阻止发送方向接收方发送大量数据的机制
  • 服务器推送

发展:HTTPS概述

  • HTTPS:Hypertext Transfer Protocol Secure

  • 经过TSL/SSL加密

  • 对称加密:加密和解密都是使用同一个密钥

  • 非对称加密:加密和解密需要使用两个不同的密钥

    • 公钥(public key)
    • 私钥(private key)

image-20220804003319805.png

  • HTTP与HTTPS的区别

    • HTTP:HTTP,TCP,IP
    • HTTPS:HTTP,SSL or TLS ,TCP,IP

HTTP 特点

HTTP 的特点概括如下:

  1. 灵活可扩展,主要体现在两个方面。一个是语义上的自由,只规定了基本格式,比如空格分隔单词,换行分隔字段,其他的各个部分都没有严格的语法限制。另一个是传输形式的多样性,不仅仅可以传输文本,还能传输图片、视频等任意数据,非常方便。
  2. 可靠传输。HTTP 基于 TCP/IP,因此把这一特性继承了下来。这属于 TCP 的特性,不具体介绍了。
  3. 请求-应答。也就是一发一收有来有回, 当然这个请求方和应答方不单单指客户端和服务器之间,如果某台服务器作为代理来连接后端的服务端,那么这台服务器也会扮演请求方的角色。
  4. 无状态。这里的状态是指通信过程的上下文信息,而每次 http 请求都是独立、无关的,默认不需要保留状态信息。

HTTP 缺点

无状态

所谓的优点和缺点还是要分场景来看的,对于 HTTP 而言,最具争议的地方在于它的无状态

在需要长连接的场景中,需要保存大量的上下文信息,以免传输大量重复的信息,那么这时候无状态就是 http 的缺点了。

但与此同时,另外一些应用仅仅只是为了获取一些数据,不需要保存连接上下文信息,无状态反而减少了网络开销,成为了 http 的优点。

明文传输

即协议里的报文(主要指的是头部)不使用二进制数据,而是文本形式。

这当然对于调试提供了便利,但同时也让 HTTP 的报文信息暴露给了外界,给攻击者也提供了便利。WIFI陷阱就是利用 HTTP 明文传输的缺点,诱导你连上热点,然后疯狂抓你所有的流量,从而拿到你的敏感信息。

队头阻塞问题

当 http 开启长连接时,共用一个 TCP 连接,同一时刻只能处理一个请求,那么当前请求耗时过长的情况下,其它的请求只能处于阻塞状态,也就是著名的队头阻塞问题。接下来会有一小节讨论这个问题。