Web サーバーの仕組み
私たちが通常 Web を閲覧するときは、ブラウザを開き、URL を入力して閲覧したいコンテンツを表示します。この一見単純なプロセスの背後には、非常に複雑な操作が隠されています。
通常のインターネット アクセス プロセスでは、システムは実際に次のことを行います。
- ブラウザ自体がクライアントであり、ブラウザに URL (URL) を入力すると、ブラウザはまず DNS サーバーに要求し、DNS を通じて対応するドメイン名に対応する IP を取得し、IP アドレスを通じて対応するサーバーを見つけます。 TCP 接続の確立を要求します。
- サーバーとの接続を確立した後、ブラウザは HTTP リクエスト (リクエスト) パッケージをサーバーに送信します。
- リクエスト パケットを受信した後、サーバーはリクエスト パケットの処理を開始し、独自のサービスを呼び出して、HTTP 応答 (応答) パケットを返します。
- サーバーから応答を受信した後、クライアントは応答パケット内の本文のレンダリングを開始し、すべてのコンテンツを受信した後にサーバーとの TCP 接続を切断します。
上の図から、Web サーバーの動作原理は次のように簡単に要約できます。
- クライアントは、TCP/IP プロトコルを通じてサーバーとの TCP 接続を確立します。
- クライアントは、HTTP プロトコル要求パケットをサーバーに送信し、サーバー内のリソース ドキュメントを要求します。
- サーバーは HTTP プロトコル応答パケットをクライアントに送信します。要求されたリソースに動的言語コンテンツが含まれている場合、サーバーは動的言語の解釈エンジンを呼び出して「動的コンテンツ」を処理し、処理されたデータをクライアントに返します。
- クライアントはサーバーから切断され、クライアントは HTML ドキュメントを解釈し、クライアント画面にグラフィカルな結果を表示します。
簡単なWebサーバーを構築する
Web サーバーの動作原理は前に簡単に紹介しましたが、Go 言語で Web サーバーを構築するにはどうすればよいでしょうか?サンプルコードは次のとおりです。
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", index) // index はurlにリクエストが送信されたときに呼び出される関数です
log.Fatal(http.ListenAndServe("localhost:8000", nil))
}
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "IT基礎")
}
go run
コマンドを使用して上記のコードを実行します。
go run main.go
実行後、プロンプト メッセージは表示されませんが、コマンド ライン ウィンドウが占有されます (他のコマンドは入力できません)。この時点で、ブラウザに「localhost:8000」と入力すると、次の図に示す内容が表示されます。これは、サーバーが正常に実行されたことを意味します。
ヒント: Web サーバーを実行するとコマンド ライン ウィンドウが占有されます。Ctrl+C キーの組み合わせを使用して終了できます。
上記のコードは Web サーバーの単純なアプリケーションを示しているだけです。これを改良して、このサーバーのページを追加し、アクセス ルートを設定しましょう。
まず、html ファイルを準備し、index.html という名前を付けます。コードは次のとおりです。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>IT基礎</title>
</head>
<body>
<h1>IT基礎</h1>
</body>
</html>
次に、上で書いた Web サーバーのコードを次のように変更するだけです。
package main
import (
"io/ioutil"
"log"
"net/http"
)
func main() {
// /の後ろにindexを追加して、アクセスパスを指定します。
http.HandleFunc("/index", index)
log.Fatal(http.ListenAndServe("localhost:8000", nil))
}
func index(w http.ResponseWriter, r *http.Request) {
content, _ := ioutil.ReadFile("./index.html")
w.Write(content)
}
go run
コマンドを使用して次を実行します。
go run main.go
正常に実行されたら、次の図に示すように、ブラウザに「localhost:8000/index」と入力して追加したページを表示します。