HTTP 全称 “ 超文本传输协议 ”,是一种基于传输层 TCP 协议实现的应用非常广泛的 应用层协议
我们平时打开一个网站,就是通过 HTTP 协议来传输数据的
当我们在浏览器中访问一个 “ 网址 ”(URL),浏览器就会给这个 URL 的服务器发送一个 HTTP 请求,服务器返回一个 HTTP 响应,这个响应被浏览器解析之后,就展现出我们看到的网页内容
所谓 “ 超文本 ”,就是传输的内容不仅仅是文本,还可以是一些图片、视频、音频等二进制的数据
HTTP 默认端口号:80
因为 HTTP 协议没有规定报文头部的键值对有多少个,空行就相当于 “ 报头的结束标志 ” 或者 “ 报头和主体之间的分隔符 ”
在 HTTP/1.0 中,默认使用短连接,短连接就是,客户端访问的某个 HTML 网页中包含其他 Web 资源,如 JS 文件、图像文件、CSS 文件等,客户端每遇到一个 Web 资源,就会建立一个 HTTP 连接,访问结束就关闭连接
HTTP/1.1 开始,默认使用长连接,在使用长连接的情况下,客户端和服务器用于传输数据的 TCP 连接在一定时间内不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这条已经建立的连接。长连接的保持时间可以在不同服务器中进行指定,实现长连接要求客户端和服务器都支持长连接
HTTP 的长连接和短连接,实质上是 TCP 的长连接和短连接
平时我们俗称的 “ 网址 ” 就是 URL(统一资源定位符)
互联网上的每一个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器怎么处理它
基本格式:
域名解析:将 www.baidu.com 解析成 IP 地址
浏览器搜索自己的 DNS 缓存(维护一张域名和 IP 的映射表);若没有,则搜索操作系统的 hosts 文件
若都没有,则去本地 DNS 服务器进行查询,本地 DNS 服务器会查询自己的 DNS 缓存,如果没有,本地 DNS 服务器会向根域名服务器发起请求,来查询域名所对应的 IP 地址,得到结果之后本地 DNS 服务器将结果返回给浏览器,同时缓存本次解析的 IP
发起 TCP 三次握手,建立 TCP 连接。浏览器会以一个随机端口号(1024-65535)向服务器 web 程序的 80 端口发起 TCP 连接
建立 TCP 连接后,发起 HTTP 请求
服务器处理请求,对浏览器的请求进行响应,浏览器得到网页的 html 文件和一些资源文件
浏览器解析 html 文件和资源文件,对页面进行渲染并呈现出来
方法 | 作用 |
---|---|
GET | 获取资源 |
POST | 传输实体主体 |
PUT | 上传文件 |
DELETE | 删除文件 |
HEAD | 和 GET 类似,但只返回报文首部,不返回报文实体主体部分 |
OPTIONS | 查询指定的 URL 支持的方法 |
TRACE | 服务器会将通信路径返回给客户端 |
CONNECT | 要求用隧道协议连接代理 |
PATCH | 对资源进行部分修改 |
HTTPS 也是一个应用层协议,是在 HTTP 协议的基础上引入了一个加密层
HTTPS 协议运行在 SSL 协议之上,SSL 协议运行在 TCP 协议之上
HTTP 协议内容都是按照文本的方式明文传输的,这就可能会导致传输过程中出现被篡改的情况
在互联网上,明文传输是比较危险的事情
HTTPS 就是在 HTTP 的基础上进行了加密,进一步保证用户的信息安全
HTTPS 默认端口号:443
SSL 协议是一种用于保证互联网通信中数据安全的标准技术,SSL 协议使用公钥、私钥、和对称密钥来加密和解密数据,还会使用证书来验证服务器和客户端的身份
加密就是把明文(要传输的信息)进行一系列变换,生成密文,在互联网上传输时,以密文的形式传输,在到达接收方时,接收方再进行一系列变换,将密文转换成明文
在加密解密的过程中,都会有一个被称为 “密钥” 的中间数据来辅助进行解密或解密
加密的方式有很多,但整体上分为两大类:对称加密 和 非对称加密
对称加密其实就是信息的发送方和接收方使用同一个密钥对密文进行加密和解密。
但是在一开始发送方和接收方是不知道这个密钥的,所以发送信息之前还需要先传输密钥,但是如果密钥在传输过程中被截获,那么后续的密文传输就与明文传输就没什么区别了
因此就需要引入 非对称加密 先对对称密钥进行加密传输
非对称加密要用到两个密钥,一个叫做 “公钥”,一个叫做 “私钥”
也可以反着用
引入非对称加密之后
对称加密的效率比非对称加密的效率高很多,所以只是在开始传输对称密钥时使用非对称加密,后续的传输使用对称加密
但是还存在一些问题
这就需要引入 CA 证书
CA 证书是在非对称加密传输对称密钥时使用的,客户端和服务器交换对称密钥时,使用非对称加密对对称密钥进行加密,非对称加密中的公钥就是由 CA 证书提供的,CA 证书在使用之前客户端会对其进行合法性校验,确保 CA 证书不是伪造的
CA 证书中包含的信息:
为了让服务器的公钥被客户端信任,服务器的证书都是由 CA(证书认证机构)签名的,CA 在网络中相当于公安局,具有极高的可信度,所以由它来给证书签名,证书必然是被信任的
CA 对证书签名的过程:
客户端对证书验证的过程:
HTTPS 的加密过程大致可以分为三个阶段:
优点:
安全性:
HTTPS 在数据传输过程中保证绝对的密文传输,可以防止数据在传输过程中被窃取或改变,保证数据的完整性
缺点:
HTTP | HTTPS | |
---|---|---|
端口 | 80 | 443 |
安全性 | 无加密,安全性较差 | 有加密机制,安全性较高 |
资源消耗 | 较少 | 由于需要加密处理,需要消耗更多资源 |
是否需要证书 | 不需要 | 需要 |
协议 | 运行在 TCP 协议之上 | 运行在 SSL 协议之上,SSL 运行在TCP 协议之上 |
Cookie 是服务器发送给客户端并保存到本地的一小块数据,它会在客户端下一次向同一个服务器发起请求时被携带并发送到服务器上。用于告知服务器两次请求来自同一个客户端,从而在本次请求中响应之前的访问状态
Cookie 的应用:
Session 代表着服务器和客户端一次会话的过程,Session 中保存着用户会话所需的属性和配置信息,当用户在应用程序的各个网页之间跳转时,存储在 Session 对象中的属性和配置信息不会丢失,而是在整个会话中一直存在下去。