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*
私は以下を試しました
考えられる解決策は次のとおりです。
https:// localhost:30 ではなく http:// localhost:30 を介して接続していることを確認します。
ブラウザがHTTPSにリダイレクトし、それがGoogle Chromeである場合、HSTS問題に対処する次の解決策を試してください: https://stackoverflow.com/a/2858659
HTTPSを強制する本番環境(提供している場合)がないことを確認します。それが問題である場合は、コメントアウトするか、true
をfalse
に変更します。
config/environments/production.rb
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
config.force_ssl = true
将来これを読む人のために、以下を考慮してください:
開発環境で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
別のブラウザーを使用してアプリにアクセスするか、Chromeを使用している場合はシークレットモードでアクセスします。この後、エラーはどのブラウザーにも再び表示されませんでした。最初にconfig.force_ssl
を削除するか、development.rb
ファイルでfalse
に設定してください。
Rails 6アプリのconfig.force_ssl = true
ファイルにdevelopment.rb
構成を追加して削除した後、本日この問題に遭遇しました。 Chromeブラウザでlocalhostのアプリにアクセスしようとすると、同じエラーが表示されました。 Railsサーバーを数回再起動しましたが、役に立ちませんでした。
アプリクライアントのforce sslバージョンが開かれなかった別のブラウザーでのアクセスは機能しました。