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

时间:2017-03-12 17:25:06

标签: 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"}

浏览器错误:

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

我试过以下

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

6 个答案:

答案 0 :(得分:6)

以下是一些可能的解决方案。

  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
    

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

对于以后阅读此书的人,请考虑以下事项:

  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

答案 3 :(得分:0)

使用其他浏览器访问该应用,或者如果您使用的是Chrome,则以隐身模式访问该应用。此后,该错误不再显示在任何浏览器中。请记住首先删除config.force_ssl文件中的false或将其设置为development.rb

今天在Rails 6应用程序的config.force_ssl = true文件中添加并删除了development.rb配置后遇到了这个问题。尝试在Chrome浏览器中的localhost中访问应用程序,并显示相同的错误。多次重命名Rails服务器,但无济于事。

在从未打开过app客户端的force ssl版本的其他浏览器中访问它的工作正常。

答案 4 :(得分:0)

就我而言,这是一个愚蠢的错误,我在http上启动了服务器,而我的网址指向了https。 我希望这可以节省别人的时间;)

答案 5 :(得分:0)

也遇到了这个错误, 如果上述解决方案不起作用,请快速检查您的 application.html.erb

中是否有此元标记

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

这将强制 Google Chrome 将本地主机重定向到 HTTPS