プログラミングBlog

プログラミング学習用

ちょいちょい書いてます

サーバーとは?Node.jsで立ててみる。

サーバーとは?

サーバーはクライアントからの要求(リクエスト)に応じて、何らかのサービス(処理)を提供する側の機能あるいはシステムである。

ja.wikipedia.org
サーバーについて調べて満たしたが、かなり抽象的な言葉だと感じました。
リクエストとレスポンスの話をよく聞きますが、リクエストに対してレスポンス(データを提供)していればコンピューターだけではなくプログラムもサーバーになりうる??
さらに分類していくと、物理サーバーと仮想サーバーに分けられる。

物理サーバー とは?

物理サーバーとは物理的に存在する1台のサーバーのこと。
ハードウェア上で、原則1つのOSを利用する。

仮想サーバー とは?

仮想サーバーとは1台の物理サーバー上で、専用のソフトウェアを使い、複数の仮想的なサーバーを構築すること。
CPUやメモリは物理サーバーのリソースを利用する。分割することで複数のOSと複数のサーバーを動作させることが可能。

サーバーの用途

提供するサービスはサーバーの種類によって異なり、WEBサーバー、メールサーバー、FTPサーバー、DBサーバー、SSHサーバー等がある。
今回はWEBサーバーについてふれていきたい。

WEBサーバーとは?

サーバーの種類の一つで、クライアント(ブラウザ)側からの要求(リクエスト)に対して、文書や画像などをの表示を提供するサーバーのこと。

特徴

  • クライアントとサーバーがやり取りを行う際にHTTPという通信プロトコル(ルール)を使用する。
  • プロトコル(通信の決まり事)があることで、異なる機器同士のデータ交換を可能としている。
  • HTTP(プロトコル)は主にhtmlなどのファイルを送信、受信する際に使う。

Node.jsでWEBサーバーを立ててみる

公式ページのサンプルを参考にしました。
nodejs.org

ハンズオン①

WEBサーバーを立てていきます。

// httpモジュール
const http = require('http');

// port番号
const port = 3000;
// hostname
const hostname = '127.0.0.1'

// サーバーを建てる
var server = http.createServer(function (request, response) {
    // requestURLの確認
    console.log(request.url);
    // requestが正常に終了したかの確認
    console.log(response.statusCode);
    // 表示
    response.end('hello');

});
// portとipを設定
server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});

ハンズオン①の結果を見てみる。

ブラウザを立ち上げてURL欄にhttp://127.0.0.1:3000/を打ち込む。
ちなみに打ち込むURLの説明をすると、httpの部分が通信プロトコル
127.0.0.1の部分がローカル・ループバック・アドレスと呼ばれ、自分自身のこと。
3000の部分がport番号となります。
request.urlの部分でurl欄に入れたクエリが表示される。
http://127.0.0.1:3000/の場合だと/が表示される
response.statusCodeでrequestが成功したことがわかる。(成功レスポンスの200が表示される。
response.end('hello')ここで文字列をブラウザ側に提供していることがわかる。

ハンズオン②

次はcontentTypeとstatusCodeを指定してみる。

// httpモジュール
const http = require('http');
var fs = require('fs');

// port番号
const port = 3000;
// hostname
const hostname = '127.0.0.1'

// サーバーを立てる
var server = http.createServer(function (request, response) {
    // File読込
    fs.readFile('./cat.png',
        function (err, data) {
            // statusとcontentTypeを指定
            response.writeHead(200, { 'Content-Type': 'image/png' });
            // 送信後、終了
            response.end(data);
        }
    );
})

// portとipを設定
server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});

ハンズオン②の結果を見てみる。

fs.readFile('./cat.png',にてcat.pngファイル(画像)を読み込んでいます。
response.writeHead(200, { 'Content-Type': 'image/png' });この箇所でステータスコード200(成功)とContent-Typeを指定してみました。
ブラウザ側に返された情報がどんなものなのかをContent-Typeで伝えています。

参考サイト

httpについて

qiita.com

プロトコル

通信プロトコルのHTTPとは何かわかりやすく解説します! | 押さえておきたいWeb知識

サーバー

www.rworks.jp
developer.mozilla.org