【PHP超入門】HTTP（GET・POST）について

# **はじめに**

PHPでメールフォームや掲示板などを作る前にWebサイトがどのような仕組みで表示されているかを理解する必要があります。
役立つというレベルではなく、**必ず理解しておく必要があります。**

おそらく、初心者の方は、自分が書いたコードをエラーなく動かすことに必死かと思います。（偉そうなことを言ってますが、私も同じです（´ω｀；））
実際にWebサイトがどのような仕組みで表示されているかを理解していなくても、書いたコードは動作します。
そのため、なぜ理解する必要があるのかわからないという方もいると思いますが、基礎を理解する恩恵は、非常に大きいです。
Webページがどのような仕組みで表示されるのか理解することで、Webページが表示される速度を改善することができたり、メールフォームや掲示板などのWebアプリケーションを作るときに、どのようなことに気をつけるべきかもわかるようになります。

私自身、未熟ですので説明に誤りがあるかもしれません。
そのときは、ご指摘ください((_ _ (´ω｀ )ﾍﾟｺ
この記事は、HTMLとPHPの変数と配列の知識がある方が対象です。
変数と配列について理解していない方には難しい箇所もあるかもしれません。
わからない箇所があれば、各自で調べるか、読み飛ばしてください。

今回、HTTP、GET、POSTについて学ぶために

- [第1章 HTTPについて](http://qiita.com/7968/items/4bf4d6f28284146c288f#%E7%AC%AC1%E7%AB%A0-http%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
　[Webページってどのように表示されるの？](http://qiita.com/7968/items/4bf4d6f28284146c288f#web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%A3%E3%81%A6%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E3%81%AE)
　[HTTP（Hypertext Transfer Protocol）とは](http://qiita.com/7968/items/4bf4d6f28284146c288f#httphypertext-transfer-protocol%E3%81%A8%E3%81%AF)
　[実際のリクエストとレスポンスの内容を確認する](http://qiita.com/7968/items/4bf4d6f28284146c288f#%E5%AE%9F%E9%9A%9B%E3%81%AE%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%81%A8%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B9%E3%81%AE%E5%86%85%E5%AE%B9%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B)
　[リクエストメッセージ](http://qiita.com/7968/items/4bf4d6f28284146c288f#%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8)
　[レスポンスメッセージ](http://qiita.com/7968/items/4bf4d6f28284146c288f#%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B9%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8)
　[HTTPメソッドについて](http://qiita.com/7968/items/4bf4d6f28284146c288f#http%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)

- [第2章 GETメソッドについて](http://qiita.com/7968/items/4bf4d6f28284146c288f#%E7%AC%AC2%E7%AB%A0-get%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
　[クエリストリングの q=PHP とは？](http://qiita.com/7968/items/4bf4d6f28284146c288f#%E3%82%AF%E3%82%A8%E3%83%AA%E3%82%B9%E3%83%88%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE-qphp-%E3%81%A8%E3%81%AF)

- [第3章 POSTメソッドについて](http://qiita.com/7968/items/4bf4d6f28284146c288f#%E7%AC%AC3%E7%AB%A0-post%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
　[実際のリクエストとレスポンスの内容を確認する](http://qiita.com/7968/items/4bf4d6f28284146c288f#%E5%AE%9F%E9%9A%9B%E3%81%AE%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%81%A8%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B9%E3%81%AE%E5%86%85%E5%AE%B9%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B-1)
　[GETメソッドの場合も確認](http://qiita.com/7968/items/4bf4d6f28284146c288f#get%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%AE%E5%A0%B4%E5%90%88%E3%82%82%E7%A2%BA%E8%AA%8D)

- [第4章 応用編](http://qiita.com/7968/items/4bf4d6f28284146c288f#%E7%AC%AC4%E7%AB%A0-%E5%BF%9C%E7%94%A8%E7%B7%A8)
　[リクエスト数が減れば、表示速度が速くなる？](http://qiita.com/7968/items/4bf4d6f28284146c288f#%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E6%95%B0%E3%81%8C%E6%B8%9B%E3%82%8C%E3%81%B0%E8%A1%A8%E7%A4%BA%E9%80%9F%E5%BA%A6%E3%81%8C%E9%80%9F%E3%81%8F%E3%81%AA%E3%82%8B)
　[jQueryで入力チェックすれば問題ないの？](http://qiita.com/7968/items/4bf4d6f28284146c288f#jquery%E3%81%A7%E5%85%A5%E5%8A%9B%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%81%99%E3%82%8C%E3%81%B0%E5%95%8F%E9%A1%8C%E3%81%AA%E3%81%84%E3%81%AE)
　[HTML側でチェックボックスやプルダウンなど入力制限しておけば問題ないの？](http://qiita.com/7968/items/4bf4d6f28284146c288f#html%E5%81%B4%E3%81%A7%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%82%84%E3%83%97%E3%83%AB%E3%83%80%E3%82%A6%E3%83%B3%E3%81%AA%E3%81%A9%E5%85%A5%E5%8A%9B%E5%88%B6%E9%99%90%E3%81%97%E3%81%A6%E3%81%8A%E3%81%91%E3%81%B0%E5%95%8F%E9%A1%8C%E3%81%AA%E3%81%84%E3%81%AE)
　[POSTメソッドを使っておけば、安全なの？](http://qiita.com/7968/items/4bf4d6f28284146c288f#post%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%8A%E3%81%91%E3%81%B0%E5%AE%89%E5%85%A8%E3%81%AA%E3%81%AE)

という流れでまとめてみました。

第1章のHTTPについて学ぶ前に、Web技術に関係する団体について理解しておきましょう。

### **IETFとRFCについて**

Webの技術を知る上で、IETFとRFCについては理解しておく必要があります。

IETF（Internet Engineering Task Force）とは、インターネットで利用される技術の標準化を推進する組織の一つです。
IETFで決定された規格は「RFC」（Request For Comments）と呼ばれる文書にまとめられ、公開されています。
各規格には通し番号が与えられ、「RFC 2616」のように表記します。

簡単に言えば、IETFという組織がインターネット技術の決まり事を定め、その決まり事を文書化したものをRFCと呼んでいるということです。

この先、Web技術を学ぶときに必ずRFCが出てきますので、今のうちRFCがどのようなものか理解しておきましょう。
この記事でもRFCのどの番号に該当する内容なのか、記載しています。
詳しい技術仕様を確認したい方は、RFCの文章をご確認ください。

IETFとRFCについて詳しく知りたい方は「[IETFとRFC - JPNIC](https://www.nic.ad.jp/ja/tech/rfc-jp.html)」をご覧ください。

### **IPAについて**

IPAとは、[独立行政法人情報処理推進機構](https://www.ipa.go.jp/)のことです。
Information-technology Promotion Agency, Japanを略してIPAと呼ばれています。
情報処理に関する国家試験を実施したり、コンピュータウイルスやセキュリティに関係する調査・情報提供を行っている団体です。
この先、ITやWebに従事する方なら、IPAについて必ず目にすることがありますので、覚えておきましょう。

今回の記事に出てくる団体のみ紹介しております。
WebやITに関する団体は、他にも [W3C](https://www.w3.org/) など様々な団体があります。
興味がある方は、Wikipediaの [標準化団体 (コンピュータと通信) ](https://ja.wikipedia.org/wiki/%E6%A8%99%E6%BA%96%E5%8C%96%E5%9B%A3%E4%BD%93_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%A8%E9%80%9A%E4%BF%A1)) をご覧ください。

それでは、第1章のHTTPについて学んでいきましょう。

# **第1章 HTTPについて**

## **Webページってどのように表示されるの？**

ブラウザにURLを入力するとWebページが表示されます。
**クライアント**と**サーバー**でデータのやり取りをすることでWebページが表示されます。
クライアントとは、端的に言えば、私たちが使っているパソコン（ブラウザ）のことです。
サーバーとは、Webページのデータ（HTMLファイルや画像ファイルなど）が保存されているパソコンのことです。

クライアントがサーバーへ「このURLのWebページのデータをください」と要求することを**リクエスト**と呼びます。
クライアントからの要求に応じて、サーバーからクライアントへWebページのデータを渡すことを**レスポンス**と呼びます。

![pic_1_1.png](https://qiita-image-store.s3.amazonaws.com/0/72985/e98c5fb4-478c-66fd-5648-19cd8ddfc600.png)

下記のようなWebページにアクセスしたときに、どのようなやり取りをしているのか確認してみましょう。

![pic_1_2.png](https://qiita-image-store.s3.amazonaws.com/0/72985/ee59b9c0-d853-ced9-a74a-bd9255f0180d.png)

大体ですが、Webページを表示するのに下記のようなやり取りをしています。

![pic_1_3.png](https://qiita-image-store.s3.amazonaws.com/0/72985/d88db6db-3aa7-7462-3a7f-e9330ec2572c.png)

図の通り、リクエストとレスポンスを繰り返すことでWebページが表示されます。
ここで注目してほしいのが、**HTMLファイルをもらった後に、表示する画像の数だけリクエストとレスポンスを繰り返しております。**
一見すると1ページという感覚なので、画像なども含め一度にクライアントとサーバーでやり取りしていると思いがちですが、HTMLファイルから読み込んでいるファイルの数だけリクエストとレスポンスを繰り返しております。

クライアントとサーバーがやり取りするときにクライアントが好き勝手な記述でリクエストしてもサーバー側は理解できません。
逆もまた然りです。
そのため、リクエストまたはレスポンスするときには、○行目にはこのような内容を記述しましょうなどの決まり事があります。
それが**HTTP**です。

## **HTTP（Hypertext Transfer Protocol）とは**

HTTPについては、入力したことある方も多いかと思います。
`http://www.yahoo.co.jp/`と入力すれば、ヤフーにアクセスできます。
この最初に入力した`http`のことです。
先ほども説明しましたが、HTTPはリクエストとレスポンスするときの決まり事です。
このHTTPについてもう少し詳しく見ていきましょう。

HTTPは Hypertext Transfer Protocol （ハイパーテキスト・トランスファー・プロトコル）の略です。
ハイパーテキスト（Hypertext）とトランスファー（Transfer）とプロトコル（Protocol）の3つに分けて意味を考えてみましょう。
ハイパーテキストとは、端的に言えばHTMLなどで書かれたファイルのことです。
トランスファーは、渡すという意味です。
プロトコルは規約や決まり事という意味です。
つまり、HTTPとはHTMLファイルなどを渡すための決まり事という意味です。

HTTPで定められた決まり事に従うことで、クライアントとサーバーで意思の疎通ができるようになっています。
HTTPには、下記のバージョンがあります。

![pic_table_http.jpg](https://qiita-image-store.s3.amazonaws.com/0/72985/934a6d0f-b8dd-5e69-e731-d176b257582e.jpeg)


HTTP/0.9から始まり、より便利に、より速くという感じでバージョンアップしています。
今は、HTTP/1.1で通信することが多いです。
2015年5月にRFCとして公開されたHTTP/2は、これから普及していくと思います。
HTTP/2は、従来のリクエストとレスポンスの繰り返しを効率化することでWebページの表示速度を改善しているそうです。
この記事では、各バージョンの詳しい説明はありません。
ここでは、HTTPには、いくつかバージョンがあり、RFCとして公開されているということだけ覚えておきましょう。
各バージョンによる違いについて、興味のある方は調べてみてください。

# 続きの内容を Udemy で公開しました。

Udemy で「プログラミング学習の心得 ＆ HTTP（GET・POSTなど）の基礎」の動画講座を公開しました。
GET や POST など HTTP の基礎について学びたい方は Udemy の講座をご覧ください。

特別に 85% OFFのクーポンを発行します。
通常価格 10,800 円が 1,800 円で購入できます。
動画内でも説明していますが、初心者・初学者向けの内容です。
事前に自分の知りたい内容・興味のある内容か確認してからご購入ください。

- [挫折した人が教える PHP プログラミングシリーズ Vol.1『学習の歩き方』](https://www.udemy.com/course/learn-php-for-beginners-vol1/?couponCode=9DA8AF9EBBE3AA414B64)