Webを全く知らない私から、Webを全く知らないあなたへ。（HTTP、CGIなど）

# はじめに
　普段プログラミングを勉強している人間にとって、Web関連の知識を得ることはあまりありません。そのため、「Webアプリケーションを作成してみよう」と意気込んでも、サーバーって正確にはどんな役割？HTTPって？、RESTってなんだ？などなど頭を抱えてしまうシーンもあるのではないでしょうか（私はすべてあります）。
　この記事では、そのような悩みを抱えている私のアウトプットとなります。そもそも私自身詳しくないので、Webに詳しくない方に参考になるのではないかなと思います。
### 使用教材
基本的にはこちらの教材をメインに進めさせていただきます。

[「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか](https://www.amazon.co.jp/%E3%80%8C%E3%83%97%E3%83%AD%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AEWeb%E6%8A%80%E8%A1%93%E5%85%A5%E9%96%80%E3%80%8D-%E2%80%95%E2%80%95%E3%81%AA%E3%81%9C%E3%80%81%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AFWeb%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%E9%96%8B%E7%99%BA%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B-%E5%B0%8F%E6%A3%AE-%E8%A3%95%E4%BB%8B/dp/4774142352/ref=sr_1_1?adgrpid=119676456950&hvadid=649080378147&hvdev=c&hvqmt=e&hvtargid=kwd-363155944004&hydadcr=27268_14653462&jp-ad-ap=0&keywords=%E3%83%97%E3%83%AD%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AEweb%E6%8A%80%E8%A1%93%E5%85%A5%E9%96%80&qid=1680085475&sr=8-1)

　初心者向けに書かれているようなので、しっかりと勉強したいよ～って人はこちらを購入していただければよろしいかと。その他もろもろ、参考にした記事やサイトは参考文献として載せておきます。

# すべてはHTMLから始まった（WWW、HTTP）
  HTMLはWebサイトなどの記述ができるマークアップ言語で、CERNのバーナーズ＝リー博士によって考えられました。HTMLのすごいところは「Hyper Link（ハイパーリンク）」と呼ばれるシステムで、リンクを選択すればそのリンクを持つテキストを参照できるところです。このテキストの参照がインターネットにより行うことで、「WWW（World-Wide-Web）」という考えが生まれました。

　テキストの参照を行うのに必要となるのが、「Webクライアント」と「Webサーバー」です。「Webクライアント」がお手持ちのパソコン（OS）、「Webサーバー」がGoogleの地下にありそうなコンピュータのようなイメージで問題ないでしょう。

![Web基礎.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3293324/3f67ec0c-1688-f0f6-ccfb-ff00221945d1.png)


　「Webクライアント」がリクエストを送り、「Webサーバー」がレスポンスを返すというシンプルな仕組みになっています。（ここら辺は初心者の私でも理解できますね）。このリクエストをURLで管理することで、「Webクライアント」が欲しい情報を間違えることなく取得できます。

　しかし、リクエストやレスポンスを行うといえど、一律の規定というのは必要です。ここでどのように情報をやり取りするか取り決めたものを「通信プロトコル」と呼びます。この通信プロトコルが異なるコンピュータ同士では、情報のやり取りを行うことができないのです。

　HTMLを使用したやり取りにもプロトコルが存在します。それが「HTTP（Hyper Text Transfer Protocol）」です。なんとこれもバーナーズ＝リー博士が考案されたとか。

# CGIってなんだ？

 このようなリクエストに対してレスポンスを返すという仕組みはシンプルですが、シンプルなあまり副作用もありました。例えば自動で記事を投稿したりだとか、来訪者をカウントしたりだとか。今のWebサイトのような動的なコンテンツを機能させることはできないのです。
　そこで生み出されたのが「CGI（Common Gateway Interface）」です。
>**CGI**
とは、Webサーバが、Webブラウザなどからの要求に応じてプログラムを実行する仕組みの一つ。Web上で最も初期から用いられている動的なプログラム起動のための技術仕様で、多くのWebサーバーソフトウェアが対応している。（[CGIとは - 意味をわかりやすく - IT用語辞典 e-Words](https://e-words.jp/w/CGI.html)より引用）

![WebーCGI.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3293324/21595b89-8dd1-2be0-3b8a-f91d64df2af8.png)


　これにより複雑なWebサイト（掲示板やショッピングサイトなど）を作成することができるようになりました。

# サーブレットってなんだ？
　しかしやはりCGIにも問題はあったのです。リクエストのたびにCGIを通さなければならないので、規模が大きくになるにつれ処理も大きくなってしまうのです。つまり、処理速度が低下しちゃうってことですね。そこで生まれたのが「サーブレット」です。
>**JSP**
とは、Webページ内にJavaプログラムを埋め込み、これをサーバ上で実行して結果を反映したページを動的に生成することができる技術。（[サーブレット(Java Servlet)とは？【概要を5分で把握】 - システム開発のプロが発注成功を手助けする【発注ラウンジ】](https://hnavi.co.jp/knowledge/blog/java-servlet/)より引用）

![Web-サーブレット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3293324/59aa9ed6-8175-6382-f6b5-9bb168f9e8c8.png)
※上イメージはかなり簡略化しています

　基本的なところはCGIと変わらないのですが、使用するたびにプロセスを起動する必要がないので、処理を速く行えます。またサーブレッはJavaで動くのですが、OSに依存することなく動きます。（プログラムを変えずにwindowsやmac、Linux環境で動く）

# JSPってなんだ？
　サーブレットにも問題があります。それは保守・運用がしにくい点です。後からプログラムを変更しようとしても、すんなりいかなく作業効率がよくありません。そこで生まれたのが「JSP（Java Server Pages）」です。
>JSP
とは、Webページ内にJavaプログラムを埋め込み、これをサーバ上で実行して結果を反映したページを動的に生成することができる技術。（[JSPとは - 意味をわかりやすく - IT用語辞典 e-Words](https://e-words.jp/w/JSP.html)より引用）

　これによりWebアプリケーションを、より効率的に作業できるようになりました。サーブレットとJSPの違いは、サーブレットはJavaの中にHTMLを組み込むのに対し、JSPはHTMLの中にJavaコードを組み込んでいます。

　それからも、様々なライブラリやフレームワークの誕生により、Webアプリケーションの開発はより簡単に、より多くの処理を実現できるようになったのです。

# あとがき
　とりあえず、本日はここで一区切りとします。ただこのシリーズは、もうしばらく続けるつもりです。使用教材は本当にわかりやすいので、ぜひ購入をお勧めします、それでは。（次回はHTTPについてより詳しく勉強します）

# 参考文献
こちらのサイトを参考にしました。
[【IT用語】初心者必見！URLのWWW（World Wide Web）の意味をわかりやすく解説 | 押さえておきたいWeb知識 ](https://www.web-knowledge-info.com/wp/web_basic_knowledge1/)
[静的コンテンツ/動的コンテンツの違いを１分で解説【初心者向け】 ](https://it-biz.online/it-skills/static-dynamic/)

### こちらもどうぞ

https://qiita.com/ema_kurida/items/7b6f567adea2aca7aa81