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应用程序
这是一些可能的解决方案。
-
确保通过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
好像你试图在本地运行HTTPS。 您需要在本地安装TLS工具包(如openSSL)。 例如OPENSSL 。
在你确定了这一点后,如果仍然无法正常工作,也许你可以在下一个Github问题中找到答案。 好像是Puma gem的一个bug。 GITHUB ISSUE TALK
对于将来阅读本文的人,请考虑以下事项:
- 您是否在Gemfile中更改了服务器? 例如从Puma到Thin?
- 您是否设置了SSL证书?
- 您是否使用SSL证书标志启动了Web服务器?
- 是否在开发/生产环境中打开了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