HTTP解析错误,格式错误的请求 - Ruby on Rails

Nic*_*ril 6 ruby-on-rails puma

在尝试运行Ruby on Rails应用程序时,我在终端中看到以下错误.

HTTP parse error, malformed request (): #<Puma::HttpParserError: Invalid HTTP format, parsing fails.>
2017-03-12 13:10:02 -0400: ENV: {"rack.version"=>[1, 3], "rack.errors"=>#<IO:<STDERR>>, "rack.multithread"=>true, "rack.multiprocess"=>false, "rack.run_once"=>false, "SCRIPT_NAME"=>"", "QUERY_STRING"=>"", "SERVER_PROTOCOL"=>"HTTP/1.1", "SERVER_SOFTWARE"=>"puma 3.4.0 Owl Bowl Brawl", "GATEWAY_INTERFACE"=>"CGI/1.2"}
Run Code Online (Sandbox Code Playgroud)

浏览器错误:

This site can’t provide a secure connection. localhost sent an invalid response. ERR_SSL_PROTOCOL_ERROR*
Run Code Online (Sandbox Code Playgroud)

我尝试了以下内容

  • 清除浏览器缓存并重新启动
  • 恢复到当时正在运行的GIT中的旧提交
  • 重启终端
  • 运行功能正常的其他rails应用程序

Tom*_*tor 8

这是一些可能的解决方案.

  1. 确保通过http:// localhost:3000而不是https:// localhost:3000进行连接.

  2. 如果浏览器重定向到HTTPS并且是谷歌浏览器,请尝试解决HSTS问题的解决方案:https://stackoverflow.com/a/28586593

  3. 确保您没有强制HTTPS的生产环境(如果这就是您所服务的).如果这是问题,请将其注释掉或更改truefalse:

    配置/环境/ production.rb

    # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
    config.force_ssl = true
    
    Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的喊叫,愚蠢的我使用 https 而不是 http (2认同)

Fed*_*eSc 6

似乎您正在尝试在本地运行 HTTPS。您需要在本地安装 TLS 工具包(如 openSSL)。 以 OPENSSL 为例

在您确定之后,如果仍然无法正常工作,也许您可​​以在下一期 Github 问题中找到答案。似乎是 Puma gem 的错误。 GitHub 问题讨论


BKS*_*eon 5

对于那些将来阅读本文的人,请考虑以下事项:

  1. 您是否在 Gemfile.xml 中更改了服务器?例如从彪马到瘦?
  2. 您是否设置了 SSL 证书?
  3. 您是否使用 SSL 证书标志启动您的网络服务器?
  4. 您的开发/生产环境中是否启用了 SSL - 您正在调用什么环境?

如果您可以在开发环境中关闭 SSL,则可以通过以下方式执行此操作:

config/environments/development.rb 并配置:

config.force_ssl = false

这是一些对我有用的代码,使用 puma,调用 SSL 认证(本地)。我已经创建了我的证书并将其转储到相关位置:

rails s -b 'ssl://localhost:3000?key=./.ssl/localhost.key&cert=./.ssl/localhost.crt'

当我想从我的 PC 在生产环境中运行它时,我使用以下命令:

rails s -b 'ssl://localhost:3000?key=./.ssl/localhost.key&cert=./.ssl/localhost.crt' -e production

HTH