auto commit
This commit is contained in:
parent
745314052c
commit
1e5de2f742
|
@ -1,9 +1,9 @@
|
|||
<!-- GFM-TOC -->
|
||||
* [基础概念](#基础概念)
|
||||
* [一 、基础概念](#一-基础概念)
|
||||
* [Web 基础](#web-基础)
|
||||
* [URL](#url)
|
||||
* [请求和响应报文](#请求和响应报文)
|
||||
* [HTTP 方法](#http-方法)
|
||||
* [二、HTTP 方法](#二http-方法)
|
||||
* [GET:获取资源](#get获取资源)
|
||||
* [POST:传输实体主体](#post传输实体主体)
|
||||
* [HEAD:获取报文首部](#head获取报文首部)
|
||||
|
@ -13,17 +13,17 @@
|
|||
* [OPTIONS:查询支持的方法](#options查询支持的方法)
|
||||
* [CONNECT:要求用隧道协议连接代理](#connect要求用隧道协议连接代理)
|
||||
* [TRACE:追踪路径](#trace追踪路径)
|
||||
* [HTTP 状态码](#http-状态码)
|
||||
* [三、HTTP 状态码](#三http-状态码)
|
||||
* [2XX 成功](#2xx-成功)
|
||||
* [3XX 重定向](#3xx-重定向)
|
||||
* [4XX 客户端错误](#4xx-客户端错误)
|
||||
* [5XX 服务器错误](#5xx-服务器错误)
|
||||
* [HTTP 首部](#http-首部)
|
||||
* [四、HTTP 首部](#四http-首部)
|
||||
* [通用首部字段](#通用首部字段)
|
||||
* [请求首部字段](#请求首部字段)
|
||||
* [响应首部字段](#响应首部字段)
|
||||
* [实体首部字段](#实体首部字段)
|
||||
* [具体应用](#具体应用)
|
||||
* [五、具体应用](#五具体应用)
|
||||
* [Cookie](#cookie)
|
||||
* [缓存](#缓存)
|
||||
* [持久连接](#持久连接)
|
||||
|
@ -34,18 +34,18 @@
|
|||
* [内容协商](#内容协商)
|
||||
* [虚拟主机](#虚拟主机)
|
||||
* [通信数据转发](#通信数据转发)
|
||||
* [HTTPs](#https)
|
||||
* [加密](#加密)
|
||||
* [六、HTTPs](#六https)
|
||||
* [七、加密](#七加密)
|
||||
* [认证](#认证)
|
||||
* [完整性](#完整性)
|
||||
* [各版本比较](#各版本比较)
|
||||
* [八、各版本比较](#八各版本比较)
|
||||
* [HTTP/1.0 与 HTTP/1.1 的区别](#http10-与-http11-的区别)
|
||||
* [HTTP/1.1 与 HTTP/2.0 的区别](#http11-与-http20-的区别)
|
||||
* [参考资料](#参考资料)
|
||||
<!-- GFM-TOC -->
|
||||
|
||||
|
||||
# 基础概念
|
||||
# 一 、基础概念
|
||||
|
||||
## Web 基础
|
||||
|
||||
|
@ -65,15 +65,15 @@ URI 包含 URL 和 URN,目前 WEB 只有 URL 比较流行,所以见到的基
|
|||
|
||||
## 请求和响应报文
|
||||
|
||||
**请求报文**
|
||||
### 1. 请求报文
|
||||
|
||||
<div align="center"> <img src="../pics//22b39f77-ac47-4978-91ed-84aaf457644c.jpg"/> </div><br>
|
||||
|
||||
**响应报文**
|
||||
### 2. 响应报文
|
||||
|
||||
<div align="center"> <img src="../pics//00d8d345-cd4a-48af-919e-209d2788eca7.jpg"/> </div><br>
|
||||
|
||||
# HTTP 方法
|
||||
# 二、HTTP 方法
|
||||
|
||||
客户端发送的 **请求报文** 第一行为请求行,包含了方法字段。
|
||||
|
||||
|
@ -164,7 +164,7 @@ CONNECT www.example.com:443 HTTP/1.1
|
|||
|
||||
<div align="center"> <img src="../pics//c8637fd2-3aaa-46c4-b7d9-f24d3fa04781.jpg"/> </div><br>
|
||||
|
||||
# HTTP 状态码
|
||||
# 三、HTTP 状态码
|
||||
|
||||
服务器返回的 **响应报文** 中第一行为状态行,包含了状态码以及原因短语,用来告知客户端请求的结果。
|
||||
|
||||
|
@ -216,7 +216,7 @@ CONNECT www.example.com:443 HTTP/1.1
|
|||
|
||||
- **503 Service Unavilable** :服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
|
||||
|
||||
# HTTP 首部
|
||||
# 四、HTTP 首部
|
||||
|
||||
有 4 种类型的首部字段:通用首部字段、请求首部字段、响应首部字段和实体首部字段。
|
||||
|
||||
|
@ -289,7 +289,7 @@ CONNECT www.example.com:443 HTTP/1.1
|
|||
| Expires | 实体主体过期的日期时间 |
|
||||
| Last-Modified | 资源的最后修改日期时间 |
|
||||
|
||||
# 具体应用
|
||||
# 五、具体应用
|
||||
|
||||
## Cookie
|
||||
|
||||
|
@ -297,7 +297,7 @@ HTTP 协议是无状态的,主要是为了让 HTTP 协议尽可能简单,使
|
|||
|
||||
Cookie 是服务器发送给客户端的数据,该数据会被保存在浏览器中,并且在下一次发送请求时包含该数据。通过 Cookie 可以让服务器知道两个请求是否来自于同一个客户端,从而实现保持登录状态等功能。
|
||||
|
||||
**创建过程**
|
||||
### 1. 创建过程
|
||||
|
||||
服务器发送的响应报文包含 Set-Cookie 字段,客户端得到响应报文后把 Cookie 内容保存到浏览器中。
|
||||
|
||||
|
@ -318,7 +318,7 @@ Host: www.example.org
|
|||
Cookie: yummy_cookie=choco; tasty_cookie=strawberry
|
||||
```
|
||||
|
||||
**Set-Cookie**
|
||||
### 2. Set-Cookie
|
||||
|
||||
| 属性 | 说明 |
|
||||
| -- | -- |
|
||||
|
@ -329,31 +329,31 @@ Cookie: yummy_cookie=choco; tasty_cookie=strawberry
|
|||
| Secure | 仅在 HTTPS 安全通信时才会发送 Cookie |
|
||||
| HttpOnly | 加以限制,使 Cookie 不能被 JavaScript 脚本访问 |
|
||||
|
||||
**Session 和 Cookie 区别**
|
||||
### 3. Session 和 Cookie 区别
|
||||
|
||||
Session 是服务器用来跟踪用户的一种手段,每个 Session 都有一个唯一标识:Session ID。当服务器创建了一个 Session 时,给客户端发送的响应报文就包含了 Set-Cookie 字段,其中有一个名为 sid 的键值对,这个键值对就是 Session ID。客户端收到后就把 Cookie 保存在浏览器中,并且之后发送的请求报文都包含 Session ID。HTTP 就是通过 Session 和 Cookie 这两种方式一起合作来实现跟踪用户状态的,Session 用于服务器端,Cookie 用于客户端。
|
||||
|
||||
**浏览器禁用 Cookie 的情况**
|
||||
### 4. 浏览器禁用 Cookie 的情况
|
||||
|
||||
会使用 URL 重写技术,在 URL 后面加上 sid=xxx 。
|
||||
|
||||
**使用 Cookie 实现用户名和密码的自动填写**
|
||||
### 5. 使用 Cookie 实现用户名和密码的自动填写
|
||||
|
||||
网站脚本会自动从保存在浏览器中的 Cookie 读取用户名和密码,从而实现自动填写。
|
||||
|
||||
## 缓存
|
||||
|
||||
**优点**
|
||||
### 1. 优点
|
||||
|
||||
1. 降低服务器的负担;
|
||||
2. 提高响应速度(缓存资源比服务器上的资源离客户端更近)。
|
||||
|
||||
**实现方法**
|
||||
### 2. 实现方法
|
||||
|
||||
1. 让代理服务器进行缓存;
|
||||
2. 让客户端浏览器进行缓存。
|
||||
|
||||
**Cache-Control 字段**
|
||||
### 3. Cache-Control 字段
|
||||
|
||||
HTTP 通过 Cache-Control 首部字段来控制缓存。
|
||||
|
||||
|
@ -361,19 +361,19 @@ HTTP 通过 Cache-Control 首部字段来控制缓存。
|
|||
Cache-Control: private, max-age=0, no-cache
|
||||
```
|
||||
|
||||
**no-cache 指令**
|
||||
### 4. no-cache 指令
|
||||
|
||||
该指令出现在请求报文的 Cache-Control 字段中,表示缓存服务器需要先向原服务器验证缓存资源是否过期;
|
||||
|
||||
该指令出现在响应报文的 Cache-Control 字段中,表示缓存服务器在进行缓存之前需要先验证缓存资源的有效性。
|
||||
|
||||
**no-store 指令**
|
||||
### 5. no-store 指令
|
||||
|
||||
该指令表示缓存服务器不能对请求或响应的任何一部分进行缓存。
|
||||
|
||||
no-cache 不表示不缓存,而是缓存之前需要先进行验证,no-store 才是不进行缓存。
|
||||
|
||||
**max-age 指令**
|
||||
### 6. max-age 指令
|
||||
|
||||
该指令出现在请求报文的 Cache-Control 字段中,如果缓存资源的缓存时间小于该指令指定的时间,那么就能接受该缓存。
|
||||
|
||||
|
@ -456,7 +456,7 @@ Content-Length: 1024
|
|||
|
||||
## 通信数据转发
|
||||
|
||||
**代理**
|
||||
### 1. 代理
|
||||
|
||||
代理服务器接受客户端的请求,并且转发给其它服务器。
|
||||
|
||||
|
@ -466,19 +466,19 @@ Content-Length: 1024
|
|||
|
||||
<div align="center"> <img src="../pics//c07035c3-a9ba-4508-8e3c-d8ae4c6ee9ee.jpg"/> </div><br>
|
||||
|
||||
**网关**
|
||||
### 2. 网关
|
||||
|
||||
与代理服务器不同的是,网关服务器会将 HTTP 转化为其它协议进行通信,从而请求其它非 HTTP 服务器的服务。
|
||||
|
||||
<div align="center"> <img src="../pics//81375888-6be1-476f-9521-42eea3e3154f.jpg"/> </div><br>
|
||||
|
||||
**隧道**
|
||||
### 3. 隧道
|
||||
|
||||
使用 SSL 等加密手段,为客户端和服务器之间建立一条安全的通信线路。
|
||||
|
||||
<div align="center"> <img src="../pics//64b95403-d976-421a-8b45-bac89c0b5185.jpg"/> </div><br>
|
||||
|
||||
# HTTPs
|
||||
# 六、HTTPs
|
||||
|
||||
HTTP 有以下安全性问题:
|
||||
|
||||
|
@ -488,7 +488,7 @@ HTTP 有以下安全性问题:
|
|||
|
||||
HTTPs 并不是新协议,而是 HTTP 先和 SSL(Secure Socket Layer)通信,再由 SSL 和 TCP 通信。通过使用 SSL,HTTPs 提供了加密、认证和完整性保护。
|
||||
|
||||
## 加密
|
||||
## 七、加密
|
||||
|
||||
有两种加密方式:对称密钥加密和公开密钥加密。对称密钥加密的加密和解密使用同一密钥,而公开密钥加密使用一对密钥用于加密和解密,分别为公开密钥和私有密钥。公开密钥所有人都可以获得,通信发送方获得接收方的公开密钥之后,就可以使用公开密钥进行加密,接收方收到通信内容后使用私有密钥解密。
|
||||
|
||||
|
@ -514,7 +514,7 @@ HTTPs 采用 **混合的加密机制** ,使用公开密钥加密用于传输
|
|||
|
||||
SSL 提供摘要功能来验证完整性。
|
||||
|
||||
# 各版本比较
|
||||
# 八、各版本比较
|
||||
|
||||
## HTTP/1.0 与 HTTP/1.1 的区别
|
||||
|
||||
|
@ -528,19 +528,19 @@ HTTP/1.1 新增了以下内容:
|
|||
|
||||
## HTTP/1.1 与 HTTP/2.0 的区别
|
||||
|
||||
**多路复用**
|
||||
### 1. 多路复用
|
||||
|
||||
HTTP/2.0 使用多路复用技术,使用同一个 TCP 连接来处理多个请求。
|
||||
|
||||
**首部压缩**
|
||||
### 2. 首部压缩
|
||||
|
||||
HTTP/1.1 的首部带有大量信息,而且每次都要重复发送。HTTP/2.0 要求通讯双方各自缓存一份首部字段表,从而避免了重复传输。
|
||||
|
||||
**服务端推送**
|
||||
### 3. 服务端推送
|
||||
|
||||
在客户端请求一个资源时,会把相关的资源一起发送给客户端,客户端就不需要再次发起请求了。例如客户端请求 index.html 页面,服务端就把 index.js 一起发给客户端。
|
||||
|
||||
**二进制格式**
|
||||
### 4. 二进制格式
|
||||
|
||||
HTTP/1.1 的解析是基于文本的,而 HTTP/2.0 采用二进制格式。
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user