【連載】春の新入社員におくるPHP超入門 ~ その6:HTTP/HTTPS – GET・POST –

こんにちは。サイオステクノロジーの川田です。

PHPを始めてみよう!触ってみよう!と考えている方向けへのPHP超入門をお届けしております。

今回は第6回になります。

使用するツールはこちらです。
環境の詳細についてはアジェンダの「1.環境構築」へ(/・ω・)/

  • Visual Studio Code
    拡張機能:Remote Development

  • Docker

HTTPについて

HTTPとはHyperText Transfer Protocolの略です。

ブラウザにURLを入力すると表示したいWebページが表示されますよね。
HTTPとはWebページを表示する際に使う通信プロトコルです。

アドレスバーに「https://…」はHTTP通信していることになります。

HTTPSについて

HTTPSとはHyperText Transfer Protocol Secureの略です。
HTTPリクエストやレスポンスの内容が暗号化されます。

HTTPに「S」がつきました。そうです。Secureの「S」です。
Secureを調べてみると「安全」と出てきます。HTTPに比べてセキュアな通信というわけですね。

具体的にHTTPとHTTPSの違いはなにか!?見ていきましょう。

HTPPとHTTPSの違い

違いは通信が暗号化されているかということになります。
SSLが導入されているサイトは送信データが暗号化され、ブラウザに「鍵マーク」が表示されます。

HTTPSは安全なの?

暗号化されているなら安全じゃん!」と思いますよね?
HTTPよりは安全というだけで、100%安全というわけではありません。

どういうことなのか!!!

もしあなたがアクセスしたWebサイトが偽物だったら、、、、、、?
よくニュースで詐欺サイトという単語を耳にしたことはありませんか?

 

①ユーザーに偽物のURLを付けてメールを送ります。
②「カード情報を確認しよう」とURLをクリックします。
③偽サイトと気づかず、IDとPasswordを入力してログインをしてしまいます。
④ログイン情報が盗まれてしまいました><

「えー騙されるかな?」と思うかもしれません。
例えば本物のURL「https://www.xxxx.com/」
偽物は「https://www.xxxx-xyz.com/」
偽物には「xyz」がついています。本物のURLと微妙に違うこと多いので注意が必要です!

またWebサイトも本物そっくりに作られています。
未納料金の請求やアカウントロックなどについてメールが来ると焦って確認しようと思いますよね><

まずは本物かどうかURLをしっかり確認することが大事ですね!
話が逸れてしまいました。以上がHTTPやHTTPSの簡単な説明でした。

GETとPOSTについて

Webサイトからの要求には「GET」と「POST」というメソッドがあります。
用途によってGETやPOSTを使い分ける必要があります。
この2つを説明していきます。

GET

今皆さんがWebサイトを閲覧するとき、検索するときもGetを利用してサーバーにリクエスト送信しています。
Google検索もGetを用いられています。
送信データはURLの最後に「?[パラメーター名]=値」と記述します。

値が複数ある場合は「&」で繋げることができます。
例:/xxx.php?[パラメーター名1]=値1&[パラメーター名2]=値2

Getを扱う際に注意点があります。

  • 他人がURLを見ると送信データが丸見え

例えばパラメーターにパスワードを指定した場合、情報が丸見えになってしまいます。
例:/xxx.php?password=123456
重要な情報はPOST送信にしましょう。

  • urldecode() 関数を介して渡される

引数のエンコード文字「 %##」 をデコードします。 (プラス記号 (‘+’) は、スペース文字にデコードします。)

GET送信してみよう!

  • index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>入力フォーム</title>
  </head>
  <body>
    <h1>入力フォーム</h1>
    <form action="/index.php" method="get">
        <p>お名前:<input type="text" name="name"></p>
        <p>メールアドレス:<input type="text" name="mail"></p>
        <input type="submit">
    </form>
  </body>
</html>

methodをgetにするとGET送信になります。

  • indexphp
<?php
var_dump(htmlspecialchars($_GET['name']));

データを受け取る場合はスーパーグローバル変数「☞$_GET」を使います。
XSS対策のためhtmlspecialcharsを使用しています。XSSについて分からない方は☞こちらをクリック

では入力フォームに入力してみます。
名前:山田太郎
メールアドレス:xxxxxxxx.com

「送信」ボタンをクリックします。

nameの値が出力され、URLが&繋ぎで表示されていることがわかります。
https://localhost:8080/index.php?name=山田太郎&mail=xxxxxxxx.com

URLを直接叩いても画面は同じ出力結果になります。

POST

  • パラメータが見えづらい

わざと調べない限りパラメータの内容は見えません。

  • 文字数制限がない

文字数制限を気にせず使用することができます。
GETはブラウザによって変わりますが、使える文字数が制限されております。

全部POSTではだめなの?

だったら全部POSTでも良いのでは!?」と思う方もいると思います。

例えば「https://wwww.xxxx.com/archives/id=2333」という記事のIDをパラメータとして渡しています。
GETで受け取っているため「id=2333」の記事IDを直接表示できますし、複数人に共有することもできます。

 

これがPOSTになったらどうでしょう?
ページトップにいって、一から記事を探さなくてはなりません。
それってすごーーーくめんどくさくないですか?
記事をブックマークや共有できるのもGETのおかげということですね。

どういうときにPOSTを使うのか、GETを使うのか使い分けはとても重要です!

POST送信してみよう!

  • index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>入力フォーム</title>
  </head>
  <body>
    <h1>入力フォーム</h1>
    <form action="/index.php" method="post">
        <p>お名前:<input type="text" name="name"></p>
        <p>メールアドレス:<input type="text" name="mail"></p>
        <input type="submit">
    </form>
  </body>
</html>

9行目のmethodをget⇒postに修正しただけです。

  • indexphp
<?php
var_dump(htmlspecialchars($_POST['name']));

データを受け取る場合はスーパーグローバル変数「☞$_POST」を使います。

では先ほどと同様入力フォームに入力してみます。
名前:山田太郎
メールアドレス:xxxxxxxx.com

「送信」ボタンをクリックします。

GETとの違い分かりましたか?
出力内容は変わりませんが、URLに注目です!パラメータがついていませんよね。
文字数が多いような項目、画像データや重要な情報はPOSTが適しています。

まとめ

今回はHTTPとHTTPSの違いやGET、POST送信についてご説明しました。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です