协议的内容
- 消息的类型
- 请求消息
- 响应消息
- 消息的语法/格式
- 消息中有哪些字段
- 字段如何描述
- 字段的语义
- 规则
- 进程应该什么时候,怎样发送消息
HTTP连接的两种类型
- 非持久性连接 HTTP 1.0
- 持久性连接 HTTP 1.1
- 无流水:客户端收到前一个响应之后才发送新的请求,每个对象使用1RTT
- 流水机制:HTTP1.1默认,只要遇到对象尽快发出,所有对象使用1RTT
RTT(Round Trip Time):从客户端发送一个很小的数据包到服务器并返回所经历的时间
非持久性连接发送一个文件所需时间:2*RTT + 发送文件时间
HTTP消息
- 请求消息(request)
- 请求行(request line):请求方法(GET、POST) + URL + 协议版本
- 请求头部(request header):键值对
- 空行:回车符、换行符,通知服务器header结束
- 请求数据:POST提交表单,GET没有正文,不包含这一部分
- 响应消息(response)
- 状态行(status line):协议版本 + HTTP状态码
- 消息报头:键值对
- 空行:同上
- 响应正文:响应数据
HTTP请求方法
-
POST:通过消息体上传
-
GET:通过URL字段上传
-
HEAD:请Server不要将所请求的对象放入响应消息,只返回header
-
PUT(HTTP1.1):将消息体中的文件上传到URL指定的路径
-
DELETE(HTTP1.1):删除URL指定的文件
HTTP状态码
- 2**:成功
- 3**:转发与重定向
- 4**:客户端错误
- 5**:服务器错误
Cookie
HTTP无状态:服务器不记录客户端的历史行为
为了辨别用户身份,进行session跟踪,储存在用户本地的数据
Cookie组件
- HTTP请求消息的cookie头部行:cookie字段
- HTTP响应消息的cookie头部行:set-cookie字段
- 保存在客户端上的cookie文件,由浏览器管理
- Web服务器的后台数据库
Web缓存/代理服务器技术
在不访问服务器的前提下满足客户端的HTTP请求
浏览器向代理服务器发送HTTP请求
- 如果代理服务器中有所需的对象,代理服务器直接响应给客户端
- 如果代理服务器中没有所需对象,代理服务器向原始服务器发送请求,获取对象,发送给客户端,并保存对象
缓存/代理服务器既充当服务器又充当客户端。
缓存命中率
问题:缓存一致问题
缓存和原始服务器的数据是否一致?
解决方法:条件性GET
请求header字段:If-modified-since
缓存命中,代理服务器发送一个条件性GET来检查缓存中的某个对象是否是最新的,其请求头中包含If-modified-since字段,原始服务器接收该请求,若该对象在If-modified-since字段指示的日期之后没有进行过更新,则发送一个不含对象的响应报文(避免浪费带宽,浪费时间),状态码304,代理服务器接收到该响应报文,也就得知缓存中的该对象是最新的,所以将缓存中的该对象发送给客户端。
SMTP协议(Simple Mail Transfer Protocol)
TCP,端口25
服务器消息队列
命令/响应模式
- 命令(command):ASC2文本
- 响应(response):状态代码和语句
MIME:多媒体邮件扩展
邮件头部增加额外行声明MIME内容类型:编码方法,解码方式
邮件访问协议
-
POP协议:认证授权,下载
-
IMAP协议(Internet Mail Access Protocol)
-
HTTP协议:基于Web的协议
DNS
- 翻译:域名->IP
- 主机别名
- 负载均衡:为一个域名提供多个服务器映射,轮流访问
为什么不适用集中式DNS而使用分布式DNS
- 单点失败问题
- 流量问题
- 距离问题
- 维护性问题
分布式层次式数据库
根 - 顶级 - 第二层
DNS记录
name, value, type, ttl