图解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,禁止明文密码保存
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容