在尝试运行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*
我试过以下
答案 0 :(得分:6)
以下是一些可能的解决方案。
确保您通过http://localhost:3000而不是https://localhost:3000进行连接。
如果浏览器重定向到HTTPS及其谷歌浏览器,请尝试解决HSTS问题的解决方案:https://stackoverflow.com/a/28586593
确保您没有强制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)
对于以后阅读此书的人,请考虑以下事项:
如果可以在开发环境中关闭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