HTTP学习|青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第9天。今天的课程围绕HTTP进行学习。
什么是HTTP
Hyper Text Transfer Protocol(HTTP),他是应用层协议,基于Tcp协议。
当我们访问一个页面时浏览器会执行以下步骤:
- 解析域名
- 查找当前浏览器是否存在缓存, 并比较缓存是否过期
- 再查看电脑硬盘里的host文件(windows: C:\Windows\System32\drivers\etc), 有没有记录这个域名和IP的映射关系
- 如果都没有, 则DNS(通过DNS服务商的服务器查询)解析URL对应的IP
- 建立TCP连接(三次握手)
- 发送请求, 分析 url, 设置请求报文(头, 主体)
- 服务器返回请求的文件 (html)
- 浏览器渲染
- HTML parser --> DOM Tree
- CSS parser --> Style Tree
- attachment --> Render Tree
- layout: 布局
- GPU painting: 像素绘制页面
协议分析
发展历程如下图:
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 版本
请求方式
缓存机制
-
浏览器第一次加载资源,服务器返回 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;
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的原理,以及一些使用方法。