第六章 HTTP首部
HTTP协议必定包含HTTP首部
- 请求报文
- 报文 = 报文首部 + 空行(CR+LF) + 报文主体
- 报文首部 = 请求行 + HTTP首部字段 + 其他
- 请求行: 方法 URI HTTP版本
- HTTP首部字段 = 请求首部字段 + 通用首部字段 + 实体首部字段
- 响应报文
- 报文 = 报文首部 + 空行(CR+LF) + 报文主体
- 报文首部 = 状态行 + HTTP首部字段 + 其他
- 状态行: HTTP版本 状态码(数字和原因短语)
- HTTP首部字段 = 响应首部字段 + 通用首部字段 + 实体首部字段
- 4种HTTP首部字段类型
- 请求首部字段
- 响应首部字段
- 通用首部字段
- 实体首部字段
- HTTP首部字段:定义成缓存代理和非缓存代理的行为,分2种类型
- 端到端首部(End-to-end Header): 会转发给请求/响应对应的最终接收目标,且必须保存在有缓存生成的响应中,另外规定它必须被转发
- 逐跳首部(Hop-by-hop Header): 只对单次转发有效,会因通过缓存或代理而不再转发,HTTP/1.1以后,要使用hop-by-hop首部,需提供Connection首部字段
- 以下8个为hop-by-hop的Connection首部字段:
Connection, Keep-Alive, Proxy-Authenticate, Proxy-Authorization, Trailer, TE, Transfer-Encoding, Upgrade
通用首部字段
- Cache-Control: 操作缓存的工作机制
- 表示是否能缓存的指令: Cache-Control: public || private || no-cache[=Location]
- 控制可执行缓存的对象的指令: Cache-Control: no-store
- 指令缓存期限的认证的指令: Cache-Control: s-maxage=time(/s) || max-age || min-fresh || max-stale || only-if-cached || must-revalidate || proxy-revalidate || no-transform
- Cache-Control 扩展: cache-extension token 可扩展首部字段内的指令
- Connection: 控制不再转发给代理的首部字段; 管理持久化连接
- Date: 日期
- Pragma: 1.1之前,兼容,发送请求同时含有下面两个首部字段
Cache-Control: no-cache
Pragma: no-cache
- Trailer: 报文主体后记录了哪些首部字段,1.1分块传输编码
- Transfer-Encoding: 传输报文主体时采用的编码方式
- Upgrade: 检测HTTP协议及其他协议是否可使用更高的版本进行通信
- Via: 追踪传输路径
- Warning: 1.0 Retry-Afer => 1.1 Warning
110 响应已过期; 111 再验证失败; 112 断开连接操作; 113 试探性过期; 199 杂项警告; 214 使用了转换; 299 持久杂项警告
请求首部字段
- Accept: 请求媒介类型, 有q=权重值(0,1)小数点后三位
- Accept-Charset: 字符集, 有权重值,内容协商机制的服务器驱动协商
- Accept-Encoding: 内容编码及优先级,gzip|compress|deflate|identity,有q,*表任意
- Accept-Language: 语言
- Atuthorization: 认证信息,401后把Authorization加入请求中
- Expect: 100-continue; 417 Expectation Failed
- From: 告知电子邮件地址
- Host: 虚拟主机运行在同一个IP上,使用Host加以区分
- If-Match: 条件请求,符合条件返回200OK;不符合,返回412 Precodition Failed
- If-Modified-Since: 在某年某月某日某时后更新的就成功,否则失败;
- 成功返回200 OK 和Last-Modified: 时间
- 不成功返回304 Not Modified
- If-None-Match: 与ETag不一致,可处理该请求
- If-Range: ETag值相同,返回Range;不同,返回全部
如果不用If-Range,发送两次,第一次ETag值不同,第二次请求响应全部
- If-Unmodified-Since 与 If-Modified-Since 相反: 412 Precondition Failed
- Max-Forwards
- Proxy-Authorization: 接收到代理发来的认证质询时发送Proxy-Authrization以告知服务器认证所需信息
- Range: 指定范围
- Referer: 原始资源的URI
- TE: 传输编码
- User-Agent: 浏览器种类
响应首部字段
- Accept-Ranges: bytes 告知客户端,服务器能处理范围请求
- Age: 多久之前创建了响应,单位为秒
- ETag: 实体标识,由服务器分配;强ETag,一变就改;弱ETag,只用于提示资源是否相同,在开始处加W/
- Location: 配合3xx:Redirection 响应提供重定向的URI
- Proxy-Authenticate: 认证信息发给客户端,由代理所要的发送
- Retry-After: 多久之后再发送请求,主要配合503 Service Unavailable或3xx Redirect响应
- Server: 告知客户端当前服务器安装的HTTP信息
- Vary: 代理服务器收到Vary指定请求,如Accept-language相同,直接缓存返回响应,反之从源获取返回
- WWW-Authenticate: 用于HTTP访问认证
实体首部字段
- Allow: 支持返回方法,不支持返回405-Method Not Allowed
- Content-Encoding: 内容编码
- Content-Language: 实体主体使用的自然语言
- Content-Length: 实体主体部分的大小
- Content-Location: 报文主体返回资源对应的URI
- Content-MD5: 检查报文主体传输是否完整和确认传输到达
- Content-Range: 针对范围请求,返回响应时,哪部分符合范围请求,字节为单位
- Content-Type: 说明实体主体内对象的媒体类型
- Expires: 资源失效日期告知客户端
- Last-Modified: 资源最终修改时间
为Cookie服务的首部字段
- Set-Cookie: 开始状态管理使用的Cookie信息 响应首部字段
- expires 指定浏览器可发送Cookie的有效期
- path: Cookie发送范围的文件目录
- domain: 域名与结尾匹配一致
- sucure: 限制Web页面仅在HTTPS安全连接,可发送Cookie
- HttpOnly: Cookie 扩展,使js脚本无法获得Cookie,防XSS
- Cookie: 服务器接收别的Cookie信息,请求首部字段
其他首部字段
- X-Frame-Options: 属响应首部,用于控制网端内容在其他web网络的Frame标签内的显示问题,防止点击劫持
X-Frame-Options: DENY 拒绝 | SAMEORIGIN 同源许可 (web服务器端预先设定)
- X-XSS-Protection: 响应首部,防XSS;1表示有效过滤XSS;0表示无效过滤XSS
- DNT: 请求首部;0表示同意被追踪;1表示拒绝被追踪 (Do Not Track)
- P3P: 响应首部,在线隐私偏好平台
第七章 确保Web安全的HTTPS
- 加密处理防窃听:
- 通信加密: HTTP+SSL(TLS)=HTTPS
- 内容加密: 客户端与服务器同时具备加解密,不好,内容仍有被篡改的风险.
- 防止篡改: MD5或SHA-1散列值校验,数字签名方法(PGP)
- HTTP+加密+认证+完整性保护=HTTPS
- HTTP | SMTP | Telnet
______________________
SSL
______________________
TCP
______________________
IP - HTTPS采用混合加密机制: 对称(效率高)+非对称(效率低)
第八章 确认访问用户身份的认证
1. HTTP使用的认证方式 /1.1
- BASIC认证(基本)
- DiGEST认证(摘要)
- SSL客户端认证
- Form Base认证(基于表单认证)
2. BASIC认证(基本) HTTP/1.0
步骤:
- 请求资源要BASIC认证,服务器返回401 Authorization Required 返回带WWW-Authenticate首部字段的响应; 该字段内包含认证的方式(BASIC)及Request-URI安全域字符串(realm)
- 客户端收到后,发用户ID+Password(Base64编码), 写入首部字段Authorization(代理就不用写首部直接发送)
- 接收到Authorization请求的服务器,验证,返回一条包含Request-URI资源的响应(不安全,无法实现认证注销操作)
3. DIGEST认证 质询/响应方式
步骤:
- 请求需认证资源,服务器返回401 Authorization Required, 返回带WWW-Authenticate首部字段的响应(包含质问响应方式认证所需的临时质询码(随机数,nonce现时),包含realm和nonce字段)
- 401后返回的响应包含DIGEST认证Authorization(必含username,realm,nonce,URI和response字段信息)
- 服务器接收到含Authorization首部信息请求认证后响应,安全性高于BASIC低于HTTPS
4. SSL客户端认证(客户端证书完成认证)
- 采用双因素认证: 证书认证, 表单认证(Session管理; Cookie应用 -> Cookie管理session -> 状态管理),但是有费用问题
- 为减跨站脚本攻击(XSS)造成的损失,建议事先在Cookie内加入httponly属性,服务器保存用户提交的密码等登录信息无标准化,一般通过给密码加盐,再使用hash,禁止明文密码保存