图解HTTP(2)

第六章 HTTP首部

HTTP协议必定包含HTTP首部

  1. 请求报文
  1. 报文 = 报文首部 + 空行(CR+LF) + 报文主体
  2. 报文首部 = 请求行 + HTTP首部字段 + 其他
  3. 请求行: 方法 URI HTTP版本
  4. HTTP首部字段 = 请求首部字段 + 通用首部字段 + 实体首部字段
  1. 响应报文
  1. 报文 = 报文首部 + 空行(CR+LF) + 报文主体
  2. 报文首部 = 状态行 + HTTP首部字段 + 其他
  3. 状态行: HTTP版本 状态码(数字和原因短语)
  4. HTTP首部字段 = 响应首部字段 + 通用首部字段 + 实体首部字段
  1. 4种HTTP首部字段类型
  1. 请求首部字段
  2. 响应首部字段
  3. 通用首部字段
  4. 实体首部字段
  1. HTTP首部字段:定义成缓存代理和非缓存代理的行为,分2种类型
  1. 端到端首部(End-to-end Header): 会转发给请求/响应对应的最终接收目标,且必须保存在有缓存生成的响应中,另外规定它必须被转发
  2. 逐跳首部(Hop-by-hop Header): 只对单次转发有效,会因通过缓存或代理而不再转发,HTTP/1.1以后,要使用hop-by-hop首部,需提供Connection首部字段
  3. 以下8个为hop-by-hop的Connection首部字段:
    Connection, Keep-Alive, Proxy-Authenticate, Proxy-Authorization, Trailer, TE, Transfer-Encoding, Upgrade

通用首部字段

  1. Cache-Control: 操作缓存的工作机制
  1. 表示是否能缓存的指令: Cache-Control: public || private || no-cache[=Location]
  2. 控制可执行缓存的对象的指令: Cache-Control: no-store
  3. 指令缓存期限的认证的指令: Cache-Control: s-maxage=time(/s) || max-age || min-fresh || max-stale || only-if-cached || must-revalidate || proxy-revalidate || no-transform
  4. Cache-Control 扩展: cache-extension token 可扩展首部字段内的指令
  1. Connection: 控制不再转发给代理的首部字段; 管理持久化连接
  2. Date: 日期
  3. Pragma: 1.1之前,兼容,发送请求同时含有下面两个首部字段
Cache-Control: no-cache
Pragma: no-cache
  1. Trailer: 报文主体后记录了哪些首部字段,1.1分块传输编码
  2. Transfer-Encoding: 传输报文主体时采用的编码方式
  3. Upgrade: 检测HTTP协议及其他协议是否可使用更高的版本进行通信
  4. Via: 追踪传输路径
  5. Warning: 1.0 Retry-Afer => 1.1 Warning

110 响应已过期; 111 再验证失败; 112 断开连接操作; 113 试探性过期; 199 杂项警告; 214 使用了转换; 299 持久杂项警告

请求首部字段

  1. Accept: 请求媒介类型, 有q=权重值(0,1)小数点后三位
  2. Accept-Charset: 字符集, 有权重值,内容协商机制的服务器驱动协商
  3. Accept-Encoding: 内容编码及优先级,gzip|compress|deflate|identity,有q,*表任意
  4. Accept-Language: 语言
  5. Atuthorization: 认证信息,401后把Authorization加入请求中
  6. Expect: 100-continue; 417 Expectation Failed
  7. From: 告知电子邮件地址
  8. Host: 虚拟主机运行在同一个IP上,使用Host加以区分
  9. If-Match: 条件请求,符合条件返回200OK;不符合,返回412 Precodition Failed
  10. If-Modified-Since: 在某年某月某日某时后更新的就成功,否则失败;
  1. 成功返回200 OK 和Last-Modified: 时间
  2. 不成功返回304 Not Modified
  1. If-None-Match: 与ETag不一致,可处理该请求
  2. If-Range: ETag值相同,返回Range;不同,返回全部

如果不用If-Range,发送两次,第一次ETag值不同,第二次请求响应全部

  1. If-Unmodified-Since 与 If-Modified-Since 相反: 412 Precondition Failed
  2. Max-Forwards
  3. Proxy-Authorization: 接收到代理发来的认证质询时发送Proxy-Authrization以告知服务器认证所需信息
  4. Range: 指定范围
  5. Referer: 原始资源的URI
  6. TE: 传输编码
  7. User-Agent: 浏览器种类

响应首部字段

  1. Accept-Ranges: bytes 告知客户端,服务器能处理范围请求
  2. Age: 多久之前创建了响应,单位为秒
  3. ETag: 实体标识,由服务器分配;强ETag,一变就改;弱ETag,只用于提示资源是否相同,在开始处加W/
  4. Location: 配合3xx:Redirection 响应提供重定向的URI
  5. Proxy-Authenticate: 认证信息发给客户端,由代理所要的发送
  6. Retry-After: 多久之后再发送请求,主要配合503 Service Unavailable或3xx Redirect响应
  7. Server: 告知客户端当前服务器安装的HTTP信息
  8. Vary: 代理服务器收到Vary指定请求,如Accept-language相同,直接缓存返回响应,反之从源获取返回
  9. WWW-Authenticate: 用于HTTP访问认证

实体首部字段

  1. Allow: 支持返回方法,不支持返回405-Method Not Allowed
  2. Content-Encoding: 内容编码
  3. Content-Language: 实体主体使用的自然语言
  4. Content-Length: 实体主体部分的大小
  5. Content-Location: 报文主体返回资源对应的URI
  6. Content-MD5: 检查报文主体传输是否完整和确认传输到达
  7. Content-Range: 针对范围请求,返回响应时,哪部分符合范围请求,字节为单位
  8. Content-Type: 说明实体主体内对象的媒体类型
  9. Expires: 资源失效日期告知客户端
  10. Last-Modified: 资源最终修改时间

为Cookie服务的首部字段

  1. Set-Cookie: 开始状态管理使用的Cookie信息 响应首部字段
  1. expires 指定浏览器可发送Cookie的有效期
  2. path: Cookie发送范围的文件目录
  3. domain: 域名与结尾匹配一致
  4. sucure: 限制Web页面仅在HTTPS安全连接,可发送Cookie
  5. HttpOnly: Cookie 扩展,使js脚本无法获得Cookie,防XSS
  1. Cookie: 服务器接收别的Cookie信息,请求首部字段

其他首部字段

  1. X-Frame-Options: 属响应首部,用于控制网端内容在其他web网络的Frame标签内的显示问题,防止点击劫持
X-Frame-Options: DENY 拒绝 | SAMEORIGIN 同源许可 (web服务器端预先设定)
  1. X-XSS-Protection: 响应首部,防XSS;1表示有效过滤XSS;0表示无效过滤XSS
  2. DNT: 请求首部;0表示同意被追踪;1表示拒绝被追踪 (Do Not Track)
  3. P3P: 响应首部,在线隐私偏好平台

第七章 确保Web安全的HTTPS

  1. 加密处理防窃听:
  • 通信加密: HTTP+SSL(TLS)=HTTPS
  • 内容加密: 客户端与服务器同时具备加解密,不好,内容仍有被篡改的风险.
  1. 防止篡改: MD5或SHA-1散列值校验,数字签名方法(PGP)
  2. HTTP+加密+认证+完整性保护=HTTPS
  3. HTTP | SMTP | Telnet

    ______________________

    SSL

    ______________________

    TCP

    ______________________

    IP
  4. HTTPS采用混合加密机制: 对称(效率高)+非对称(效率低)

第八章 确认访问用户身份的认证

1. HTTP使用的认证方式 /1.1

  1. BASIC认证(基本)
  2. DiGEST认证(摘要)
  3. SSL客户端认证
  4. Form Base认证(基于表单认证)

2. BASIC认证(基本) HTTP/1.0

步骤:

  1. 请求资源要BASIC认证,服务器返回401 Authorization Required 返回带WWW-Authenticate首部字段的响应; 该字段内包含认证的方式(BASIC)及Request-URI安全域字符串(realm)
  2. 客户端收到后,发用户ID+Password(Base64编码), 写入首部字段Authorization(代理就不用写首部直接发送)
  3. 接收到Authorization请求的服务器,验证,返回一条包含Request-URI资源的响应(不安全,无法实现认证注销操作)

3. DIGEST认证 质询/响应方式

步骤:

  1. 请求需认证资源,服务器返回401 Authorization Required, 返回带WWW-Authenticate首部字段的响应(包含质问响应方式认证所需的临时质询码(随机数,nonce现时),包含realm和nonce字段)
  2. 401后返回的响应包含DIGEST认证Authorization(必含username,realm,nonce,URI和response字段信息)
  3. 服务器接收到含Authorization首部信息请求认证后响应,安全性高于BASIC低于HTTPS

4. SSL客户端认证(客户端证书完成认证)

  1. 采用双因素认证: 证书认证, 表单认证(Session管理; Cookie应用 -> Cookie管理session -> 状态管理),但是有费用问题
  2. 为减跨站脚本攻击(XSS)造成的损失,建议事先在Cookie内加入httponly属性,服务器保存用户提交的密码等登录信息无标准化,一般通过给密码加盐,再使用hash,禁止明文密码保存

你可能感兴趣的:(图解HTTP(2))