首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Heroku上添加带有Rack::Deflator的GZIP会导致“客户端请求中断”错误

在Heroku上添加带有Rack::Deflator的GZIP可能会导致“客户端请求中断”错误。Rack::Deflator是一个Rack中间件,用于在Web应用程序中启用GZIP压缩。GZIP压缩可以显著减小传输的数据量,提高网站的加载速度。

然而,在Heroku上使用Rack::Deflator时,可能会遇到“客户端请求中断”错误。这个错误通常是由于Heroku的请求超时机制引起的。当启用GZIP压缩时,服务器需要在压缩整个响应内容之后才能发送响应给客户端,这可能会导致请求超时。

为了解决这个问题,可以尝试以下几种方法:

  1. 增加Heroku的请求超时时间:可以通过在Heroku的配置文件中增加timeout参数来增加请求超时时间。例如,可以将timeout设置为60秒:timeout 60。这样可以给服务器足够的时间来完成GZIP压缩并发送响应。
  2. 使用较小的压缩块:可以尝试减小GZIP压缩块的大小,以减少压缩所需的时间。可以通过在Rack::Deflator中设置chunk_size参数来实现。例如,可以将chunk_size设置为4096字节:use Rack::Deflator, chunk_size: 4096
  3. 部分压缩:可以尝试只对响应的一部分内容进行压缩,而不是对整个响应进行压缩。这可以通过在Rack::Deflator中设置condition参数来实现。例如,可以只对响应内容大于一定大小的请求进行压缩:use Rack::Deflator, condition: ->(env, status, headers, body) { body.size > 1024 }

以上是解决在Heroku上添加带有Rack::Deflator的GZIP导致“客户端请求中断”错误的几种方法。希望对您有帮助。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云移动开发(移动推送、移动分析等):https://cloud.tencent.com/product/mobile
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

HTTP API 设计指南HTTP API 设计指南

依赖于重定向客户端访问不仅导致双倍服务器负载,还会使 TLS 加密失去意义,因为首次非 TLS 调用时,敏感信息就已经暴露出去了。...通过客户端、服务器或任何支持服务记录该值,它能为我们提供一种机制来跟踪、诊断和调试请求。...包含一个机器可读错误 id,一个人类可读错误信息(message),根据情况可以添加一个url来告诉客户端关于这个错误更多信息以及如何去解决它,例如: HTTP/1.1 429 Too Many...为每一个带有RateLimit-Remaining响应头请求,返回预留请求tokens。...保证响应JSON最小化 请求中多余空格增加响应大小,而且现在很多HTTP客户端都会自己输出可读格式("prettify")JSON。

2.3K31

ButterCMS架构:完成数百万次调用关键任务API

如果API宕机了,我们客户网站就会和我们一起停机。 这是我们早期学到严重一课。不可靠服务器托管导致频繁间歇性中断和性能下降,这会使客户很失望。...这意味着即使数据库或服务器经历了间歇性中断,我们API仍然可用。我们不希望这样,但理论,服务器可以完全关闭几个小时,而客户网站像Fastly一样长时间保持在线。...第一个事件中,由于DNS服务商把我们账户意外“删除”,而导致一个中断事件,该事件经过了近6个小时才完全恢复。...对于应用服务器,则使用Heroku监视和自动扩展工具,来确保流量性能不会从峰值降低(如果 Fastly停机了,需要将所有的请求都直接路由到服务器)。...通过谷歌云运行一个服务器和数据库实例作为快速失效备援,来防止极小可能出现Heroku或者AWS(Heroku运行其中断

1.6K60

nginx-1:生产级别nginx高性能配置

#若接收到来自客户端其它请求,服务端利用这个未被关闭连接,而不需要再建立一个连接。 #KeepAlive一段时间内保持打开状态,它们会在这段时间内占用资源。...client_body_buffer_size 128k; #相关场景&问题: # 服务器有时出现很多499错误,出现499错误原因是客户端关闭了连接;...# 即如果此项设置为on开启,则服务器忽略客户端中断,一直等着代理服务执行返回。并且如果执行没有发生错误,记录日志是200日志。如果超时则会记录504。...# 如果设置为off,则客户端中断后服务器端nginx立即记录499日志,但要注意,此时代理端PHP/Java程序依然继续执行。...所以如果不想看到499报错,可以修改配置:proxy_ignore_client_abort on ; #也就是说,499错误并不是一个问题,如果出现了大量499的话,需要考虑为什么发生了这么多客户端中断问题

2.7K50

部署一个Sinatra应用程序到Heroku

如果你刚刚开始入门Sinatra,你可能觉得这个帖子有用。如果你已学过来自PHPSinatra,我写了一篇 Rubysource 文章,向你展示如何用Sinatra创建一个博客应用程序。...我将在稍后帖子中讨论这些。记下生产和发展群组。Heroku并不支持Sqlite。 Sinatra是一个Rack应用程序,但Heroku与这些没有任何障碍。...我们只需要一个文件来解释我们如何让我们应用程序运行: config.ru你需要以下内容: require '....可以在这里学习如何做到这一点 当在命令行中时,需要将您密钥连接到Heroku,以便在Heroku计算机之间进行安全通信: heroku keys:add 系统会要求您添加您创建Heroku帐户凭据...创建Heroku应用程序 回到命令行heroku create nameofapp nameofapp位置是根据你想要你应用程序取什么名决定,铭记Heroku将用这样网址创建你应用程序

2.6K60

Heroku中部署一个Sinatra应用程序

Sinatra入门 如果你刚刚开始接触Sinatra,这个帖子或许帮到你。...首先你需要在Heroku上有一个账户(注册是免费) 如果你对你程序本地环境运行情况感到满意(即你已经完成了应用程序开发,并且其本地运行没有问题),接下来要做是确保你有以下文件: Gemfile...Sinatra-index.PNG 需要注意是,Sinatra是一个Rack应用程序,而Heroku与此并无关系。...通过下面的操作将你密钥连接到Heroku,这会用于与你Heroku计算机之间进行安全通信: heroku keys:add 系统会要求你添加你所创建Heroku帐户凭据。...创建Heroku应用程序 回到命令行输入以下指令: heroku create nameofapp 在此我们用nameofapp来指代你应用名字,那么Heroku会为你应用将创建这样网址:nameofapp.herokuapp.com

2.6K60

Amazon Dynamo系统架构

由于Dynamo中可能出现同一个数据被多个节点同时更新情况,且无法保证数据副本更新顺序,这有可能导致数据冲突。 数据冲突问题如何解决?...可能某些物理机一个机房或者机架甚至就是一个机器几个虚拟机,那么这些机器之间通信等速度肯定会更快,这些机器可以组成一个集群,就叫一个rack。...dynomite拓扑结构中,每个rack都是一个完整集群,每个rack都拥有完整数据,多个rack间相互备份,这就达到了高可用。...每个rack存在节点都是可以不同,不需要对应,因为每个racktokens都是重新计算。...当客户端请求到达任意一个dynomite代理后,dynomite根据tokens计算出这个key是否属于自己管理节点,如果不是的话,会把请求发送到对应dynomite代理上。

1.4K21

day07.HDFS学习【大数据教程】

datanode服务器 4、namenode返回3个datanode服务器ABC 5、client请求3台dn中一台A上传数据(本质是一个RPC调用,建立pipeline),A收到请求继续调用B...马上自动开始数据块容错拷贝;当该节点重新添加到集群中时,由于该节点数据其实并没有损坏,所以造成了HDFS某些block备份数超过了设定备份数。...就进入安全模式状态,不再接受客户端数据更新请求 正常情况下,namenode也有可能进入安全模式: 集群启动时(namenode启动时)必定会进入安全模式,然后过一段时间自动退出安全模式(原因是...no server suitable for synchronization found 错误信息有以下2个: 错误1.Server dropped: Strata too high ntp客户端运行...所以,通常情况下,hadoop集群HDFS选机器时候,是随机选择,也就是说,很有可能在写数据时,hadoop将第一块数据block1写到了rack1,然后随机选择下将block2写入到了rack2

1.3K40

【Nginx24】Nginx学习:压缩模块Gzip

一般来说,我们会在一个服务器直接在 http 模块中配置全部站点是否都开启 Gzip ,当然,也有可能针对某个站点单独在对应 server 中开启。...假设有两个客户,一个使用旧浏览器不支持压缩,一个使用新浏览器支持压缩,如果他们都请求同一个网页,那么取决于谁先请求,压缩或非压缩版本便存储CDN。...这样问题就出现了,旧浏览器请求常规网页但获得缓存压缩版本,而新浏览器获得缓存非压缩版本但尝试去“解压”它。无论哪种方式都是坏消息。...其实现在这个模块已经没啥用了,毕竟基本所有的客户端或浏览器都是支持 Gzip 解压。但是,不排除有特殊需求吧。...它是通过添加 --with-http_gunzip_module 参数 configure 时来进行编译安装,只有两个配置项。

76021

我接手了一个“垃圾”系统,全栈优化后将性能提升了350倍

Heroku 在技术上将整体请求响应时间设定为 30 秒超时,实际,我们希望大多数面向客户页面请求 3 秒内完成。我个人认为,所有响应时间超过 8 秒情况都可以认为是中断。...人不多时候,这是可以接受,但是捐赠日,它将针每个请求执行重新计算。 ? 缓存失败导致内部服务器错误响应增加了 500 个,原因是超时。...业务增加意味着以前可接受内存分配突然达到了极限。这意味着,某一时刻,我们突然发现,向缓存中添加条目时出现了问题,而这会导致整个系统崩溃。 我们确定了其中一个原因——缓存服务器没有正确配置。...我们键失效处理被设置为永不失效,并在内存耗尽时抛出一个错误。这就是导致我们负载增加情况下达到内存限制原因。...解决方案看起来很简单——我们 Redis 缓存服务器上将键失效设置设定为 volatile-lru。理论讲,这可以确保只有带有 TTL 键才可能导致问题。

69930

保姆级Kafka 降本实用指南

虽然有更多要素是难以衡量,例如员工工资、停机时间,甚至处理中断(也就是将系统维持可用状态所必须完成工作),但上面这三点是我们使用云提供商时花钱购买主要要素。 2我们可以做什么?...2015 年 KIP-36 合并之后,机架感知就可以启用了,并且只需配置文件中添加一行代码就可以轻松完成: broker.rack= # For example...不平衡集群可能损害集群性能,导致某些 borker 比其他 broker 负载更大,让响应延迟更高,并且某些情况下导致这些 broker 资源饱和,从而导致不必要扩容。...消息转换带来处理开销,因为 Kafka 客户端和 broker 之间消息需要转换才能被双方理解,从而导致更高 CPU 使用率。...人们很可能添加更多 broker 或磁盘,以便根据客户需求集群保存更多数据。

43130

Nginx高性能Web服务器详解

;:根据响应页MIME类型选择性地开启Gzip 9.gzip_vary on | off;:设置使用Gzip功能时是否发送带有“Vary: Accept-Encoding”头域响应头部 B.由ngx_http_gzip_static_module...on | off;:设置客户端中断网络请求时,Nginx服务器是否中断对被代理服务器请求,默认为off proxy_ignore_headers filed ......;:如果Nginx访问被代理服务器过程中出现被代理服务器无法访问或者访问错误等现象时,Nginx服务器可以使用历史缓存响应客户端请求 proxy_cache_valid [code ...] time...X-Auth-Key "secret_string":Nginx服务器发起认证请求时,向请求添加指定头域 14.auth_http_timeout time;:配置Nginx服务器向HTTP认证服务器发起认证请求后等待响应超时时间...on | off;:用于配置了后端代理服务器(组)情况,用来配置是否将后端服务器邮件服务认证过程中产生错误信息发送给客户端 十、Nginx源码结构 1.Nginx源码模块:公共功能、配置解析、

2.7K20

Spark源码系列(七)Spark on yarn具体实现

Client向ResourceManager提交Container请求,分三种类型:优先选择机器、同一个rack机器、任意机器。...= null) { // 还是不够,只能放到别的rack机器运行了 offRackContainers.put(candidateHost, remainingContainers...2、ApplicationMaster就像项目经理一样负责整个项目所需要工作,包括请求资源,分配资源,启动Driver和Executor,Executor启动失败错误处理。...6、Executor错误处理是ApplicationMasterlaunchReporterThread方法里面,它启动线程除了报告运行状态,还会监控Executor运行,一旦发现有丢失Executor...7、yarn目录下看到名称里面带有YarnClient是属于yarn-client模式类,实现和前面的也差不多。

1.7K50

CDN故障案例content-encoding深入分析

http2 over TLS要求加密套件cipher中算法强度更高,导致客户端,服务器协商失败,导致http2访问异常), 先让同事禁止掉cloudfront CDNhttp2, 禁止后,再次使用...便将这个配置国内公有云CDN/公有桶配置一次。chrome浏览器访问报出同样错误,虽然不知道2家cdn底层具体实现, 从这2个现象看,cdn行为是一致。...直接跳过gzip_module处理, 也就是说源站自定义header: Content-Encoding: gzip 导致cdn节点不进行压缩,直接跳过return ngx_http_next_header_filter...到此,自定义header "Content-Encoding: gzip" 导致chrome报错原因算是定位到了:由于源站没有开启gzip, cdn回源时候返回是非压缩数据,但是添加了自定义了...1.2 如果客户端是第一次发起压缩请求,那么cdn透传请求头到源站,以压缩请求发送到源站,源站返回压缩内容给cdn节点, cdn节点缓存压缩内容,接着客户端第二次发起带压缩请求,由于cdn没有开启

2.2K20

总结Web应用中常用各种Cache

Modified 响应头(http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5 ),直接用客户端缓存,而无需服务器端再生成一次内容...但是这样遇到一个问题,假设我们网站导航有用户信息,一个用户未登陆专题访问了一下,然后登陆以后再访问,会发现页面上显示还是未登陆状态。...源代码,将gzip off掉,将压缩用Rack中间件来处理: config.middleware.use Rack::Deflater 除了controller里面指定fresh_when以外,rails...框架默认使用Rack::ETag middleware,它会自动给无etagresponse加上etag,但是和fresh_when相比,自动etag能够节省只是客户端时间,服务器端还是一样执行所有的代码...Nginx缓存 有一些资源可能会被调用很多,又无关用户状态,并且很少改变,比如新闻app列表api,购物网站上ajax请求分类菜单,可以考虑用Nginx来做缓存。

4.7K40

GraphQL 初体验,Node.js 构建 GraphQL API 指南

传统基于 REST API 方法中,客户端发出请求,而服务端决定响应。 但是 GraphQL 中,客户端可以精确地确定其从服务器获取数据。...只需要 Schema 表达几行清晰代码,就可以客户端和服务端之间建立强类型契约,这样可以防止你服务接受虚假数据,并向请求着清晰地表明错误。...缓存 基于 REST API 缓存时不需要过度关注,因为它们可以构建在 Web 其他部分使用现有 HTTP 头策略。GraphQL 不具有这些缓存机制,这会对重复请求造成不必要处理负担。...,只是为了检索两个不同列,导致两个数据库查询来获取 ID 为 1 User。...例如,无论成功与否,GraphQL 仅制定一个状态码 200.在这个响应中会返回一个特殊错误键,供客户端解析和识别出错,因此,错误处理可能会有些棘手。

8.3K40

【Nginx学习笔记】-初识Nginx

,后天添加 代码模块化 - 更适合二次开发,如阿里巴巴Tengine CPU亲和 把CPU核心和Nginx工作进程绑定,把每个worker进程固定在一个CPU执行,减少切换CPUcache miss...Nginx能够根据应用服务器处理页面返回状态码、超时信息等检测服务器是否出现故障,并及时返回错误请求重新提交到其它节点 采用Master/worker多进程工作模式 Nginx 基本功能...restart,重启,重启nginx服务。这个重启造成服务一瞬间中断,当然如果配置文件出错会导致服务启动失败,那就是更长时间服务中断了。...由fork创建新进程被称为子进程 )出多个子进程出来,然后子进程竞争accept新连接。 此时,客户端就可以向Nginx发起连接了。...接着,设置读写事件处理函数并添加读写事件来与客户端进行数据交换。最后,Nginx或客户端来主动关掉连接 Nginx如何做到高并发下高效处理?

51130

Dynomite 分布式存储引擎 之 DynoJedisClient(2)

Dynomite 之中,错误主要有3种: 无效请求错误直接返回应用上层,因为驱动程序无法知道如何处理此类请求; 服务器错误:驱动程序可以根据负载平衡策略尝试下一个节点; 网络超时:如果请求被标记为幂等...默认情况下,请求不被认为是幂等,因此可能情况下将请求尽量标记是一个好习惯。 对于幂等请求,如果在一定延迟内没有来自第一节点响应,则驱动程序可以将请求发送到第二节点。...但是 由于网络条件临时更改也会使节点显示为脱机,因此驱动程序还提供了一种 retry策略 来重试因网络相关错误而失败查询。这消除了客户端代码中编写重试逻辑需要。...如果客户端要在同一节点引导其所有查询,则会在集群产生不平衡负载,尤其是在其他客户端执行相同操作情况下。...驱动程序更喜欢与本地节点交互,并且与远程节点保持与本地节点更多连接。 HostSelectionStrategy 构建时群集设置。

93210
领券