超文本传输协议:HTTP

366 阅读2分钟

前言

超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在 TCP 之上,因为不会存储用户信息,所以是一种无状态协议。

报文格式

  • 起始行:描述请求或响应的基本信息
  • 头部字段集合:使用 key-value 的形式更详细地说明报文
  • 空行
  • 消息正文:实际传输的数据

请求报文起始行

image.png

  • 请求方法:如 GET/POST 等,表示对资源的操作
  • 请求目标:通常是一个 url ,标记了请求方法要操作的资源
  • 版本号:表示报文使用的 HTTP 协议版本

响应报文起始行

image.png

  • 版本号:表示报文使用的 HTTP 协议版本
  • 状态码:由三个十进制数字组成,第一个十进制数字定义了状态码的类型。响应分为五类:信息响应(100–199),成功响应(200–299),重定向(300–399),客户端错误(400–499)和服务器错误 (500–599)
  • 原因:状态码的补充说明

一个 HTTP 请求的发出

  1. 浏览器拿到 url
  2. 解析 IP 地址
    • 从 url 中解析出域名并以此检查缓存中有没有对应域名的 IP
    • 如果有访问过,则浏览器会缓存对应的域名和 IP 信息
    • 如果没有访问过,或很久以前访问过,检查时间已经超时了,就会查找本机的域名解析文件(/etc/hosts)
    • 如果仍未获取成功,则会发起 DNS 请求获取 IP
  3. 网络请求
    1. TCP 三次握手
    2. 浏览器发起 HTTP 请求
    3. 服务器响应 HTTP
    4. 浏览器解析响应报文
    5. TCP 四次挥手

HTTPS

由于 HTTP 天生明文不安全,所以需要对其进行加密,故产生了 HTTPS

使用 HTTPS ,则所有的 HTTP 请求和响应在发送到网络之前,都要进行加密