zoukankan      html  css  js  c++  java
  • HTTP报文学习

    HTTP报文用于HTTP协议的信息交互,分为请求报文和响应报文。报文由首部和主体两部分组成,中间使用空行(CR+LF)分隔

    1. 报文结构

    1. 报文由首部、空行和实体组成;
    2. 报文中首先是请求行或者状态行,然后是各种首部字段,再就是空行和实体;
    3. 首部包含请求和响应的各种条件和属性,主要分为请求首部、响应首部、通用首部、实体首部和其他,cookie就在未定义的其他首部中。

    2. 报文信息

    1. 编码提升传送速率:
    • 由于需要进行编码,会消耗更多的CPU资源;
    • 报文主体和实体主题在编码后不一致,编码后实体主体发生变化;
    • 对实体主体进行内容编码后,可以通过Content-Encoding查看编码类型;
    • 实体主体编码后可以进行分块传输,客户端接收后进行解析,Transfer-Encoding:chunked。
    1. 可以发送多部分实体对象集合,通过首部Content-Type查看信息;
    2. 可以获取资源的内容范围,通过content-range首部;
    3. 服务端和客户端可以通过ACCEPT等首部进行协商,确定返回的内容。

    3. 通用首部字段

    1. Cache-Control:控制缓存的行为
    • 浏览器缓存会使用该字段;
    • no-cache: 强制向原服务器再次验证;
    • max-age: 必须,响应的最大值;
    1. Connection:逐跳首部、连接的管理
    • 管理持久连接;
    • 控制不再转发给代理的首部字段;
    1. Date:创建报文的日期时间
    2. Program:报文指令
    3. Trailer:报文末端的首部一览
    • 报文实体后面存在的首部字段,分块传输使用;
    1. Transfer-Encoding:指定报文主体的传输编码方式
    • HTTP/1.1中仅对分块传输有效;
    1. Upgrade:升级为其他协议
    2. Via:代理服务器的相关信息
    3. Warning:错误通知

    4. 请求首部字段

    1. Accept:用户代理可处理的媒体类型
    • text/html,application/json
    • 可以使用q指定优先级,1为最大值,如text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8;
    1. Accept-Charset:优先的字符集
    2. Accept-Encoding:优先的内容编码
    • compress、gzip等;
    1. Accept-Language:优先的语言(自然语言)
    • zh-CN,zh;q=0.8,en;q=0.6,la;q=0.4;
    1. Authorization:Web认证信息
    2. Expect:期待服务器的特定行为
    3. From:用户的电子邮箱地址
    4. Host:请求资源所在的服务器
    5. If-Match:比较实体标记(ETag)
    • 与特定资源关联;
    1. If-Modified-Since:比较资源的更新时间
    2. If-None-Match:比较实体标记(与If-Match相反)
    3. If-Range:资源未更新时发送实体Byte的范围请求
    4. If-Unmodified-Since:比较资源的更新时间(与If-Modified-Since相反)
    5. Max-Forwards:最大传输逐跳数
    6. Proxy-Authorization:代理服务器要求客户端的认证信息
    7. Range:实体的字节范围请求
    8. Referer:对请求中的URI的原始获取方
    9. TE:传输编码的优先级
    10. User-Agent:HTTP客户端程序的信息
    • 传递浏览器种类;

    5. 响应首部字段

    1. Accept-Ranges:是否接受字节范围请求
    2. Age:推算资源创建经过时间
    3. ETag:资源的匹配信息
    • 每分资源都有对应的ETag值;
    1. Location:令客户端重定向至指定URI
    2. Proxy-Authenticate:代理服务器对客户端的认证信息
    3. Retry-After:对再次发起请求的时机要求
    4. Server:HTTP服务器的安装信息
    5. Vary:代理服务器缓存的管理信息
    6. WWW-Authenticate:服务器对客户端的认证信息

    6. 实体首部字段

    1. Allow: 资源可支持的HTTP方法
    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: 资源的最后修改日期时间

    7. 其他首部字段

    1. 和cookie相关的首部:
    • set-cookie:响应首部,管理使用的cookie,键值对;
    • httponly: js无法获取cookie,防止跨站脚本攻击XSS;
    • cookie:请求首部,服务器接收;
    1. X-Frame-Options:响应首部,可以控制网站内容在其他Web网站的Frame标签内的显示问题,防止点击劫持;
    2. X-XSS-Protection:XSS防护0/1。
  • 相关阅读:
    文档撰写思路与排版(hadoop)
    ULUA的简洁用法(二)
    开源cocos2d-x编辑器 qco-editor
    u3d tolua + ZeroBraneStudio远程调试
    ULUA的简洁用法
    OpenGL顶点数据传输速度优化
    在do while语句中使用continue的误解
    cocos2d-x 3D shader的纹理坐标是上下颠倒的
    使用ndk-gdb调试android native程序
    OpenSSL中AES加密的用法
  • 原文地址:https://www.cnblogs.com/qiaojushuang/p/7850610.html
Copyright © 2011-2022 走看看