You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sentry上报ActionDispatch::Http::MimeNegotiation::InvalidType错误如何修复

报错类型:ActionDispatch::Http::MimeNegotiation::InvalidType
报错提示:"{#context['com.opensymphony.xwork2.dispatcher.httpservletresponse'].addheader('o0scxl85'" is not a valid MIME type

问题根因

该错误由Rails框架的MIME协商模块触发,当请求头的Accept或Content-Type字段携带非法格式值时就会抛出。你看到的异常提示中的字符串是针对Struts2框架漏洞的攻击扫描payload,属于恶意爬虫/扫描器的非法请求,并非业务代码逻辑错误导致。

修复方案

1. 升级Rails到官方修复版本

Rails官方已经在后续版本内置了该类异常的兼容处理,不会直接抛出未捕获的异常上报到Sentry,升级到对应版本即可解决:

  • 6.1版本分支:升级到6.1.7及以上版本
  • 7.0版本分支:升级到7.0.4及以上版本
  • 所有7.1及更新的稳定版本均已修复该问题

2. 新增Rack中间件捕获异常(临时兼容方案)

如果暂时无法升级Rails版本,可以通过新增自定义中间件的方式提前捕获该类异常,直接返回400错误,避免触发告警:

  1. 在app/middleware/目录下新建catch_invalid_mime_type.rb文件,写入如下代码:
class CatchInvalidMimeType
  def initialize(app)
    @app = app
  end

  def call(env)
    @app.call(env)
  rescue ActionDispatch::Http::MimeNegotiation::InvalidType
    [400, { "Content-Type" => "text/plain" }, ["Bad Request"]]
  end
end
  1. 在config/application.rb中注册该中间件,让它在请求链路最外层生效:
config.middleware.insert_before 0, CatchInvalidMimeType

3. WAF层拦截恶意请求

可以在Web应用防火墙层配置规则,直接拦截携带Struts2攻击特征、非法MIME格式的请求,从源头避免这类请求到达应用服务。

内容的提问来源于stack exchange,提问作者Kyryl Ωliinyk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:39:05