HTTP学习|青训营笔记

79 阅读5分钟

HTTP学习|青训营笔记

这是我参与「第四届青训营 」笔记创作活动的的第9天。今天的课程围绕HTTP进行学习。

什么是HTTP

Hyper Text Transfer Protocol(HTTP),他是应用层协议,基于Tcp协议。

image.png 当我们访问一个页面时浏览器会执行以下步骤:

  1. 解析域名
    1. 查找当前浏览器是否存在缓存, 并比较缓存是否过期
    2. 再查看电脑硬盘里的host文件(windows: C:\Windows\System32\drivers\etc), 有没有记录这个域名和IP的映射关系
    3. 如果都没有, 则DNS(通过DNS服务商的服务器查询)解析URL对应的IP
  2. 建立TCP连接(三次握手)
  3. 发送请求, 分析 url, 设置请求报文(头, 主体)
  4. 服务器返回请求的文件 (html)
  5. 浏览器渲染
    1. HTML parser --> DOM Tree
    2. CSS parser --> Style Tree
    3. attachment --> Render Tree
    4. layout: 布局
    5. GPU painting: 像素绘制页面

协议分析

发展历程如下图:

截屏2022-08-02 下午8.32.51.png

HTTP/0.9:

  • 请求GET/mypage.htm
  • 响应只有HTML文档

HTTP/1.0:

  • 新增了Header
  • 有了状态码
  • 支持多种文档类型

HTTP/1.1:

  • 链接复用
  • 缓存
  • 内容协商

HTTP/2

  • 二进制协议
  • 服务器推送

状态码

  • 1XX: 接受, 继续处理
  • 2XX:
    • 200 OK 成功, 并返回数据
    • 201 Created 已创建
    • 202 Accepted 已接受
    • 203 成功, 但未授权
    • 204 No content 成功, 无内容
    • 205 成功, 重置内容
    • 206 Partial Content 成功, 部分内容
  • 3XX: 重定向
    • 301 Moved Permanently 永久重定向(浏览器会记住)
    • 302 Move temporarily 临时重定向(用于服务器的负载均衡),浏览器不记忆, 一般图片的请求经常出现302, 很多公司都有单独的图片服务器(1.0版本临时重定向)
    • 303 See Other 应使用GET方法获取资源, 会把POST方法变为GET进行重定向(1.1版本从302细分出来的)
    • 304 Not Modified 资源未修改, 可使用缓存
    • 305 需代理访问
    • 307 Move temporarily 新的HTTP版本的临时重定向, 和303相同, 但不会把POST变为GET
  • 4XX: 客户端错误
    • 400 Bad Request 请求语法错误
    • 401 Unauthorized 无权限访问
    • 403 Forbidden 拒绝请求
    • 404 NOT FOUND 资源不存在
    • 408 Request Timeout 客户端请求超时
    • 409 Confict 请求的资源可能引起冲突
  • 5XX: 服务器端错误
    • 500 Internal Server Error 服务器错误
    • 501 Not Implemented 请求超出服务器能力范围, 例如服务器不支持当前请求所需要的某个功能,或者请求是服务器不支持的某个方法
    • 503 Service Unavailable 服务器超负载
    • 505 http version not supported 服务器不支持, 或者拒绝支持在请求中使用的 HTTP 版本

请求方式

image.png

缓存机制

  • 浏览器第一次加载资源,服务器返回 200,浏览器从服务器下载资源文件,并缓存资源文件与 response header,以供下次加载时对比使用;

  • 下一次加载资源时,由于强制缓存优先级较高,先比较当前时间与上一次返回 200 时的时间差,如果没有超过 cache-control 设置的 max-age,则没有过期,并命中强缓存,直接从本地读取资源。如果浏览器不支持HTTP1.1,则使用 expires 头判断是否过期;

  • 如果资源已过期,则表明强制缓存没有被命中,则开始协商缓存,向服务器发送带有 If-None-Match 和 If-Modified-Since 的请求;

  • 服务器收到请求后,优先根据 Etag 的值判断被请求的文件有没有做修改,Etag 值一致则没有修改,命中协商缓存,返回 304;如果不一致则有改动,直接返回新的资源文件带上新的 Etag 值并返回 200;

  • 如果服务器收到的请求没有 Etag 值,则将 If-Modified-Since 和被请求文件的最后修改时间做比对,一致则命中协商缓存,返回 304;不一致则返回新的 last-modified 和文件并返回 200;

image.png

HTTPS

HTTPS其实就是将HTTP的数据包再通过SSL/TLS加密后传输,SSL(Secure Sockets Layer)安全套接层和TLS(Transport Layer Security)传输层安全协议其实是一套东西。

网景公司在1994年提出HTTPS协议时,使用的是SSL进行加密。后来IETF(Internet Engineering Task Force)互联网工程任务组将SSL进一步标准化,于1999年公布第一版TLS协议文件TLS 1.0。

与HTTP的区别:

  • HTTPS 需要 CA 证书,费用较高
  • HTTP 是超文本传输协议,信息是明文传输;HTTPS 是具有安全性的 SSL 加密传输协议
  • HTTP 的默认端口是80,HTTPS 的默认端口是443
  • HTTP 的链接很简单,是无状态的;HTTPS协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。

个人总结

今天学习了HTTP,老师在后面还有应用场景以及实战演示,通过这次课程我理解了HTTP的原理,以及一些使用方法。