記事ディレクトリ
httpモジュールとは
httpモジュールは、Webサーバーを作成するためにNode.jsによって提供される公式モジュールです。httpモジュールが提供するhttp.createServer()メソッドを使用すると、通常のコンピューターを簡単にWebサーバーに変換して、外部のWebリソースサービスを提供できます。
ネットワークノードでは、リソースの消費を担当するコンピューターをクライアントと呼び、
ネットワークリソースを外部に提供するコンピューターをサーバーと呼びます。
httpモジュールを使用してWebサーバーを作成する場合は、最初にそれをインポートする必要があります。
const http = require('http');
httpモジュールの役割
サーバーと通常のコンピューターの違いは、IIS、ApacheなどのWebサーバーソフトウェアがサーバーにインストールされていることです。これらのサーバーソフトウェアをインストールすることで、通常のコンピューターをWebサーバーに変えることができます。
IISはasp.net開発でよく使用されます
Apacheはphp開発でよく使用されます
Node.jsでは、IIS、ApacheなどのサードパーティのWebサーバーソフトウェアを使用する必要はありません。Node.jsが提供するhttpモジュールをベースにしたサーバーソフトウェアを数行の簡単なコードで簡単に記述して、外の世界にWebサービスを提供できるからです。
サーバー関連の概念
IPアドレス
IP 地址
これはインターネット上のすべてのコンピューターの一意のアドレスであるため、IPアドレスは一意です。「パソコン」と「電話」を比較すると、「IPアドレス」は「電話番号」に相当し、相手のIPアドレスを知っていることを前提に、対応するパソコンとのデータ通信を行うことができます。
IPアドレスの形式:通常、(abcd)の形式で「ドット付き10進数」で表されます。ここで、a、b、c、dはすべて0〜255の10進数の整数です。例:ドット付き10進法のIPアドレス(192.168.1.1)
知らせ:
- インターネット上のすべてのWebサーバーには独自のIPアドレスがあります例:Windowsターミナルでping www.baidu.comコマンドを実行して、BaiduサーバーのIPアドレスを表示できます。
- 開発中、コンピューターはサーバーとクライアントの両方になります。テストを容易にするために、ブラウザーに127.0.0.1のIPアドレスを入力して、サーバーとしてコンピューターにアクセスできます。
ドメイン名とネームサーバー
IPアドレスはネットワーク上のコンピュータを一意にマークできますが、IPアドレスは数字の長い文字列であり、直感的で覚えにくいため、人々は別の文字ベースのアドレス指定スキーム、いわゆるアドレススキームを発明し域名(Domain Name)地址
ました。
IPアドレスとドメイン名は1対1で対応しており、この対応はコンピュータと呼ばれるコンピュータに保存され域名服务器(DNS,Domain name server)
ます。ユーザーは覚えやすいドメイン名で対応するサーバーにアクセスするだけで、対応する変換作業はドメインネームサーバーによって実現されます。したがって、ドメインネームサーバーは、IPアドレスとドメイン名の間の変換サービスを提供するサーバーです。
知らせ:
- インターネット上のコンピュータも、IPアドレスだけで問題なく動作します。しかし、ドメイン名の恵みにより、インターネットの世界はより便利になる可能性があります。
- 開発およびテスト中、127.0.0.1に対応するドメイン名はlocalhostであり、それらはすべて私たち自身のコンピューターを表しており、使用効果に違いはありません。
ポート番号
コンピュータのポート番号は、実際の家番号のようなものです。家番号を通じて、持ち帰り用の兄弟は、建物全体の多くの部屋で持ち帰りを正確にあなたに届けることができます。
同様に、コンピューターでは、何百ものWebサービスを実行できます。各Webサービスは、一意のポート番号に対応しています。クライアントから送信されたネットワーク要求は、対応するWebサービスに正確に渡され、ポート番号を介して処理されます。
知らせ:
- 各ポート番号は、複数のWebサービスで同時に使用することはできません。
- 実際には、URLのポート80は省略できます。
ポート80はHTTP(HyperText Transport Protocol)に対応しています。これは、インターネットサーフィンで最も頻繁に使用されるプロトコルであり、主にWWW(World Wide Web)で情報を送信するためのプロトコルです。
最も基本的なWebサーバーを作成する
プロセスの作成
Webサーバーを作成するための基本的な手順:
- httpモジュールをインポートする
- Webサーバーインスタンスを作成します
- リクエストイベントをサーバーインスタンスにバインドし、クライアントのリクエストをリッスンします
- サーバーを起動します
注:この方法で作成したサーバーには、他のユーザーではなく、自分だけがアクセスできます。あなたはこれの使用法を尋ねているかもしれません。
開発段階では、サーバー側とブラウザ側の両方が同じコンピュータ上で開発されているためです。httpモジュールは、開発要件をすばやく満たすことができます。
①httpモジュール
をインポートする外部にWebサービスを提供するためにコンピュータ上にWebサーバーを作成する場合は、httpモジュールをインポートする必要があります。②Web
サーバーインスタンス
を作成するhttp.createServer()メソッドを呼び出してWebをすばやく作成しますサーバーインスタンス:
③リクエストイベント
をサーバーインスタンスにバインドするリクエストイベントをサーバーインスタンスにバインドして、クライアントから送信されるネットワークリクエストを監視します。④
サーバー
を起動しますサーバーインスタンスの.listen()メソッドを呼び出して、現在のWebサーバーインスタンスを起動します。
全体的なコード実装:
// 1. 导入 http 模块
const http = require('http')
// 2. 创建 web 服务器实例
const server = http.createServer()
// 3. 为服务器实例绑定 request 事件,监听客户端的请求
server.on('request', function (req, res) {
console.log('Someone visit our web server.')
})
// 4. 启动服务器(让服务器监听8080端口)
server.listen(8080, function () {
console.log('server running at http://127.0.0.1:8080')
})
リクエストリクエストオブジェクト
サーバーがクライアントの要求を受信する限り、サーバーはserver.on()を介してサーバーにバインドされた要求イベントハンドラーを呼び出します。イベントハンドラでクライアントに関連するデータまたはプロパティにアクセスする場合は、次の方法を使用できます。
req.urlは、クライアントによって要求されたURLアドレス
です。req.methodは、クライアントによって要求されたメソッドタイプです。
例えば:
const http = require('http')
const server = http.createServer()
// req 是请求对象,包含了与客户端相关的数据和属性
server.on('request', (req) => {
// req.url 是客户端请求的 URL 地址
const url = req.url
// req.method 是客户端请求的 method 类型
const method = req.method
const str = `Your request url is ${
url}, and request method is ${
method}`
console.log(str)
})
server.listen(80, () => {
console.log('server running at http://127.0.0.1')
})
上記のコードでは、サーバーでリクエストのコンテンツのみを処理し、応答しないため、クライアントは返されたデータを取得できません。
res応答オブジェクト
サーバーのリクエストイベントハンドラーで、サーバー関連のデータまたはプロパティにアクセスする場合は、次の方法を使用できます。
例:
const http = require('http')
const server = http.createServer()
// req 是请求对象,包含了与客户端相关的数据和属性
server.on('request', (req, res) => {
// req.url 是客户端请求的 URL 地址
const url = req.url
// req.method 是客户端请求的 method 类型
const method = req.method
const str = `Your request url is ${
url}, and request method is ${
method}`
console.log(str)
// 调用 res.end() 方法,向客户端响应一些内容
res.end(str)
})
server.listen(80, () => {
console.log('server running at http://127.0.0.1')
})
中国語の文字化けした文字の問題を解決する
中国語のコンテンツをクライアントに送信するためにres.end()メソッドを呼び出すと、文字が文字化けする問題が発生します。このとき、コンテンツのエンコード形式を手動で設定する必要があります。
res.setHeader('Content-Type', 'text/html; charset=utf-8')
res.setHeader()メソッドを呼び出して、Content-Type応答ヘッダーを設定し、中国語の文字化けした文字の問題を解決します。
例:
const http = require('http')
const server = http.createServer()
server.on('request', (req, res) => {
// 定义一个字符串,包含中文的内容
const str = `您请求的 URL 地址是 ${
req.url},请求的 method 类型为 ${
req.method}`
// 调用 res.setHeader() 方法,设置 Content-Type 响应头,解决中文乱码的问题
res.setHeader('Content-Type', 'text/html; charset=utf-8')
// res.end() 将内容响应给客户端
res.end(str)
})
server.listen(80, () => {
console.log('server running at http://127.0.0.1')
})
サーバー側のコードを変更するたびに、サーバーを再起動して有効にすることを忘れないでください。
さまざまなURLに従ってさまざまなHTMLコンテンツに応答する
方法:クライアントの要求アドレスを取得してから、ターゲットを絞った応答を行います。
例:ウェブサイトのホームページと関連ページへの対応は異なります
実装手順:
①リクエストのURLアドレスを取得
②デフォルトのレスポンスコンテンツを404に設定見つかりません③ユーザーがリクエストしたのが/または/index.html
ホームページ
かどうかを確認します④ユーザーがリクエストしたのが/about.htmlかどうかを確認します
中国語の文字化けを防ぐためにContent-Type応答ヘッダーを設定
する✧res.end()を使用してクライアントに応答する
コード:
const http = require('http')
const server = http.createServer()
server.on('request', (req, res) => {
// 1. 获取请求的 url 地址
const url = req.url
// 2. 设置默认的响应内容为 404 Not found
let content = '<h1>404 Not found!</h1>'
// 3. 判断用户请求的是否为 / 或 /index.html 首页
// 4. 判断用户请求的是否为 /about.html 关于页面
if (url === '/' || url === '/index.html') {
content = '<h1>首页</h1>'
} else if (url === '/about') {
content = '<h1>关于页面</h1>'
}
// 5. 设置 Content-Type 响应头,防止中文乱码
res.setHeader('Content-Type', 'text/html; charset=utf-8')
// 6. 使用 res.end() 把内容响应给客户端
res.end(content)
})
server.listen(80, () => {
console.log('server running at http://127.0.0.1')
})