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

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

HTTP parse error, malformed request (): # 2017-03-12 13:10:02 -0400: ENV: {"rack.version"=>[1, 3], "rack.errors"=>#<IO:>, "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"} 

浏览器错误:

 This site can't provide a secure connection. localhost sent an invalid response. ERR_SSL_PROTOCOL_ERROR* 

我尝试了以下内容

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

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

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

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

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

    配置/环境/ production.rb

     # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. config.force_ssl = true 

好像你试图在本地运行HTTPS。 您需要在本地安装TLS工具包(如openSSL)。 例如OPENSSL 。

在你确定了这一点后,如果仍然无法正常工作,也许你可以在下一个Github问题中找到答案。 好像是Puma gem的一个bug。 GITHUB ISSUE TALK

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

  1. 您是否在Gemfile中更改了服务器? 例如从Puma到Thin?
  2. 您是否设置了SSL证书?
  3. 您是否使用SSL证书标志启动了Web服务器?
  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