NodejsのHTTPモジュールの解析

不言
不言オリジナル
2018-06-30 15:28:161394ブラウズ

この記事では主に Nodejs の Http モジュールの分析を紹介します。これには特定の参考値がありますので、必要な方は参考にしてください。

従来の HTTP サーバーは Aphche、Nginx、およびIIS は同様のソフトウェアで構築されますが、Nodejs ではサーバーの構築に使用できる http モジュールが提供されています。必要な方は参考にしてください。 it

一、http サーバー

従来の HTTP サーバーは Aphche、Nginx、IIS などのソフトウェアによって構築されることはわかっていますが、Nodejs はそれを必要とせず、http モジュールを提供します。サーバーを単独で構築するために使用されます。例:

var http = require("http");
http.createServer(function(req,res) {
 res.writeHead(200,{
  "content-type":"text/plain"
 });
 res.write("Hello NodeJs");
 res.end();
}).listen(3000);

http モジュールは、HTTP サーバーと単純な HTTP クライアントをカプセル化します。 http.Server() はイベントベースの HTTP サーバーを作成するために使用され、http.request はイベントベースの HTTP サーバーを作成するために使用されます。 () および http.get( ) は、クライアントとして HTTP サーバーへのリクエストを開始できます。ここで使用される createServer() メソッドは、http.Server オブジェクトを返します。text/plain は、コンテンツが -type に設定されている場合、ファイルをプレーン テキスト形式に設定することを意味します。 html. ブラウザがこの種のファイルを取得すると、HTML パーサーを自動的に呼び出して、それに応じてファイルを処理します。さらに、新しい http.Server() コンストラクター メソッドを使用して http.Server オブジェクトを作成することもできます。例:

var http = require("http");
var server = new http.Server();
server.on("request",function(req,res) {
  ...
}).listen(3000);

上記のコードは http.Server オブジェクトを直接作成し、リクエスト イベントを追加します。それを聞く人。 createServer() メソッドを使用して作成された http.Server オブジェクトは、デフォルトでリクエスト イベント リスナーを追加しますが、これは省略されています。

http.Server のイベントについては上で説明しました。http.Server で最もよく使用されるイベントは、http リクエストを受信したときにトリガーされる「request」です。 「リクエスト」イベントでは、コールバック関数に渡されるパラメーター req と res は、それぞれ http.IncomingMessage と http.ServerResponse のインスタンスです。

http.IncomingMessage クラスには、クライアントから送信された http リクエスト情報が含まれており、これは Access で使用できます。応答ステータス、メッセージ ヘッダー、データ (例:

*headers/<object> - 请求头或响应头的对象
*httpVersion/<string> - http协议版本,可能的值有"1.1"或"1.0"
*method/<string> - 请求的方法,例如"GET"、"POST"等
*statusCode/<number> - http响应状态码
*statusMessage/<string> - http响应状态消息
*url/<string> - 发送http请求的客户端的url

http.ServerResponse クラス) は、クライアントに返される情報です。応答ヘッダー、応答コンテンツを返し、リクエストを終了するための 3 つの重要なメソッドがあります。 :

writeHead(statusCode[, statusMessage][,headers]): 要求元のクライアントに応答ヘッダーを送信します。この関数はリクエスト内で最大 1 回呼び出すことができます。呼び出されない場合は、応答ヘッダーが自動的に生成されます

write。 ( chunk[,encoding][,callback]): 応答コンテンツを要求元のクライアントに送信します。chunk が文字列の場合、デフォルトは utf-8 です。 () メソッドは

end([data][,encoding][,callback]) を呼び出す前に複数回呼び出すことができます。この関数が呼び出されない場合、クライアントは応答を終了し、すべての送信が終了したことを通知します。ステータス

その他の http.Server クラスのイベントについては、公式ドキュメントを参照してください: http://nodejs.cn/api/http.html

2. http クライアント http モジュールが提供するhttp.request() と http.get() の 2 つのメソッドの機能は、クライアントとして http サーバーへのリクエストを開始することです。

http.request(options[,callback])方法
http.request()方法返回一个http.ClientRequest的实例。其中,options是一个对象,表示请求的参数。包括:
*protocol/<string> - 使用的协议,默认为http
*host/<string> - 请求发送至的服务器的域名或 IP 地址,默认为"localhost"
*hostname/<string> - host的别名
*port/<number> - 远程服务器的端口号,默认为80
*method/<string> - 指定http请求方法,默认为"GET"
*path/<string> - 请求相对于根的路径,默认是"/",QueryString应该包含在其中。例如:/index.html?page=12
*headers/<object> - 包含请求头的对象
*timeout/<number> - 它设置了 socket 等待连接的超时时间

例:

var http = require("http");
var querystring = require("querystring");
var postData = querystring.stringify({
  "content":"测试一下",
  "mid":8837
});
var options = {
  hostname:"www.imooc.com",
  port:80,
  path:"/course/document",
  method:"POST",
  headers:{
    "Accept":"application/json, text/javascript, */*; q=0.01",
    "Accept-Encoding":"gzip, deflate",
    "Accept-Language":"zh-CN,zh;q=0.8",
    "Connection":"keep-alive",
    "Content-Length":postData.length,
    "Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
    "Cookie":"",
    "Host":"www.imooc.com",
    "Origin":"http://www.imooc.com",
    "Referer":"http://www.imooc.com/video/8837",
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2763.0 Safari/537.36",
    "X-Requested-With":"XMLHttpRequest",
  }
}
var req = http.request(options,function(res){
  res.on("data",function(chunk){
    console.log(chunk);
  });
  res.on("end",function(){
    console.log("完毕!");
  });
  console.log(res.statusCode);
});
req.on("error",function(err){
  console.log(err.message);
})
req.write(postData);
req.end();

リクエスト中にエラーが発生した場合、返されたリクエストオブジェクトで「error」イベントがトリガーされます。

http.request() を使用する必要があります。本体にデータが書き込まれていない場合でも、 req.end() を呼び出してリクエストの終了を示します

http.get(options[,callback]) メソッド


http.get() メソッドは、 http.request() メソッドのバージョンとの主な違いは、http.get() がリクエスト メソッドを自動的に「GET」リクエストに設定し、手動で req.end() を呼び出す必要がないことです

上記は全体ですこの記事の内容が皆さんの学習などに役立つことを願っています。その他の関連コンテンツについては、PHP 中国語 Web サイトに注目してください。

関連する推奨事項:

HTTP プロトコルリクエストを処理するための Node.js の Request モジュールの使用方法の概要


Node のクラスターモジュールについて学ぶ


以上がNodejsのHTTPモジュールの解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。