Rails,HTTP parse error, malformed requestの対処

Mon Apr 22, 2019 - rails
Sat Jan 25, 2020

Railsチュートリアルの11章が終わって、12章の途中で、rails sを実行すると以下のようエラーがでた。

1
HTTP parse error, malformed request (): #<Puma::HttpParserError: Invalid HTTP format, parsing fails.

要は、ローカル環境でもhttpsでアクセスしてねと。という訳で、ローカルの環境でもhttpsで接続できるように変更する。

環境

  • macOS Mojave 10.14.4

  • Rails 5.2.2

  • ruby 2.6.1

自己証明書を作成

自己証明書を簡単に作成できるmkcertを使います。

mkcertをインストール

1
2
$ brew install mkcert
$ brew install nss # Firefoxを使う場合はこっちも必要

証明書を作成

1
2
3
4
5
6
7
$ mkcert -install
$ mkcert example.com

# カレントディレクトリに証明書が生成されます
$ ls -l ./*.pem
-rw-------  1 tofu  staff  1708  4 22 20:00 ./example.com-key.pem
-rw-r--r--  1 tofu  staff  1549  4 22 20:00 ./example.com.pem

config/puma.rbの設定

config/puma.rbに先ほど作成した証明書を参照するように設定します。

1
2
3
4
5
#  config/puma.rb

cert = "/Users/name/example.com.pem"
key = "/Users/name/example.com-key.pem"
ssl_bind "0.0.0.0", 9292, cert: cert, key: key

あとはrails sではなくpumactl startを実行して、 https://localhost:9292/にアクセス。

See Also