TCP/IP 四层模型
应用层 : FTP 、HTTP、DNS、SMTP
运输层 :TCP、UDP
网络层 : IP
链路层 :硬件接口
OSI参考模型
应用层:应用层协议, HTTP、FTP、SMTP
表示层 :加密解密、压缩解压
会话层 : 不同机器上用户之间及管理会话
传输层 : 接受上一层数据, 必要的时候把数据进行分割, 交给网络层, 保证数据段有效到达对端
网络层 : 控制子网的运行、逻辑地址、分组传输、路由选择
数据链路层:物理寻址
物理层:原始比特流传输
HTTP
超文本传输协议, 默认端口是 80
特点
无状态: 每次请求都是独立的, 两个请求之间没有联系, 但是会引入 Cookie 和 Session 机制来关联请求
无连接:服务端收到客户端请求后, 响应完成并收到客户端的应答之后, 立即断开连接
请求报文
-
请求行
- 方法 : GET 、POST 、HEAD、PUT、DELETE、OPTIONS
- URL 字段
- HTTP协议版本号
-
请求头
- Accept: 浏览器可以接受的 MIME 类型
- Accept-Encoding:浏览器支持的编码类型
- Accept-Language: 浏览器支持的语言
- Content-Length : 请求消息的正文长度
- Content-Type : 客户端接受服务器返回的文件类型
- User-Agent : 请求的用户信息, 浏览器类型
- Host : 给出接受请求的服务器主机名和端口号
响应报文
-
响应行
- 报文协议及版本
- 状态码及描述
-
响应头
- Content-Length : 响应消息长度
- Content-Type : 当前内容的 MIME 类型
- Server : 服务器名称
- Set-Cookie : 设置 cookie
-
响应码
- 1xx : 临时响应, 需要请求者继续执行操作
- 2xx: 成功处理了请求的状态码
- 3xx : 如果要完成请求, 需要进一步操作, 重定向
- 4xx : 请求出错
- 5xx: 服务器内部错误
HTTPS 原理
默认端口号是 443
- 客户端请求 https 连接, 服务器收到请求后会把证书信息(包含公钥和签名) 返回给客户端
- 客户端会校验这个证书签名的有效性从而获取到公钥
- 客户端随机生成会话密钥(对称加密), 然后利用证书里面的公钥将会话密钥加密, 连同加密后的内容传送给服务端
- 服务器利用私钥解密出会话密钥, 然后解密出内容
- 服务端利用会话密钥通信
HTTPS 优缺点
优点
- 可以认证用户和服务器, 确保数据发送到正确的客户端和服务端
- 防止数据在传输过程中不被窃取、改变, 确保数据的完整性
缺点
- 比较耗时, 页面的加载时间延长 50%, 增加 10% 和 20%的耗电
- SSL 证书要钱
- https 连接缓存不如 http 高效
- 并非绝对安全, 掌握CA证书机构、加密算法的组织任然可以进行中间人形式的攻击
http 和 https 的区别
- http 协议没有加密, https 对传输数据加密, 保证用户信息
- http 默认端口是80, https 默认端口是443
- http 无需证书, 而 https 需要购买证书
http 1.x 和 http 2.0 的区别
- 新的二进制格式: 1.x 的解析是基于文本的, 2.0是二进制格式
- 多路复用: 连接共享。 1.x 每次请求都建立一个链接, 用完关闭, 串行单线程处理, 后面的请求等待前面请求返回才能执行。 2.x 多个请求同时在一个连接上并行执行
- header压缩: 1.x 的header 有大量信息每次都要重复发送, 2.0 使用 encoder 来减少传输的 header 大小
- 服务端推送
get 和 post 的区别
- get 的请求放在 URL 上, 参数之间以 & 相连, post 请求放在 http body 内
- get 的提交数据最大有限制, 跟环境有关系, post 理论上没有限制, 大小由服务器设定
- get 产生一个 TCP 数据包, 浏览器会一起发送 header 和 data, 服务器返回200
post 有些服务器是只发一个 TCP 数据包, 有些会先发送header, 服务器返回100后, 再发送data, 返回200 - get 请求会主动 cache, post 不会, 除非手动设置
- get 在浏览器返回时是无害的, post 会再次提交请求