> ### 一次完整的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