基础、发展、TCP/IP协议族
HTTP:超文本传输协议,应用层的面向对象的协议
HTML:超文本标记语言
HTTP版本发展:
0.9 -> 1.0 -> 1.1 ->2.0 -> 3.0 (QUIC)
HTTP协议是TCP/IP的一个子集
TCP/IP网络
链路层 | 网络层 | 传输层 | 应用层 |
---|---|---|---|
网络 | IP | TCP | HTTP |
数据包封装
以太网 | IP | TCP | 应用数据 | 以太网 |
---|---|---|---|---|
首部 | 首部 | 首部 | 尾部 | |
<- TCP段 -> | ||||
<- IP数据报 -> | ||||
<- 以太网帧 -> |
TCP 三次握手
要保证双方的发送和接收能力都正常
DNS域名解析
报文结构、通讯原理、请求方法、状态码
HTTP支持C/S模式
HTTP支持任意类型的数据对象、类型由Content-Type标识
HTTP 无链接
每次连接只处理一个请求
处理完请求并收到客户端应答即断开连接
可以节省传输时间
Keep-Alive 解决了无连接的断开问题
无状态:服务器无记忆能力,对于已经处理过的信息必须重传
Cookie和Session用于解决无状态问题
URI = URL + URN
URL是URI,但并非所有URI都是URL
HTTP四类报文头
通用报文头、请求报文头、响应报文头、实体报文头
通用报文头
通用报文头 | 解释 |
---|---|
Cache-Control | 控制缓存 |
Connection | 用于指定当前的连接如何处理。例如:close:表示在完成请求后,客户端希望断开连接。keep-alive:表示在完成请求后,客户端希望保持连接,以便可以发送后续请求。upgrade:表示客户端希望将当前的连接升级为其他协议,例如HTTP/2或WebSocket。 |
Date | 创建报文时间 |
Pragma | 报文指令 |
Trailer | 报文末端的首部一览 |
Transfer-Encoding | 报文主体编码 |
Upgrade | 协议升级。例如websocket需要协议升级 |
Via | 代理服务器 |
Warning | 错误通知 |
请求报文头
请求报文头 | 解释 |
---|---|
Accept | 客户端可接受的MIME类型 、用户代理可处理的媒体类型 |
Accept-charset | 客户端所能接受的字符集,这些字符集是按照优先级排序的 |
Accept-Encoding | 客户端可接受的编码类型 |
Accept-Language | 客户端可接受的语言类型 |
Authorization | 身份认证信息 |
Expect | 客户端期望服务器在响应中返回哪些内容。通常情况下,这个字段用于指定服务器是否需要采取特殊的行为来处理该请求 |
From | 标识发送请求的用户的电子邮件地址 |
Host | 请求的目标服务器 |
If-Match | If-Match字段的值通常是一个ETag值,它是一个与资源相关的标识符,可以由服务器分配。如果ETag值匹配,则服务器认为资源未更改,可以响应请求。如果ETag值不匹配,则服务器认为资源已更改,无法响应请求。 |
If-Modified-Since | 比较资源的更新时间 |
If-None-Match | 与If-Match相反 |
If-Range | |
PUT方法是幂等的,所以更新用PUT,追加用POST
HEAD类似于GET但是响应没有具体内容
OPTIONS查询资源支持的方法
CONNECT用于做代理(VPN)
状态码
编码 | 解释 | 举例 | 解释 |
---|---|---|---|
1xx | 表示消息请求已被接受要继续处理,临时响应 | ||
2xx | 成功 | 206 | 成功处理了部分get请求,用于断点续传 |
3xx | 重定向,代表客户端要采取进一步操作才能完成请求,后续的请求地址在本次响应的Location域中 | 304 | 未修改 |
4xx | 请求错误,客户端错误妨碍了服务器的处理 | ||
5xx | 服务器错误,服务器意识到当前软硬件无法完成请求的处理 |
无
常见的编码规范:ASCII、GBK、ISO-8859-1、Unicode
UTF-8是一种编码方式
乱码,编解码使用的编码规范不一致或编码的编码规范中不包含对应字符。
认证方式:Basic认证-(安全)-> DIGEST认证
由于使用便利性被放弃
SSL客户端 由于成本高
基于表单认证,使用最多
不是HTTP协议中认定的
由Web应用程序各自实现
通过Cookie、Session保持用户状态
HTTP协议是基于请求/响应模式的,只要服务端,给了响应,本次HTTP请求就结束了。
HTTP的长连接和短连接本质上是TCP长连接和短连接
HTTP/1.0默认短连接每次HTTP操作都连接和中断
HTTP/1.1起默认长连接,以保证连接特性
请求头中Connection:keep-alive
代理,同时作为服务端和客户端
可以增强访问也可以屏蔽
网关改变访问形式
HTTP/*服务器端web网关(HTTP换mail/FTP等)
HTTP/HTTPS服务器端安全网关
HTTPS/HTTP客户端安全加速网关
资源网关 例HTTP转RPC
HTTP缓存
缓存的是一些静态文件
缓存工作方式:
1、约定过期时间-Expires
2、约定过期时间+最新修改时间对比
Last-Modified, if-Modified-Since
3、Expires/Last-Modified + Etag、If-None-Match
内容协商机制
指客户端和服务器端就响应的资源内容加进行交涉,然后提供给客户端最适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。
内容协商方式
客户端驱动、服务器驱动、透明协商
断点续传、多线程下载
客户端Range、服务器Content-Range
不用断点而成功返回200
用断点而成功返回206
HTTP服务器代码编写运维
略
加密传输原理、安全服务建设
HTTPS = HTTP + TLS
TLS 传输层加密协议 前身SSL协议
内容加密: 非对称/对称
上述两种加密都有一步铭文传输
都可以被中间人攻击
HTTPS引入了CA机构,浏览器自带CA证书的公钥,这样就没有了明文传输
HTTPS对性能影响
协议交互增加网络RTT(往返时延)
HTTP:TCP握手 ->数据传输
HTTPS:TCP握手 -> 302跳转 -> TCP握手 -> TLS完全握手阶段1 -> 阶段2 -> 数据传输
302跳转 默认网址是HTTP的而非HTTPS
TLS握手 密钥协商
websocket、webDAV、HTTP2、HTTP3
HTTP瓶颈:1、带宽,2、延迟
浏览器连接数有限
DNS查找
建立链接
WebSocket兼容HTTP的握手
完成握手之后有一个协议升级请求头和响应头中的Upgrade
HTTP缺陷
单路连接,请求低效
HTTP只允许客户端主动发起请求
HTTP头部冗余
SPDY的改进 放弃 -> HTTP2.0
多路复用、请求优化
支持服务器推送技术
SPDY压缩HTTP头
强制SSL传输协议
HTTP2.0性能增强的核心:二进制分帧
HTTP2.0首部压缩
设计首部表,对一些通用K-V对,如果没有改变则不重复发送
HTTP2.0资源合并,公用一个TCP连接
HTTP2.0流的优先级
WebDAV协议
网盘实时处理协议
是HTTP1.1的扩展
很少使用,NAS用到
HTTP2.0的问题
队头阻塞,丢包导致全部重传
建立连接握手延迟大
QUIC特性
ORTT
没有队头阻塞的多路复用
前向纠错
验证、会话管理、SQL注入、跨站攻击