94616


先日じゃんたまのようなWebブラウザゲームを作りたいと思い勉強を始めたものです。勉強していて少し疑問に感じたことがあるので質問させてください。

環境はXAMPPを使いApacheの中にWebサイトを作っています。（表現は正しいかわかりません；；）

例えばフォーム画面から情報を入力し登録するときに、HTMLでフォームを作りそれを送信する際にPOST送信を使うと記述を見ました。サーバー内にHTMLファイルを置いてそこでフォームを送信したらそのままPHPの変数に情報を渡してMySQLなどに反映すればいいのではないかと思いGET,POSTで送信するといったことのイメージがつかめずにいます。アクセス元の端末にHTMLファイルがありそこから送信するのであればなんとなくわかるのですがサーバー内にあるHTMLファイルにアクセスしている状態でGETもPOSTもないのではと思っています。

POST GETはどういうときに使用するのか、また僕の考えは実際とどう違うのかを教えていただきたいです。  
長文失礼しました、よろしくお願いします。


CC BY-SA 4.0
2023-04-22T18:12:53.653
94614
2023-04-23T05:00:45.497
2023-04-23T05:00:45.497
3060
58031
question
html http form
HTMLでのフォーム送信にhttpPOST、GETは必要なのでしょうか。


「フォームを送信」という行為を誰がどこで行なうのかを考えると、自ずと通信の必要性が理解できるかと思います。

### フォームの利用で起こること

フォームの典型的な利用は、人間のユーザーによってWebブラウザを用いて行なわれます。この際に起こる出来事は、おおよそ下のようになるかと思います。

  1. ブラウザがサーバーにGETリクエストを出す
  2. サーバーがリクエストを受け、ブラウザにフォームを含むHTMLレスポンスを返す
  3. ブラウザが受け取ったHTMLを解析して画面上に表示する
  4. ユーザーがブラウザに表示された画面に入力し、送信ボタンを押す
  5. ブラウザがサーバーにフォームへ入力されたデータを含むリクエスト（GET／POST）を送信する
  6. サーバーがフォームへの入力を含むリクエストを受け、「MySQLなどに反映」といった動作を行なう（そして、何らかのレスポンスをブラウザに返す）

この内、サーバー側で行われているのは、2番と6番のみです。5番でブラウザがGETなりPOSTなりの通信でサーバーにユーザーがフォームに入力した情報を送信しなければ、フォームは機能しません。その場合、サーバー側ではユーザーがフォームに入力した情報を得られません。

### 「サーバーにアクセス」という表現

誤解しやすいのは「サーバーにアクセス」などといった表現だと思います。

「サーバーにアクセス」と言う表現は、例えばSSHによる遠隔ログインにも使われます。こういったコンピュータの遠隔利用では、ユーザーはログイン先のコンピューターをかなり自由に、まるで手元のコンピューターを利用しているかのように透過的に利用できることが多いです。この場合は、通信を意識する程度が低いでしょう。そのイメージから、

> サーバー内にあるHTMLファイルにアクセスしている状態でGETもPOSTもない

と感じるのかも知れません。

しかし、そのような利用方法でも、ユーザーの操作は全て通信で送信され、サーバー側がそれを受け取るという処理が行なわれている事に注意して下さい。

### ユーザーの入力を受け取るには、必ず通信が必要です

ユーザーの入力を受け取る際には必ず通信が行なわれています。（突き詰めれば、HTTPサーバーに限らずあらゆるソフトウェアにこれが言えます）

ユーザーがサーバーなどのソフトウェアが実行されているのと同じコンピューターを利用しているとしても、ユーザーが利用しているクライアント（Webブラウザなど）とサーバーソフトウェアの間で通信が行なわれます。


CC BY-SA 4.0
2023-04-22T23:03:36.787
94616
2023-04-22T23:03:36.787
3054
94614
answer


> POST GETはどういうときに使用するのか、

普通は、GET と POST の使い分けは以下のようにすると思います。

GET - Requests data from a specified resource

POST - Submits data to be processed to a specified resource

>
> サーバー内にHTMLファイルを置いてそこでフォームを送信したらそのままPHPの変数に情報を渡してMySQLなどに反映すればいいのではないかと思いGET,POSTで送信するといったことのイメージがつかめずにいます。

「サーバー内にHTMLファイル」はクライアントに送信されて、クライアントがブラウザで見てるのですよね。であれば、「そこでフォームを送信」はクライアントのブラウザから
Web サーバーに送信することになります。

「フォームを送信」する (即ち、サーバーにデータを渡す) のに POST を使います。POST
してデータをサーバーに渡さないことには「PHPの変数に情報を渡し」はできないことはわかりますか？

【追伸】

Web アプリの開発の際は、サーバー側で起こっていることと、クライアント側で起こっていることをしっかり区別して考えましょう。

また、Web アプリは基本ステートレスということも常に意識しましょう。

特に前者ができてないとまた同様な疑問にハマります。


CC BY-SA 4.0
2023-04-22T23:10:05.063
94617
2023-04-22T23:35:21.600
2023-04-22T23:35:21.600
51338
51338
94614
answer