web-dev-qa-db-ja.com

HTTP解析エラー、不正なリクエスト-Ruby on Rails

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機能していたアプリを実行する
12
Nick April

考えられる解決策は次のとおりです。

  1. https:// localhost:30 ではなく http:// localhost:30 を介して接続していることを確認します。

  2. ブラウザがHTTPSにリダイレクトし、それがGoogle Chromeである場合、HSTS問題に対処する次の解決策を試してください: https://stackoverflow.com/a/2858659

  3. HTTPSを強制する本番環境(提供している場合)がないことを確認します。それが問題である場合は、コメントアウトするか、truefalseに変更します。

    config/environments/production.rb

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

ローカルでHTTPSを実行しようとしているようです。ローカルにTLSツールキット(openSSLなど)をインストールする必要があります。 OPENSSLなど

それを確認した後、それでも機能しない場合は、次のGithubの問題で答えを見つけることができるでしょう。 Puma gemのバグのようです。 ギスブトーク

3
FedeSc

将来これを読む人のために、以下を考慮してください:

  1. Gemfileでサーバーを変更しましたか?例えばプーマからシンへ?
  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
BKSpurgeon

別のブラウザーを使用してアプリにアクセスするか、Chromeを使用している場合はシークレットモードでアクセスします。この後、エラーはどのブラウザーにも再び表示されませんでした。最初にconfig.force_sslを削除するか、development.rbファイルでfalseに設定してください。

Rails 6アプリのconfig.force_ssl = trueファイルにdevelopment.rb構成を追加して削除した後、本日この問題に遭遇しました。 Chromeブラウザでlocalhostのアプリにアクセスしようとすると、同じエラーが表示されました。 Railsサーバーを数回再起動しましたが、役に立ちませんでした。

アプリクライアントのforce sslバージョンが開かれなかった別のブラウザーでのアクセスは機能しました。

0
Ricardo Green