Vapor Trail

明るく楽しく元気よく

『Real World HTTP ミニ版』を読んだ

ミニ版はこちらから無料で読むことができます。 www.oreilly.co.jp

GETメソッドのリクエストボディはいつ使用するのか?

以前APIを作っているときに思った「HTTPのGETメソッドは基本的にURLにクエリストリングを含めて使用するけどリクエストボディはどういうときに使用するのか?」かという疑問が解消された。

...if the request method does not include defined semantics for an entity-body, then the message-body SHOULD be ignored when handling the request. https://www.rfc-editor.org/rfc/rfc2616#section-4.3 https://stackoverflow.com/questions/978061/http-get-with-request-body

  • GETでリクエストボディを送ることは可能だが推奨されていない。そのためクエリストリングを使用する。

  • ただしIEではURLの最大長は2083文字の制限があるためその制限を超えるようなときはリクエストボディを使用するしかない。
    URL の最大長は、2,083 文字Internet Explorer

  • ElasticSearchのSearchAPIはGETでリクエストボディも使用することができる。
    ※クエリストリングも使用できる。リクエストボディを仕様するのは視認性が良いことが理由のよう。

    リクエストボディ方式では、表現がより豊かになり、読みやすいJSON形式で検索を定義することもできます。
    Search API | Elasticsearchリファレンス [5.4] | Elastic

ModuleとCGIの違い

あとはPHPのModuleとFastCGIの違いやnginxとphp-fpmでUnixソケット通信でリクエストをプログラムに渡してるとかをなんとなく理解した。

  • Module
    WebサーバーのプロセスのなかでPHPを実行する。 httpdプロセスが複数立ち上がる。

  • CGI
    Webサーバーとは別のプロセスで実行する。さらにFastCGI(php-fpm)は、一度起動したプログラムは一定時間、メモリ上で起動したままの状態にしておくことができる。

感想

しかしフレームワークAPIレベルの知識をボトムアップで学んだだけでは、その背後にある、ウェブサービスに共通する考えは身につきにくいー間違った類推をしてしまったり、具体的な実装に理解が引きずられてしまうーことが考えられます。 渋川よしき著『Real World HTTP ミニ版』(オライリー・ジャパン発行、ISBN978-4-87311-878-9、p133)

と書かれているように、すぐに陳腐化してしまうフレームワークやツールの使い方ではなく、今までなんとなくの理解で済ませていた根本的にどのように動いているのか仕組みを学ぶ必要があると感じる。流行りの技術やフレームワークに振り回されないようにするためにも。