> ### 一次完整的Http请求过程
* 域名解析
* 本地缓存,包括浏览器缓存,hosts文件,操作系统自身的DNS缓存
* DNS服务器
* 返回ip
* 发起`TCP`的3次握手,建立连接
* 建立TCP连接后发起http请求
* http
* https,SSL协议,验证安全性
* 服务端响应
* 网关nginx通过url路径,路由到对应的后台服务器
* 后台服务器把请求信息包装成servlet等数据结构,交给业务代码进行处理
* 返回结果
* 前端解析
* json
* html
* TCP断开连接,四次挥手
<br/>
> ### `Http`连接
* 三次握手,三次握手的目的为了确认双方都有收发数据的能力。
```
第一次: A->B,证明A有发消息的能力。
第二次: ->B && B->A,证明B有收消息,并且有发消息的能力。
第三次: A->B,证明A有收消息的能力。
```
* 四次挥手
```
第一次: A -> B A告诉B,A要断开连接了
第二次: B -> A B告诉A,我知道你要断开了
第三次: B -> A B告诉A,好了把最后一点数据发给你,我也不说了
第四次: A -> B A告诉B,知道了
```
<br/>
> ### `HTTP`, `HTTP1.1`,`HTTP2.0`
* `http1.1`相比`http1.0`
* 引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match
* 带宽优化,新增range字段,发送内容的一部分,断点续传功能
* 支持长连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启`Connection:keep-alive`
* 新增了`host`域
* `http2.0`相比于`http1.x`
* 新的二进制格式,HTTP1.x的解析是基于文本。HTTP2.0的协议解析决定采用二进制格式。
* `http2.0`多路复用,多个请求在一个tcp连接上并行执行,`http1.1`的长连接则是多个请求在一个tcp连接上串行执行
* 支持首部压缩
* 服务器推送,服务器可以对一个客户端请求发送多个响应。换句话说,除了对最初请求的响应外,服务器还可以额外向客户端推送资源,而无需客户端明确地请求。
- asD
- Java
- Java基础
- Java编译器
- 反射
- collection
- IO
- JDK
- HashMap
- ConcurrentHashMap
- LinkedHashMap
- TreeMap
- 阻塞队列
- java语法
- String.format()
- JVM
- JVM内存、对象、类
- JVM GC
- JVM监控
- 多线程
- 基础概念
- volatile
- synchronized
- wait_notify
- join
- lock
- ThreadLocal
- AQS
- 线程池
- Spring
- IOC
- 特性介绍
- getBean()
- creatBean()
- createBeanInstance()
- populateBean()
- AOP
- 基本概念
- Spring处理请求的过程
- 注解
- 微服务
- 服务注册与发现
- etcd
- zk
- 大数据
- Java_spark
- 基础知识
- Thrift
- hdfs
- 计算机网络
- OSI七层模型
- HTTP
- SSL
- 数据库
- Redis
- mysql
- mybatis
- sql
- 容器
- docker
- k8s
- nginx
- tomcat
- 数据结构/算法
- 排序算法
- 快排
- 插入排序
- 归并排序
- 堆排序
- 计算时间复杂度
- leetcode
- LRU缓存
- B/B+ 树
- 跳跃表
- 设计模式
- 单例模式
- 装饰者模式
- 工厂模式
- 运维
- git
- 前端
- thymeleaf
- 其他
- 代码规范
- work_project
- Interview