最近在慕课上买了Jokcy老师的HTTP课程 学习过程中做了一些总结
1.浏览器输入URL后HTTP请求返回的完整过程
Redirect 跳转 ----> App cache 应用缓存 ----> DNS DNS查找 ----> TCP 创建TCP链接 ---->Request 发送请求 ----> Response 接收响应

2-1 网络模型介绍

低三层
物理层主要作用是定义物理设备如何传输数据
数据链路层在通信的实体间建立数据链路连接
网络层为数据在结点之间传输创建逻辑链路
传输层 TCP UDP
向用户提供可靠的端到端(End-to-End)服务,传输层向高层屏蔽了下层数据通信的细节
应用层 HTTP
构建于TCP协议之上 ,屏蔽了网络传输相关细节
2-2 HTTP协议的发展历史
HTTP/0.9 只有一个命令GET 没有HEADER等描述数据的信息 服务器发送完毕 就关闭TCP连接
HTTP/1.0 增加了命令 staus code 和 header
HTTP/1.1 持久连接 增加了host(同一个物理服务器 选择node还是java等软件服务器)和其他一些命令
HTTP/2 完全多路复用的,而非有序并阻塞的 , 所有数据以二进制传输 , 同一个连接里面发送多个请求不再需要按照顺序来 ,头信息压缩以及推送(服务器可以主动向客户端发送资源 如 在服务器端解析HTML文本 不等客户端来解析HTML文件 同步发送CSS JS等资源)等提高效率的功能
2-3 三次握手

通过三次握手规避 网络传输中延迟导致数据丢失的连接空置未关闭的问题
2-4 URI、URL 、URN
Uniform Resource Identifier/统一资源标志符
Uniform Resource Locator/统一资源定位器
http://user:pass@host.com:80/path?query = string#hash
协议 用户信息验证 IP地址 端口号 路由? 参数 #hash
URN 永久统一资源定位符
2-5 HTTP报文格式
首行 URL METHOD STATUS CODE等
HEADER Connection Content-Type等
HTTP方法 用来定义对于资源的操作 GET POST PUT DELETE OPTIONS
HTTP CODE 定义服务器对请求的处理结果
3 HTTP各种特效
3-2 CORS跨域请求的限制与解决
Content-Tpye 设置 浏览器解析的 文件格式 text/html 、 text/plain等
服务器 设置 Access-Control-Allow-Origin:‘*’, 跨域时, 服务器得到请求后是返回了数据 只是浏览器收到的Access-Control-Allow-Origin告诉浏览器跨域了 不需要解析 就将响应结果 拦截掉 并在控制行 报错
浏览器允许 link img script等标签 加载资源 不需要服务器设置允许跨域的头
JSONP 实现原理 在script等标签里加载了一个链接
3-3 CORS跨域限制以及预请求验证
CORS限制
默认允许方法 GET HEAD POST
允许Content-Type text/plain 、multipart/form-data 、 application/x-www-form-urlencoded
其他限制
请求头限制 自定义请求头等
XMLHttpRequestUpload对象均没有注册任何事件监听器
设置允许
Access-Control-Allow-Origin:'*' 允许的URL
Access-Control-Allow-Headers:‘允许的headers’
Access-Control-Max-Age:'1000' 允许的跨域时间
预请求验证 客户端会有一个OPTIONS去验证正式的请求是否允许发送
3-4 缓存头Cache-Control的含义和使用
可缓存性 public 、private 只有发起的客户端才能缓存、 no-cache 只有通过服务器端验证才能使用客户端缓存
到期时间 max-age =<seconds> 、s-maxage=<seconds>代理服务器才会应用 、max-stale=<seconds>
重新验证 must-revalidate 、proxy-revalidate
其他 no-store 不使用缓存 直接重新请求数据 、no-transform
3-5 缓存验证Last-Modified和Etag的使用

Last-Modified 上次修改时间
Etag 资源签名 判断客户端缓存的资源文件与 在服务器端的资源文件 是否相同 如果相同则直接使用客户端缓存资源 如果不同则需要重新请求
3-6 cookie和session
max-age 和 expires设置过期时间
Secure只有HTTPS的时候发送
HttpOnly无法通过document.cookie访问
3-7 HTTP长连接
Connection: keep-alive 长连接 /close 短连接 可以在服务器设置 长连接关闭时间
HTTP请求是基于 TCP连接上 进行发送的 ,一个TCP连接上可以发送多个HTTP请求,HTTP1.1中 HTTP请求在TCP连接上发送有先后顺序 HTTP2.0中 一个TCP连接可以并发多个同域的HTTP请求
3-8 数据协商
Accept:text/html, application/xhtml+xml, application/xml, image/webp , image/apng
客户端希望服务器返回的资源类型,并非强限制
Accept-Encodeing: gzip , defalate ,br 压缩文件的算法
Accept-Language: zh-CN,zh,q=0.9 ,en;q=0.8 接收的语言 和对应的优先级权重
Content-Type text/plain 文件源码 、multipart/form-data 将表单(enctype)提交的数据分为多个部分,文件不能作为字符串传输,要转为二进制进行传输 、 application/x-www-form-urlencoded URL上的CODE
3-8 Redirect
302 临时跳转
301 永久跳转 告知浏览器缓存 当前URL永久跳转到新的URL 不需要服务器告知
3-9 CSP
Content-Security-Policy 内容安全策略
Content-Security-Policy:‘default-src http:https’只能加载http https请求的数据 script外联加载的资源就不允许
Content-Security-Policy:‘default-src \‘self’\’只能加载本站服务器的资源
Content-Security-Policy:‘script-src \‘self’\’只限制Script需要是本站服务器资源
4-1 Nginx安装和基础代理配置
http://nginx.org/en/download.html 下载nginx 压缩包然后解压
git bash 里面 通过 在目录下 ./nginx.exe 运行

在代理过程中 http明文传输的所有东西是不可靠的 可以被代理修改 https可以保证 内容在传输过程中不被修改
4-2 Nginx代理配置和代理缓存的用处
Cache-Control:'max-age=5,s-maxage=20,private' max-age表示本地缓存时间 ,s-maxage表示代理缓存时间 private表示只有本地缓存时间生效 no-store表示都不缓存
Vary:'X-Test-Cache = 0' 验证头信息一致再使用缓存
4-3 HTTPS解析
私钥 只存在服务器上,用于解密字符串
公钥 存在互联网上,所有人都能拿到的加密字符串
私钥、公钥 主要用在握手时进行一个传输

4-4 使用Nginx部署HTTPS服务
开启SSL配置

ssl on

4-5 HTTP2的优势和Nginx配置HTTP2的简单使用
HTTP2 优势
信道复用
数据分帧传输 同一个连接中可以并发发送不同的http请求,并没有先后顺序
Server Push
Nginx开启HTTP2配置

HTTP原理
HTTP技术点
Nginx实践、面向未来的HTTP