1. 常见概念
MIME:Multipurpose Internet Mail Extension,电子邮件系统和HTTP用于描述标记多媒体内容
URI:统一资源标识符,可以有URL和URN两种形式
URL:协议+服务器地址+资源路径
事务:通过HTTP报文格式化数据块完成一次请求和响应
2. URL与资源
大多数URL方案的语法建立在
:// : @ : / ; ? # 设计URL使其可以通过任意因特网协议安全传输是很重要的,有些协议如SMTP的传输方法只能使用相对较小,通用的安全字母表中的字符
URL中包含如中文等非安全字母表二进制数据或字符时,则需要进行转义
转义:百分号+字符编码的十六进制数
3. HTTP报文
- 组成:对报文进行描述的起始行start line \r\n作为行结束,包含属性的首部块header,包含数据的body
常见HTTP方法
- GET,HEAD,POST,PUT,DELETE,TRACE(对可能经过代理服务器传送的报文进行追踪,服务响应会带上实际收到的请求原文),OPTIONS(决定可以在服务器上执行哪些方法)
已定义状态码
- 100-101:信息提示
- 200-206:成功
- 300-305:重定向
- 400-415:客户端错误
- 500-505:服务端错误
4. 连接管理
- 连接过程:解析主机名,dns查询ip,获取端口号,发起连接,发送请求报文,返回响应报文,关闭连接
- HTTP事务时延:DNS查询,连接,请求,处理,响应,关闭
- 性能聚焦区域:TCP连接,TCP慢启动拥塞控制,数据聚集的Nagle算法+TCP延迟确认,TIME_WAIT时延和端口耗尽
- 并行连接:由客户端的网络带宽限制并行连接数
- 持久连接:HTTP/1.1及HTTP/1.0的增强版本 允许设备在事务处理结束时将连接保持打开状态,省去建立连接和慢启动的阶段,1.0可以通过Connection:keep-alive
- 管道化连接:HTTP/1.1允许在持久连接上使用请求管道,响应到达前将请求放入队列,不能传送非幂等请求如POST
5. Web服务器
- 重定向使用场景:永久删除或临时删除的资源,负载均衡,服务器关联,规范目录名称
- 对非持久连接,发送完响应关闭服务端连接;对持久连接,需要正确计算content-length首部
6. 代理
- 代理可以监视流量并对其进行修改
- 应用场景:安全防火墙,Web缓存,反向代理,内容路由器,转码,匿名
- via: 列出了与报文途径的每个中间节点
7. 缓存
解决问题
- 冗余的数据传输:服务器多次传输同一份文档,增大负担,消耗带宽
- 带宽瓶颈:客户端会以路径上最慢的网速访问服务器,如果客户端能在局域网获取一份副本,将大大提升性能
- 瞬间拥塞:使web服务器过载
- 距离时延
缓存再验证
- 大部分缓存只有在客户端发起请求,且副本时间需要再次检测才会进行再验证
- 向原始服务器发送小请求,如果返回304,则缓存继续有效
- 首部:if-modified-since,只有在缓存了对象的副本后又对其进行修改,才发送此对象
- 商业代理缓存会在via首部附加额外信息以描述命中情况
HTTP缓存体系
- 缓存存储策略:决定http响应内容是否可缓存到客户端,Cache-Control
- 缓存过期策略:决定客户端是否可以直接使用缓存数据,Expires
- 缓存对比策略:将缓存在客户端的数据标识发往服务端,服务端会查看if-modified-since等请求头,对比判断标识是否有效,如果有效则返回304
相关文章
8. 网关,隧道及中继
网关
如应用程序服务器,早期的CGI通用网关接口
隧道
- web隧道允许用户通过http连接发送非http流量
- 使用http方法CONNECT建立http隧道
- SSL隧道:最初的web隧道是为了通过防火墙传输SSL流量。发送CONNECT请求,返回认证请求,发送带有认证信息CONNECT请求,建立连接
中继
- 盲转发
- 无法处理Connection:keep-alive
9. 爬虫
- 链接提取及相对链接的标准化
- 避免环路的出现
- 广度优先
- 节流
- 内容指纹
10. 客户端识别与cookie机制
用户识别机制
- 承载用户信息的HTTP首部:user-agent,cookie,referer,x-forward–for等
- 客户端IP地址:并不能精确识别客户
- 用户登录:通过www-authenticate,authorization首部
- cookie
11. 基本认证机制
- 实际使用并不安全,用户名和密码都是以明文形式传送,安全使用的唯一方式就是结合SSL
12. 摘要认证
- 用摘要保护密码,不通过网络发送密码
- 单向摘要,MD5输出的128位摘要被写成32个16进制字符
- 用随机数防止重放攻击,服务器质询时返回给客户端一个随机数,客户端在计算摘要之前要加上这个随机数
13. 安全HTTP
- 对称秘钥加密:编码和解码使用相同的秘钥,流行算法:DES,RC2,RC4
- 公开秘钥加密:使用非对称秘钥,只有接收端可以用私钥解密,RSA算法
- 公开秘钥加密算法的计算可能会很慢,对称加密更快
- 两个节点间通过公开秘钥加密建立安全通信,再用安全通道产生发送临时随机对称秘钥
- 数字签名:附加在报文上的特殊加密校验码,可以证明是作者编写了这条报文,防止报文被篡改
- 数字证书:对象,过期时间,发布者,公钥,数字签名等,常见标准格式X.509 v3
- 浏览器收到服务器证书后,会对签名颁发机构进行检查
- SSL握手:交换协议版本号,选择一个两端都了解的密码,对两端的身份进行认证,生成临时会话秘钥。
- 服务器可以要求客户端使用客户端证书,常见于组织机构内网
- 站点证书有效性:日期检测,签名颁发者可信度检测,签名检测,站点身份检测检查证书域名与访问站点域名是否一致
- OpenSSL:SSL和TLS常见的开源实现,创建SSL本地上下文,建立443TCP连接,将SSL层附加到TCP连接,SSL握手
- HTTPS SSL隧道协议:http通过CONNECT方法告诉代理,建立一条直接到服务端的连接,以隧道协议传输数据
14. 实体和编码
- content-length:检测报文截尾,这对缓存服务器尤其重要;对于持久连接,客户端需要直到报文在哪里结束
- 内容编码:如果主体进行编码,content-length说明的就是编码后的长度;编码后,增加content-encoding首部用户客户端解码;客户端通过accept-encoding告知服务端可以接受的编码方式
- 实体摘要:发送方在生成初始主体时生成一个数据校验和,这样接收方就可以通过检查这个校验和捕获所有意外,相关首部content-md5
- 传输编码:改变报文数据在网络中的传输方式,解决可靠传输存在的问题:未知尺寸,用传输编码发送数据,用特别的结束脚注表明数据结束;安全性(被SSL取代),扰乱报文内容
- Transfer-Encoding:传输编码类型,TE:告诉服务器可以使用哪些传输编码扩展
- 分块编码:把报文分割为若干个小块紧挨着发送。非持久连接,客户端读取直到服务端关闭连接。持久连接,说明每块大小,最后用0块作为主体结束的信号
- 传输编码规则:传输编码集合中要包含分块;必须最后一个作用于报文主体;不能多次作用到一个报文主体上;
- 范围请求:允许客户端只请求文档的一部分,在点对点文件共享客户端应用广泛
- 差异编码:客户端可以使用A-IM首部说明可以接受的实例操控类型,Delta-base用于计算差异的基线文档Etag,支持差异编码的服务器必须保持页面随时间变化的多个版本
15. 国际化
- charset参数和content-language:告知客户端文档的字母表和语言
- accept-language和accept-charset:告知服务端支持的字母表和语言及其优先顺序
16. 内容协商与转码
- Vary:响应首部列出客户端请求首部,服务端可用这些首部选择文档
- 转码:格式转换,信息综合,内容注入
17. 内容发布与分发
- CDN:内容分发网络,节点可以是web服务器,反向代理,或缓存
18. 重定向与负载均衡
- HTTP重定向:增加时延
- DNS重定向:返回多个ip选中的ip,缺点时DNS会缓存
- 任播寻址:地理上分散的web服务器拥有相同的ip地址,将地址广告给骨干网路由,则客户端的请求将通过最短路径路由给最近的服务器
- IP MAC转发:交换机将分组转发到指定MAC地址
- IP地址转发:修改目的IP地址,即NAT网络地址交换
- 代理自动配置协议PAC:配置url使用代理
19. 日志记录
- 常用日志格式:参考nginx access.log
- 对重要的页面进行缓存清除