内容编码需要注意的事项:gzip

2024-03-06

我创建了一个托管在 S3 存储桶上的静态网站。我的资源文件(css 和 js 文件)已使用 gzip 缩小和压缩。文件名本身是file_gz.js or file_gz.css并交付时带有Content-Encoding: gzip header.

到目前为止,我已经在各种浏览器上测试了该网站,并且运行良好。资源以压缩版本的形式交付,页面看起来没有任何不同。

我看到的唯一问题是,由于这是一个 S3 存储桶,因此当客户端(浏览器)不支持 gzip 编码时没有故障保护。相反,HTTP 请求将失败,并且不会对页面应用样式或 javascript 增强功能。

有谁知道设置有什么问题Content-Encoding: gzip?所有浏览器都正确支持吗?我是否需要附加任何其他标头才能使其正常工作?


现代浏览器几乎全面支持编码内容。但是,假设所有用户代理都会这样做并不安全。您的实现的问题在于它完全忽略了 HTTP 的内置方法来避免这个问题:内容协商。您有几个选择:

  1. 你可以继续对问题视而不见,并希望every访问您的内容的用户代理将能够解码您的 gzip 资源。不幸的是,几乎可以肯定情况并非如此。浏览器并不是唯一的用户代理,“把头埋在沙子里”解决问题的方法很少是个好主意。

  2. 实施一个解决方案来协商是否使用 gzipped 响应Accept-Encoding标头。如果客户端根本没有指定此标头,或者指定了它但没有提及 gzip,则可以相当确定用户将无法解码 gzip 响应。在这些情况下,您需要发送未压缩的版本。

内容协商的来龙去脉超出了本答案的范围。您需要对如何解析Accept-Encodingheader 并协商响应的编码。通常,内容编码是通过使用第三方模块(例如 Apache 的 mod_deflate)来完成的。虽然我不熟悉 S3 在这方面的选项,但我怀疑您需要自己实施协商。

总之:发送编码内容而不首先与客户端清除它不是一个好主意。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内容编码需要注意的事项:gzip 的相关文章

  • 有没有办法强制浏览器刷新/下载图像?

    我遇到一个问题 用户报告他们的图像没有上传 而旧图像仍然存在 仔细检查后 新图像就在那里 它们只是与旧图像具有相同的名称 我在上传时所做的是出于搜索引擎优化的目的重命名图像 当他们删除图像时 旧索引变得可用并被重用 因此它具有相同的图像名称
  • 浏览器中的javascript:异步任务执行模型

    我正在尝试集中注意力并了解 javascript 异步在单线程浏览器环境中的工作原理 作为异步 我们可以同时处理计时器和 xhr 请求 现在假设我有类似下面的东西 function doStuff for var i 0 i lt 1000
  • 有没有更快的方法将多个文件从 s3 下载到本地文件夹?

    我正在尝试使用 jupyter Notebook 从 s3 存储桶下载 12 000 个文件 预计在 21 小时内完成下载 这是因为每个文件一次下载一个 我们可以并行进行多个下载 以便加快进程吗 目前 我正在使用以下代码下载所有文件 Get
  • HTTP请求压缩

    一般用例 想象一下一个正在上传大量 JSON 的客户端 内容类型应保留application json因为这描述了实际数据 Accept Encoding 和 Transfer Encoding 似乎是为了告诉服务器应该如何格式化响应 看起
  • 在 Ubuntu 12.04 上的 Apache 上配置 SVN 服务器

    我正在尝试通过 HTTP 访问现有的 Subversion 服务器 我的dav svn conf文件看起来像
  • 在 Java Servlet 应用程序中设置 HTTP 201 响应的 Location 标头的正确方法是什么

    考虑以下代码向客户端发送 HTTP 201 已创建 响应 String url app things id 42 example response setStatus HttpServletResponse SC CREATED respo
  • 您可以从 AuthorizeAttribute 返回 HTTP 响应而不引发异常吗?

    我在各种控制器上使用 AuthorizeAttribute 可能需要根据请求本身的某些属性返回 403 或 429 请求过多 我完全在自定义 OnAuthorization 实现中实现了它 然后在必要时抛出一个带有适当响应代码的新 Http
  • 在 Flex 中以 HTTP Post 方式上传任意数据

    我们目前有一个 Java 小程序 可以生成大量数据并将其上传到我们的服务器 我们拥有的上传方法之一是使用 HTTP POST 到我们的服务器 其内容只是原始数据 没有多部分编码或任何内容 我正在考虑实现一个具有相同功能的 Flex 应用程序
  • 有没有办法使用 JavaScript 发送 CoAP 命令?

    我只是想知道是否有一种方法可以在浏览器中发送 CoAP 查询 使用 JavaScript 但不能使用 node js Thanks 不幸的是 这不可能直接实现 出于安全原因 Web 浏览器不为 UDP 套接字提供任何 JavaScript
  • requestAnimationFrame 报告的帧速率有时高于显示器的刷新速率

    我使用以下内容来记录应用程序的帧速率 let lastCalledTime let fps let frame 0 let csv Frame Timestamp FPS const refreshLoop gt window reques
  • 外部依赖错误的 HTTP 状态代码

    当服务器与外部 API 通信出现问题时 返回的正确 HTTP 状态代码是什么 假设客户端向我的服务器 A 发送有效请求 然后 A 查询服务器 B 的 API 以便执行某些操作 然而 B 的 API 当前抛出 500 错误或因某种原因无法访问
  • 在处理程序之后访问 HTTP 请求上下文

    在我的日志记录中间件 链中的第一个 中 我需要访问一些在链下游的某些身份验证中间件中编写的上下文 并且仅在处理程序本身执行之后 旁注 需要首先调用日志记录中间件 因为我需要记录请求的持续时间 包括在中间件中花费的时间 此外 当权限不足时 身
  • 多部分 gzip 文件随机访问(Java 中)

    这可能属于 不太可行 或 不值得付出努力 的范畴 但事实就是如此 我正在尝试随机访问存储在多部分 gzip 文件中的记录 具体来说 我感兴趣的文件被压缩Heretrix http crawler archive org 弧形文件 如果您不熟
  • HTTP代理服务器

    我开始研究一个用 C 编写的非常基本的 HTTP 代理服务器 Edit 只是转发我的请求的东西 此时我很难理解如何继续 任何帮助都会有益的 看一眼micro proxy http acme com software micro proxy
  • 如何确保为客户端加载最新版本的 javascript 代码?

    我们的客户拥有数千名用户 他们都使用 Internet Explorer 和大量的 javascript 文件 这些文件可以增强他们对我们产品的用户体验 我遇到的问题是 每当我们更新这些脚本之一时无法知道客户端是否看到的是最新版本 我们要做
  • 当会话令牌无效时,我应该使用什么状态代码?

    创建 Web 服务 RESTful 时 当会话令牌无效时我应该使用什么状态代码 目前我公司的人给我发了一个404 未找到 但我认为这是不正确的 因为资源存在 也许我应该使用 401 Unauthorized 你怎么认为 您建议我在这种情况下
  • S3.getSignedUrl 接受多种内容类型

    我正在使用react s3 uploader节点包 它接受一个signingUrl用于获取用于将对象存储到 S3 中的signedUrl 目前 我已经配置了一个 lambda 函数 带有 API 网关端点 来生成此signedUrl 经过一
  • 从 HTTP 登录到 HTTPS

    我的网站默认使用 HTTP 我确实有一个启用 HTTPS 的证书 但只有其上的某些区域强制建立安全连接 登录是通过 Ajax 处理的 我想开始使用 SSL 即使请求来自 HTTP 我尝试强制请求的地址具有 HTTPS 并且它完美地回复 然而
  • 使用 Anypoint Studio (MULE) 在本地主机上找不到资源

    我尝试按照 MuleSoft 网站上建议的教程进行操作 我首先从这个例子开始
  • 将 Rack::Deflater 插入机架中的哪个位置?

    我目前有以下内容 use Rack Rewrite use Rack Cache verbose gt true metastore gt memcached localhost 11211 rack cache meta entityst

随机推荐

  • 根据其他常数定义一个常数

    很抱歉 如果这个问题看起来很幼稚 但我无法在任何地方找到明确的答案 我必须根据先前定义的常量定义一个常量 例如 define CONST A 2 define CONST B 3 define CONST C CONST A CONST B
  • PHP die() 清理所有页面

    一道php die函数问题 当我使用 die 时 它会清除所有页面元素 有什么方法可以回显错误消息而不清理所有页面 当我使用 die 停止代码并调出消息时 它看起来像是跳转到另一个页面 这是我的代码
  • 平凡的析构函数会导致别名吗

    C 11 3 8 1 声明 对于具有简单析构函数的对象 我可以通过分配其存储来结束其生命周期 我想知道微不足道的析构函数是否可以延长对象的生命周期 并通过 销毁一个我更早结束生命周期的对象 来导致别名问题 首先 我知道一些东西是安全且无别名
  • 在 VS Code 中调试时观察窗口或计算表达式?

    我很喜欢视觉工作室代码 https code visualstudio com 它是一个很棒的编辑器 但在调试 Node 应用程序时有一件事确实让我烦恼 我看不到任何类型的监视窗口或在调试时评估表达式的能力 这使得调试非常痛苦 我正在考虑回
  • 天蓝色通知中心 - 应用程序卸载

    我想使用 Azure 通知中心向跨 iOS Android 和 Windows Phone 运行我的应用程序的用户发送推送通知 我已经成功地完成了基础工作 但我不知道如何管理应用程序卸载故事 启动时 移动应用程序将调用我的 Identity
  • 是否可以手动销毁SurfaceView?

    即使调用活动的 onPause 我的 SurfaceView 也不会被破坏 我正在处理中的线程 public void surfaceCreated SurfaceHolder holder if mGameThread getState
  • R Shiny:通过循环添加到绘图

    我正在尝试创建一个使用 Shiny 显示采样方式动画的应用程序 与所示示例类似的内容here http onlinestatbook com stat sim sampling dist 这是一些最小的代码 仅显示我遇到问题的部分 这不是我
  • CakePHP 链接 css 文件和 javascript 文件

    如何将 css 文件和 javascript jquery 文件链接到控制器 视图 我正在使用 CakePHP 1 3 并在网上找到了以下代码 但我似乎无法弄清楚将其放在哪里 其次 将名为 css file 的 css 文件放在哪里 任何帮
  • OSX Play 框架自动重新加载

    我已经在互联网上搜索了几个小时 有很多 有用 的建议 但只会带来问题 这就是我 几乎一模一样 在docker容器中播放框架自动加载 https stackoverflow com questions 26022395 play framew
  • Ansible - 包含来自远程主机的 vars 文件

    我想包含远程主机上文件中的变量 而不是 Ansible 运行的控制机上的变量 例如我有一个文件 var database credentials yml 在我的网络服务器上 将该文件中的变量添加到主机变量以便我可以在模板中使用它们的最佳方法
  • 如何在 Eclipse 中通过远程 Java 应用程序调试来调试 Groovy 代码

    我正在努力调试一个构建为 Sling 捆绑包的应用程序 该应用程序几乎完全是 Groovy 代码 我有 Groovy Eclipse 插件 Eclipse 使用 Maven 正在构建 jar 并将其安装在 Sling 中 没有任何问题 但是
  • 将链接放入 console.log() 中。 Node.js

    我想做这样的事情 console log Your server available at a href localhost 3000 a 但不幸的是节点控制台无法识别 a 标签 有什么想法如何将链接放入节点控制台吗 您无法让终端解释 HT
  • -不再支持webkit-text-size-adjust,如何将font-size设置为小于12px

    当我将 chrome 更新为28 0 1500 11 开发 m 我找到 webkit text size adjust none 不再支持 我在这里找到了 changlisthttp trac webkit org changeset 14
  • 与 MySQL 电话号码数据库作斗争

    我的应用程序想要存储一个列表国际电话号码在 mysql 数据库中 然后应用程序需要查询数据库并搜索特定号码 听起来很简单 但实际上是一个很大的问题 因为用户可以以不同的格式搜索该号码 所以我们每次都必须对数据库进行完整扫描 例如 我们可能将
  • 开始浏览时发送的第一个数据包

    想象一下用户坐在一台连接以太网的电脑前 他打开了浏览器 他在地址栏中输入 www google com 并按回车键 现在告诉我以太网上出现的第一个数据包是什么 我在这里找到了这个问题 Socket编程和多线程面试题 https stacko
  • 如何使用 bash 从单独的文件中粘贴列?

    使用以下数据 cat date1 csv Bob 2013 06 03T17 18 07 James 2013 06 03T17 18 07 Kevin 2013 06 03T17 18 07 cat date2 csv 2012 12 0
  • haml 中的内联标签

    在html中 你可以做这样的事情 p Lorem ipsum dolor sit amet consectetur adipiscing elit Praesent eget aliquet odio Fusce id quam eu au
  • 删除 Azure Devops (VSTS) 中的 git fork 关系

    我通过分叉另一个项目创建了一个 Azure DevOps VSTS 项目 现在 每当我们克隆新项目时 您都会在控制台输出中获得对原始项目的引用 remote This repository is a fork Learn more at h
  • 我可以使用 SVN 或 Mercurial 仅提交部分代码吗?

    我通常使用 Tortoisesvn 但我一直在研究 Mercurial 因为它是一个分布式版本控制系统 在这两个系统中 我正在寻找一种工具 可以让我仅选择文件的一部分并提交它们 如果我现在想这样做 我必须复制到文件的临时版本 并仅保留我想要
  • 内容编码需要注意的事项:gzip

    我创建了一个托管在 S3 存储桶上的静态网站 我的资源文件 css 和 js 文件 已使用 gzip 缩小和压缩 文件名本身是file gz js or file gz css并交付时带有Content Encoding gzip head