| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 图解HTTP学习笔记——第六章 -> 正文阅读 |
|
[网络协议]图解HTTP学习笔记——第六章 |
声明: 本博客是本人在学习《图解 HTTP》后整理的笔记,旨在方便复习和回顾,并非用作商业用途。 如有侵权请告知,马上删除。 HTTP 首部6.1 HTTP 报文首部HTTP 协议的请求和响应报文中必定包含 HTTP 首部。 首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。 HTTP 请求报文由方法、 URI、 HTTP 版本、 HTTP 首部字段等部分构成。 HTTP 响应报文由 HTTP 版本、 状态码(数字和原因短语) 、HTTP 首部字段 3 部分构成。 6.2 HTTP 首部字段6.2.1 HTTP 首部字段传递重要信息HTTP 首部字段是构成 HTTP 报文的要素之一。 在客户端与服务器之间以 HTTP 协议进行通信的过程中, 无论是请求还是响应都会使用首部字段。使用首部字段是为了给浏览器和服务器提供报文主体大小、 所使用的语言、 认证信息等内容。 6.2.2 HTTP 首部字段结构HTTP 首部字段是由首部字段名和字段值构成的, 中间用冒号“:” 分隔(首部字段名: 字段值 另外, 字段值对应单个 HTTP 首部字段可以有多个值。当 HTTP 报文首部中出现了两个或两个以上具有相同首部字段名时,有些浏览器会优先处理第一次出现的首部字段, 而有些则会优先处理最后出现的首部字段。 6.2.3 4 种 HTTP 首部字段类型通用首部字段( General Header Fields):请求报文和响应报文两方都会使用的首部。 请求首部字段( Request Header Fields):从客户端向服务器端发送请求报文时使用的首部。 补充了请求的附加内容、 客户端信息、 响应内容相关优先级等信息。 响应首部字段( Response Header Fields):从服务器端向客户端返回响应报文时使用的首部。 补充了响应的附加内容, 也会要求客户端附加额外的内容信息。 实体首部字段( Entity Header Fields):针对请求报文和响应报文的实体部分使用的首部。 补充了资源内容更新时间等与实体有关的信息。 6.2.4 HTTP/1.1 首部字段一览通用首部字段表
请求首部字段表
响应首部字段表
6.2.5 非 HTTP/1.1 首部字段在 HTTP 协议通信交互中使用到的首部字段不限于 RFC2616 中定义的 47 种首部字段,?还有 Cookie、 Set-Cookie 和 Content-Disposition等在其他 RFC 中定义的首部字段。 6.2.6 End-to-end 首部和 Hop-by-hop 首部HTTP 首部字段将定义成缓存代理和非缓存代理的行为, 分成 2 种类型。 端到端首部( End-to-end Header):分在此类别中的首部会转发给请求 / 响应对应的最终接收目标, 且必须保存在由缓存生成的响应中, 另外规定它必须被转发。 逐跳首部( Hop-by-hop Header):分在此类别中的首部只对单次转发有效, 会因通过缓存或代理而不再转发。 HTTP/1.1 和之后版本中, 如果要使用 hop-by-hop 首部, 需提供 Connection 首部字段。 例如Connection、Keep-Alive、Proxy-Authenticate、Proxy-Authorization、Trailer、TE、Transfer-Encoding、Upgrade首部字段都为逐跳首部字段,其余为端到端首部字段。 6.3 HTTP/1.1 通用首部字段6.3.1 Cache-Control通过指定首部字段 Cache-Control 的指令, 就能操作缓存的工作机制。 指令的参数是可选的, 多个指令之间通过“,”分隔。 首部字段 CacheControl 的指令可用于请求及响应时。(Cache-Control: private, max-age=0, no-cache) 缓存请求指令表
表示是否能缓存的指令public 指令:明确表明其他用户也可利用缓存。 private 指令:响应只以特定的用户作为对象,对于其他用户发送过来的请求, 代理服务器则不会返回缓存。 no-cache 指令:防止从缓存中返回过期的资源。客户端发送的请求中如果包含 no-cache 指令,则表示客户端将不会接收缓存过的响应。 于是, “中间”的缓存服务器必须把客户端请求转发给源服务器。如果服务器返回的响应中包含 no-cache 指令, 那么缓存服务器不能对资源进行缓存。 源服务器以后也将不再对缓存服务器请求中提出的资源有效性进行确认, 且禁止其对响应资源进行缓存操作。若报文首部字段 Cache-Control 中对 no-cache字段名具体指定参数值, 那么客户端在接收到这个被指定参数值的首部字段对应的响应报文后, 就不能使用缓存。 no-store 指令:暗示请求(和对应的响应) 或响应中包含机密信息,规定缓存不能在本地存储请求或响应的任一部分。 指定缓存期限和认证的指令max-age 指令:当客户端发送的请求中包含 max-age 指令时, 如果判定缓存资源的缓存时间数值比指定时间的数值更小, 那么客户端就接收缓存的资源。另外, 当指定 max-age 值为 0, 那么缓存服务器通常需要将请求转发给源服务器。当服务器返回的响应中包含 max-age 指令时, 缓存服务器将不对资源的有效性再作确认, 而 max-age 数值代表资源保存为缓存的最长时间。应用 HTTP/1.1 版本的缓存服务器遇到同时存在 Expires 首部字段的情况时, 会优先处理 max-age 指令, 而忽略掉 Expires 首部字段。HTTP/1.0 版本则相反。 s-maxage 指令:功能和 max-age 指令的相同,但?smaxage 指令只适用于供多位用户使用的公共缓存服务器。 min-fresh 指令:要求缓存服务器返回至少还未过指定时间的缓存资源。比如, 当指定 min-fresh 为 60 秒后, 过了 60 秒的资源都无法作为响应返回了。 max-stale 指令:指示缓存资源, 即使过期也照常接收。如果指令未指定参数值, 那么无论经过多久, 客户端都会接收响应;如果指令中指定了具体数值, 那么即使过期, 只要仍处于 max-stale指定的时间内, 仍旧会被客户端接收。 only-if-cached 指令:表示客户端仅在缓存服务器本地缓存目标资源的情况下才会要求其返回。若发生请求缓存服务器的本地缓存无响应, 则返回状态码 504 Gateway Timeout。 must-revalidate 指令:代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效。若代理无法连通源服务器再次获取有效资源的话, 缓存必须给客户端一条 504(Gateway Timeout) 状态码。且使用 must-revalidate 指令会忽略请求的 max-stale 指令。 proxy-revalidate 指令:要求所有的缓存服务器在接收到客户端带有该指令的请求返回响应之前, 必须再次验证缓存的有效性。 no-transform 指令:规定无论是在请求还是响应中, 缓存都不能改变实体主体的媒体类型。 Cache-Control 扩展(cache-extension token):可以扩展 Cache-Control 首部字段内的指令。 6.3.2 ConnectionConnection 首部字段作用如下。 控制不再转发给代理的首部字段:在客户端发送请求和服务器返回响应内, 使用 Connection 首部字段, 可控制不再转发给代理的首部字段(即 Hop-by-hop 首部) 。 管理持久连接:HTTP/1.1 版本的默认连接都是持久连接。 为此, 客户端会在持久连接上连续发送请求。 当服务器端想明确断开连接时, 则指定Connection 首部字段的值为 Close。HTTP/1.1 之前的 HTTP 版本的默认连接都是非持久连接。 为此, 如果想在旧版本的 HTTP 协议上维持持续连接, 则需要指定Connection 首部字段的值为 Keep-Alive。 6.3.3 Date首部字段 Date 表明创建 HTTP 报文的日期和时间。 6.3.4 PragmaPragma 是 HTTP/1.1 之前版本的历史遗留字段, 仅作为与 HTTP/1.0 的向后兼容而定义。 该首部字段属于通用首部字段, 但只用在客户端发送的请求中。 客户端会要求所有的中间服务器不返回缓存的资源。 6.3.5 Trailer首部字段 Trailer 会事先说明在报文主体后记录了哪些首部字段。 6.3.6 Transfer-Encoding首部字段 Transfer-Encoding 规定了传输报文主体时采用的编码方式。 6.3.7 Upgrade首部字段 Upgrade 用于检测 HTTP 协议及其他协议是否可使用更高的版本进行通信, 其参数值可以用来指定一个完全不同的通信协议。使用首部字段 Upgrade 时, 还需额外指定Connection:Upgrade。 对于附有首部字段 Upgrade 的请求, 服务器可用 101 SwitchingProtocols 状态码作为响应返回。 6.3.8 Via使用首部字段 Via 是为了追踪客户端与服务器之间的请求和响应报文的传输路径。报文经过代理或网关时, 会先在首部字段 Via 中附加该服务器的信息, 然后再进行转发。Via 首部是为了追踪传输路径, 所以经常会和 TRACE 方法一起使用。 6.3.9 WarningHTTP/1.1 的 Warning 首部是从 HTTP/1.0 的响应首部(Retry-After) 演变过来的。 该首部通常会告知用户一些与缓存相关的问题的警告。 HTTP/1.1 警告码表
|
首部字段名 | 说明 | 首部类型 |
Set-Cookie | 开始状态管理所使用的Cookie信息 | 响应首部字段 |
Cookie | 服务器接收到的Cookie信息 | 请求首部字段 |
Set-Cookie 字段的属性
属性 | 说明 |
NAME=VALUE | 赋予 Cookie 的名称和其值(必需项) |
expires=DATE | Cookie 的有效期(若不明确指定则默认为浏览器关闭前为止) |
path=PATH | 将服务器上的文件目录作为Cookie的适用对象(若不指定则默 认为文档所在的文件目录) |
domain=域名 | 作为 Cookie 适用对象的域名 (若不指定则默认为创建 Cookie 的服务器的域名) |
Secure | 仅在 HTTPS 安全通信时才会发送 Cookie |
HttpOnly | 加以限制, 使 Cookie 不能被 JavaScript 脚本访问 |
expires 属性:Cookie 的 expires 属性指定浏览器可发送 Cookie 的有效期。
path 属性:Cookie 的 path 属性可用于限制指定 Cookie 的发送范围的文件目录。
domain 属性:通过 Cookie 的 domain 属性指定的域名可做到与结尾匹配一致。?
secure 属性:Cookie 的 secure 属性用于限制 Web 页面仅在 HTTPS 安全连接时, 才可以发送 Cookie。
HttpOnly 属性:Cookie 的 HttpOnly 属性是 Cookie 的扩展功能, 它使 JavaScript 脚本无法获得 Cookie。
首部字段 Cookie 会告知服务器, 当客户端想获得 HTTP 状态管理支持时, 就会在请求中包含从服务器接收到的 Cookie。 接收到多个 Cookie 时, 同样可以以多个 Cookie 形式发送。
首部字段 X-Frame-Options 属于 HTTP 响应首部, 用于控制网站内容在其他 Web 网站的 Frame 标签内的显示问题。 其主要目的是为了防止点击劫持(clickjacking) 攻击。
首部字段 X-Frame-Options 有以下两个可指定的字段值。
DENY : 拒绝
SAMEORIGIN : 仅同源域名下的页面(Top-level-browsingcontext) 匹配时许可。?
首部字段 X-XSS-Protection 属于 HTTP 响应首部, 它是针对跨站脚本攻击(XSS) 的一种对策, 用于控制浏览器 XSS 防护机制的开关。
首部字段 X-XSS-Protection 可指定的字段值如下。
0 : 将 XSS 过滤设置成无效状态
1 : 将 XSS 过滤设置成有效状态
首部字段 DNT 属于 HTTP 请求首部, 其中 DNT 是 Do Not Track 的简称, 意为拒绝个人信息被收集, 是表示拒绝被精准广告追踪的一种方法。
首部字段 DNT 可指定的字段值如下。
0 : 同意被追踪
1 : 拒绝被追踪
首部字段 P3P 属于 HTTP 相应首部, 通过利用 P3P(The Platform forPrivacy Preferences, 在线隐私偏好平台) 技术, 可以让 Web 网站上的个人隐私变成一种仅供程序可理解的形式, 以达到保护用户隐私的目的。
要进行 P3P 的设定, 需按以下操作步骤进行。
步骤 1: 创建 P3P 隐私
步骤 2: 创建 P3P 隐私对照文件后, 保存命名在 /w3c/p3p.xml
步骤 3: 从 P3P 隐私中新建 Compact policies 后, 输出到 HTTP 响应中
?
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 10:35:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |