はじめに
HTTP通信について、「なんとなく知っているけど、しっかり理解できていない」という方は意外と多いのではないでしょうか?フロントエンドエンジニアを目指す初学者の方にとって、HTTP通信をはじめとするWebの仕組みを理解することはとても大切です。
しかし、Webの仕組みを学ぼうとすると、その範囲の広さに「何から勉強すれば良いのか」と迷いがちです。Webアプリは多くの技術を組み合わせて動作しているため、一度にすべてを理解するのは簡単ではありません。
そこで、学習を進める際には「この技術について学習する」といった、小さな目標を立ててコツコツと取り組むことが大切です。1つずつ習得し、目標を達成することでモチベーションを保ちやすくなり、結果的に知識が深まっていきます。
この記事で学びステップアップ
この記事では、フロントエンド初学者向けにWebの仕組みの1つであるHTTP通信について解説します。HTTP通信の基本的な仕組みや役割をわかりやすく解説し、最後にはcurl
コマンドを使った簡単なハンズオンも用意しています。
フロントエンドエンジニアは、バックエンドやAPIからデータを取得し、それをユーザーに見せる役割を担います。このデータ取得や送信に使われるのがHTTP通信です。その仕組みを理解しておくことで、APIやバックエンドとの連携がスムーズになり、開発効率が大きく向上します。
まずは、基本的なHTTPメソッドやリクエストの仕組みを理解することを1つの小さな目標とし、1つずつ学ぶことで、スムーズに習得できるかと思います。それでは始めましょう!
この記事の目的と対象者
目的
- HTTP通信の基本を理解し、実践に役立てるスキルを身につける
対象者
- フロントエンド初学者
- Web開発をこれから始めようとしている方
HTTP通信とは?
HTTP(Hypertext Transfer Protocol)通信とは、WebブラウザとWebサーバーがテキストや画像などの情報をやり取りするためのルール(プロトコル)にしたがって行われる通信です。この通信のおかげで、私たちはWebサイトでニュースを読んだり、ECサイトで買い物を楽しんだりすることができます。
Webサイト閲覧のながれ
普段、私たちがどのようにWebサイトを閲覧しているかを考えたことはありますか?そのプロセスを簡単に見てみましょう。
Webサイトを表示するためには、そのサイトのデータを持つWebサーバーにアクセスして、表示に必要なデータを取得する必要があります。この一連の通信の仕組みを「クライアントサーバーモデル」と呼びます。
-
クライアント
Webサイトを閲覧するユーザーやデバイス(例:スマホやパソコン)
-
サーバー
Webサイトのデータ(HTML、画像、動画など)を管理し、クライアントに提供するWebサーバー
たとえば、クライアントであるアリスがWebブラウザを使って「エンベーダー」のサイトにアクセスする場合、以下のような通信が行われます。
「クライアントサーバーモデル」の仕組みは、少し難しく感じるかもしれませんが、実は私たちの日常生活の中で頻繁に使われています。この仕組みはWebサイトを閲覧するだけでなく、メールを送るときのやり取りや、動画を視聴する際にも活用されています。Webの世界では欠かせない基本ルールといえるでしょう。
HTTP通信を理解することは大切
この記事の冒頭でもお伝えしたように、フロントエンドエンジニアは、バックエンドやAPIからデータを取得して、それをユーザーに見せる大切な役割があります。この際、データの送受信にはHTTP通信が欠かせません。
例えば、APIからデータを取得したり、ログインフォームのデータを送信する際に、HTTP通信を使用します。このようなプロセスを理解していないと、データの扱いで悩むことが多くなり、スムーズな開発が難しく感じられるかもしれません。HTTP通信を学ぶことで、データの扱いやエラー時の対応がスムーズにできるようになり、コードの品質が向上するだけでなく、開発時間を短縮することにもつながります。
フロントエンドエンジニアの役割については、以下の記事で詳しく解説していますので、ぜひ参考にしてみてください。
-
そもそも開発におけるフロントエンドの役割は?
フロントエンド開発でのHTTP通信の役割
現在のアプリ開発では、HTTP通信を通じてどのようなデータのやり取りが行われているのでしょうか?具体的な例を見ていきましょう。
-
フロントエンドとバックエンドの連携
フロントエンドとバックエンドは、HTTP通信を使ってデータをやり取りすることで連携しています。この通信が、ユーザーの操作を反映し、データベースと繋がる仕組みを支えています。例えば、以下のようなケースがあります。
- ユーザーが入力した情報をデータベースに登録するため、バックエンドに送信
- 登録されている日記データをバックエンドを経由して取得し、フロントエンドで表示
-
外部サービス(API)との接続
HTTP通信は、APIを介して外部サービスと接続する際にも使用されます。APIを使えば、次のようなデータを簡単に取得できます。
- 外部の地図APIからデータを取得して、アプリ内に表示
- 現在の天気情報をAPIから取得して、アプリ内に表示
-
動的なデータの提供
HTTP通信は、アプリが動的なデータをリアルタイムで提供する際にも欠かせません。ユーザーの操作や状況に応じてデータを送受信することで、ユーザーインターフェースを更新する仕組みを支えています。これにより、より便利で直感的なアプリケーション体験が実現します。
- ショッピングサイトで、検索結果をリアルタイムに表示
- SNSで、新しい投稿がタイムラインに自動的に反映
このように、さまざまなデータのやり取りをHTTP通信を利用することで実現できます。現在の便利で機能性の高いアプリは、HTTP通信が支えているのですね。
HTTP通信を行うために理解しておきたい3つのこと
HTTP通信を利用してさまざまなことができると知りました。通信には決められたルールや、通信の結果を表すメッセージなどがあります。ここから、通信を行うために理解しておきたい3つのポイントを紹介します。これらを理解することで、スムーズなデータのやり取りが行えるようになります。
1.HTTPメソッド
HTTPメソッドとは、HTTP通信でクライアントがサーバーのリソース(例:データやファイル)に対して「何をしたいか」を表す指示のことです。それぞれのメソッドには決められた役割があり、HTTP通信を行う上で重要なルールとなります。
HTTP通信で使用頻度の高いメソッドは次の通りです。
メソッド項目 | 操作内容 | 操作例 |
---|---|---|
GET | データの取得 | 商品一覧や詳細情報の取得 |
POST | データの登録 | 新しいユーザー登録やフォームデータ送信 |
PUT | データの更新 | リソース全体の更新 |
PATCH | 一部のデータ更新 | 特定のプロパティを部分更新 |
DELETE | データの削除 | ユーザーアカウントの削除 |
HTTPメソッドを理解することで、API通信を適切に行い、以下のメリットを得られます。
-
エラーやトラブルの回避
不適切なリクエストによるエラーや予期せぬ動作を防ぐことができます。
-
開発効率の向上
メソッドを正しく使うことで、コードの意図が明確になり、API通信部分の開発がスムーズになります。
2.HTTP メッセージ(HTTPリクエストとレスポンス)
HTTP通信はクライアントからWebサーバーへ送信されるリクエストと、サーバーからクライアントへ返信されるレスポンスの2種類のメッセージで成立します。それぞれの役割を簡単に見ていきましょう。
-
HTTPリクエスト
クライアントがサーバーに「何をしたいのか」を伝えるためのメッセージです。リクエストの形式は以下となります。
含まれるもの 内容 詳細内容 リクエストライン メソッド URL HTTPバージョン メソッド:GETなどの操作内容 URL:リクエスト先のパス HTTPバージョン:例 HTTP/1.1, HTTP/2 ヘッダー Host User-Agent Accept Authorizations Host:サーバーのホスト名 User-Agent:クライアント情報 Accept:クライアントが受け入れ可能な形式 Authorizations:認証情報 空行 ヘッダーとボディの間に挿入される空行 ヘッダーの終わりを表す HTTPボディ 空の場合もある POSTやPUTリクエストで送信されるデータ -
HTTPレスポンス
サーバーがリクエストに応じて「結果」を返すメッセージです。レスポンスの形式は以下となります。
含まれるもの 内容 詳細内容 ステータスライン HTTPバージョン ステータスコードステータスメッセージ HTTPバージョン:例 HTTP/1.1, HTTP/2 ステータスコード:処理結果(例:200, 404, 500など) ステータスメッセージ:コードの説明(例:OK, Not Found, Forbiddenなど) ヘッダー Content-Type Content-Length Set-Cookie Date Content-Type:レスポンスデータの形式(例:JSON、HTML) Content-Length:レスポンスデータのサイズ Set-Cookie:セッション情報や状態を維持するCookie情報 Date:レスポンスの生成日時 空行 ヘッダーとボディの間に挿入される空行 ヘッダーの終わりを表す HTTPボディ 空の場合もある リクエストの結果として返されるデータ
少し難しくなってしまいましたが、今すぐに全てを把握する必要はありません。このリクエストとレスポンスの内容を把握することは大切なため、開発をする中で通信の結果を見ながら徐々に慣れていきましょう。
この2つを理解することで、通信をする際に必要なデータを正しくリクエストでき、サーバーから適切なレスポンスを受け取れます。また、サーバーからのレスポンスがエラーになった際は、メッセージ情報を見れば、通信の問題点をすぐに見つけることができます。
3.HTTPステータスコード
HTTPステータスコードとはHTTPリクエストの結果を表す3桁の数字です。コード内容を知ることで、HTTP通信で何が起きているかを把握することができます。
クライアントからWebサーバーにリクエストを送信し、サーバーは処理に関するリソースをHTTPヘッダーと共にクライアントへ返信します。この返信される処理結果を表す3桁の数字が、HTTPステータスコードです。
HTTPステータスコードは100番台〜500番台まであり、以下の5つのクラスに分かれています。この番号を確認し、HTTP通信で何が起きているかを把握できるのです。
コード番号 | コード内容 | 詳細 | メッセージ例 |
---|---|---|---|
1xx | 情報レスポンス | 処理が進行中で、さらに指示を待つ必要がある状態 | 100 Continue |
2xx | 成功レスポンス | リクエストが正常に受け取られ、処理が完了した状態 | 200 OK |
3xx | リダイレクション | リソースが移動され、別のURLにリクエストする必要がある状態 | 301 Moved Permanently |
4xx | クライアントエラー | リクエストに問題があり、サーバーが処理できなかった状態 | 404 Not Found |
5xx | サーバーエラー | サーバー内部の問題で処理が失敗した状態 | 500 Internal Server Error |
ステータスコードやその詳細な内容は、以下の記事で詳しく解説しています。
-
HTTPステータスコードとは何?確認方法は?
HTTP通信を正しくスムーズに行うためには、今回紹介した3つのポイントを理解することが大切です。実際の開発や次のセクションで紹介するcurl
コマンドを活用し、リクエストやレスポンスを確認しながら少しずつ知識を深めていきましょう。焦らず取り組むことで、確実に実践で活かせるスキルが身につきますよ。
実践!curlコマンドでHTTP通信を体験しよう
ここまでHTTP通信について多くのことを学んできました。このセクションでは、実際に通信を行い、その結果を確認して理解を深めていきましょう。通信にはコマンドラインとcurl
コマンドを使用します。コマンドラインはPCにデフォルトでインストールされているもので構いません。
1つずつ段階を踏んで解説していきますので、一緒にHTTP通信を体験してみましょう。
curlコマンドは通信を行うためのツール
curl
(カール)コマンドは、コマンドラインからHTTPリクエストを送信して、サーバーとの通信を行うためのツールです。WebサーバーやAPIとの通信を簡単に試すことができるため、開発現場でよく使用されます。
「APIやバックエンドからどんなデータが返されるのか?」や「データ送信ができるか?」などを手軽に試せるので、使いこなせるようになると非常に便利です。
curl
を使うと、サーバーにリクエストを送信し、その結果としてレスポンスを受け取るというHTTP通信の基本的な流れを体験できます。ブラウザでは見えない部分も手動で確認できるため、「どのようにデータがやり取りされているのか」を具体的に知ることができます。
curl
コマンドを試すことで得られる知識やメリットは次のようなものがあります。
- リクエストとレスポンスの関係が視覚的に確認
- データの送信方法やメソッド、リクエストの仕組みを深く理解
- ステータスコード(例:200 OK, 404 Not Found)やエラーの原因を調べるスキルの習得
curlコマンドの確認方法とインストール(Windows、Mac)
Macには通常、curl
コマンドが標準でインストールされています。ターミナルを開いて以下のコマンドを入力して、インストールされているかを確認できます。
curl --version
インストールされていると以下のような結果が出力されます。
curl 8.1.2 (x86_64-apple-darwin23.0) libcurl/8.1.2 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.12 nghttp2/1.55.1
Windowsではcurl
がデフォルトで利用可能な場合があります(Windows 10以降)。利用可能か確認するには、コマンドプロンプト(cmd)またはPowerShellでMacと同様のコマンドを入力します。
インストールされていると以下のような結果が出力されます。
curl 8.9.1 (Windows) libcurl/8.9.1 Schannel zlib/1.3 WinIDN
もしインストールされていなければ、curl公式サイトからダウンロードしてインストールすることができます。
curlコマンドの基本的な使い方
今回はcurl
コマンドで、特定のURLへリクエストを送信して、その結果をコマンドラインに出力します。基本のコマンドは以下の通りです。
curl [オプション] [アクセスするURL]
たとえば、オプション-s
をつけてのリクエスト送信は以下のようにします。
curl -s https://www.envader-sample.com/
curlコマンドのオプション
curl
コマンドには多くのオプションが準備されています。一緒に使うと、さまざまな形でリクエストを操作することができます。以下はそのオプションの例です。
コマンド | 内容 |
---|---|
-o | 出力内容をファイルに書き出す |
-s | 通信情報を出力しない |
-S | 通信情報のエラーのみを出力 |
-I | レスポンスのHTTPヘッダー情報のみ出力 |
-i | レスポンスのヘッダーとボディの両方を出力 |
-v | リクエストのヘッダー情報を含んだレスポンス情報を出力 |
-X | メソッドを指定 例:-X POST でPOST送信を指定 |
-d | 送信するデータを指定 |
JSONPlaceholderを使用
このハンズオンではJSONPlaceholderを使用してリクエストを送信します。
JSONPlaceholderは、開発者がAPIを使ってデータのやり取りを練習できる無料のサービスです。
-
JSONPlaceholder
JSONPlaceholderでは、以下のHTTPメソッドとエンドポイントを使用し、リクエストを送信できます。
メソッド | エンドポイント |
---|---|
GET | /posts |
GET | /posts/1 |
GET | /posts/1/comments |
GET | /comments?postId=1 |
POST | /posts |
PUT | /posts/1 |
PATCH | /posts/1 |
DELETE | /posts/1 |
GETリクエストを送信
では、curl
コマンドを使用してHTTP通信を始めましょう。まずはGETリクエストを実行し、データを取得します。JSONPlaceholderのAPIエンドポイント/posts/1
へGETリクエストを送信し、レスポンスをコマンドラインに出力します。
curl https://jsonplaceholder.typicode.com/posts/1
このエンドポイントでは、JSONPlaceholderから特定の投稿データを取得できます。実際の開発では、ブログ記事の詳細情報や商品データを取得する際などに使用します。
レスポンスとして、以下のような投稿データ(JSON形式)が出力されているかと思います。
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}
このようにAPIへリクエストを送信し、受信できるデータの内容を簡単に確認することができます。データ取得のためのコードを作成せずに、データの内容を確認できるのは便利ですね。
POSTリクエストを送信
次にPOSTメソッドを使用して、サンプルデータを送信します。POSTなどGET以外のメソッドは、curlコマンドに-X
オプションをつけて指定します。
送信するデータはJSON形式で指定します。JSON(JavaScript Object Notation)は、API通信で広く使用されるデータ形式で、キーと値のペアで構成されています。
JSON形式を指定するには、-H
オプションと"Content-Type: application/json"
と追記し、-d
オプションをつけ送信するデータを入力します。
curl -X [メソッド] -H "Content-Type: application/json" -d "[POSTするデータ]" [アクセスするURL]
実際に、/posts
エンドポイントへデータを送信してみましょう。オプションが多くなるとコードが長くなるため、\
(改行コード)をつけて見やすくしています。
curl -X POST -H "Content-Type: application/json" \
-d '{"title":"エンベーダー","body":"エンジニア予備軍のためのITインフラ学習ゲーム","userId":1}' \
https://jsonplaceholder.typicode.com/posts
コマンドを実行すると以下の結果が出力されます。サーバーから、POSTリクエストされたことを示すJSONデータと、新しい投稿のID("id": 101
)などが出力されます。
{
"title": "エンベーダー",
"body": "エンジニア予備軍のためのITインフラ学習ゲーム",
"userId": 1,
"id": 101
}
POSTリクエストを送信しましたが、JSONPlaceholderの実際のサーバーデータは更新されていません。POSTメソッドを使用し、データを送信する擬似的な体験ができました。
エラーとステータスコードの確認
最後に、わざとエラーを発生させて、HTTP通信でどのようなデータが返されるかを確認してみましょう。
存在しないURLにGETリクエストを送信します。/noexistendpoint
はJSONPlaceholderに存在しないエンドポイントです。今回は-I
オプションを使用して、レスポンスヘッダーのみを表示します。
curl -I https://jsonplaceholder.typicode.com/noexistendpoint
リクエストを実行すると、次のようなレスポンスが返ってきます。
HTTP/2 404
...以下略
HTTPバージョンHTTP/2
でリクエストが送信され、HTTPステータスコード404
エラーが発生していることがわかります。HTTPステータスコード404
は「リクエストに問題がある」ということでしたね。これにより、エラーの原因は、クライアント(リクエストを送った側)の「URLの誤り」などであると知ることができます。
curlコマンドでHTTP通信の理解を深める
このハンズオンでは、curl
コマンドを使って基本的なHTTPメソッドであるGETとPOSTを実行し、そのレスポンスをターミナル上で確認しました。これにより、HTTP通信でどのようなデータがやり取りされているのかを実際に目で見て理解することができ、データの送信方法や正しいメソッドを使った通信の仕組みを学ぶことができたと思います。
さらに、エラーが発生した際のレスポンスを確認し、HTTPステータスコードを使って「どのようなエラーが起きているのか」を知る方法も体験しました。
curl
コマンドは、今回紹介した基本操作以外にも、ヘッダーのカスタマイズやファイルダウンロードなど、多くの機能を持つ便利なツールです。このハンズオンをきっかけに、ご自身でもAPIやWebサイトへのリクエストを試しながら、HTTP通信の理解をさらに深めてみてください!
この記事で学んだこと
ここまでHTTP通信について学んできました。最後に大切なポイントを振り返りましょう。
HTTP通信とは
HTTP(Hypertext Transfer Protocol)通信とは、WebブラウザとWebサーバーが情報をやり取りするためのルール(プロトコル)にしたがって行われる通信です。
なぜHTTP通信を学ぶ必要があるのか
フロントエンドエンジニアは、バックエンドやAPIからデータを取得してユーザーインターフェースを作る役割を担います。このデータ取得や送信に使われるのがHTTP通信です。HTTP通信を学ぶことで、データの扱いやエラー時の対応がスムーズにできるようになります。
HTTP通信を行うために理解しておきたい3つのこと
-
HTTPメソッド
HTTPメソッドとは、HTTP通信でクライアントがサーバーのリソースに対して「何をしたいか」を表す指示のことです。
-
HTTP メッセージ(HTTPリクエストとレスポンス)
HTTP通信はクライアントからWebサーバーへ送信されるリクエストと、サーバーからクライアントへ返信されるレスポンスの2種類のメッセージで成立します。
-
HTTPステータスコード
HTTPステータスコードとはHTTPリクエストの結果を表す3桁の数字です。コード内容を知ることで、HTTP通信で何が起きているかを把握することができます。
この記事を通じて、HTTP通信の基本的な仕組みやその重要性について理解を深めていただけたのではないでしょうか。フロントエンドエンジニアにとって、HTTP通信の知識はバックエンドやAPIと連携する上で欠かせないスキルです。今回学んだ内容を基礎として、実際の開発やツールを使った練習を重ねることで、より実践的なスキルを身につけていきましょう!
参考資料
以下のリンクは、この記事で説明した手順や概念に関連する参考資料です。より詳しく学びたい方は、ぜひご覧ください。
-
Wikipedia Hypertext Transfer Protocol
-
MDN web docs
https://developer.mozilla.org/ja/docs/Web/HTTP/Status
-
アイティーエム - HTTPステータスコード一覧とリクエストとレスポンスの意味を解説
https://www.itmanage.co.jp/column/http-www-request-response-statuscode/
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2024.08.30
クラウドコンピューティングの選択肢 最適な戦略を見つける方法
クラウドコンピューティングにはマルチクラウド以外にもさまざまな選択肢があり、それぞれに特徴や利点があります。クラウドサービスを選ぶ際には、これらの選択肢を理解し、企業のビジネスニーズに最も適したものを選択することが重要です。
- ネットワーク
2022.11.20
【基本から解説】NATの仕組みとは?
NATについて初心者でもわかりやすいように解説しました。
- ネットワーク
2023.08.28
ネットワークプロトコルTCPとUDPの違いとその用途
TCPとUDPの知識はエンジニアとしての技術的な基盤を強化し効果的な問題解決能力の向上に寄与します。
- ネットワーク