Maison  >  Article  >  interface Web  >  Analyse du module Http de Nodejs

Analyse du module Http de Nodejs

不言
不言original
2018-06-30 15:28:161350parcourir

Cet article présente principalement l'analyse du module Http de Nodejs. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

Nous savons que le serveur HTTP traditionnel. est composé de Il est construit avec des logiciels tels que Aphche, Nginx, IIS, etc., mais Nodejs n'en a pas besoin et fournit le module http, qui peut être utilisé pour construire le serveur. à vous. Les amis qui en ont besoin peuvent s'y référer Bar

1. Serveur http

Nous savons que les serveurs HTTP traditionnels sont construits par. des logiciels tels que Aphche, Nginx et IIS. Mais Nodejs n'en a pas besoin et fournit un module http, qui peut être utilisé pour construire un serveur par lui-même :

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

Le module http encapsule un serveur HTTP et un simple client HTTP : http.Server() est utilisé pour créer un serveur HTTP basé sur des événements, et http.request() et http.get() peuvent servir de clients pour lancer des requêtes vers le serveur HTTP. La méthode createServer() utilisée ici renvoie un objet http.Server. text/plain signifie définir le fichier au format texte brut. Le navigateur ne traitera pas un tel fichier lorsqu'il l'obtiendra si le contenu est défini sur text/. html Lorsque le navigateur obtient ce type de fichier, il appellera automatiquement l'analyseur HTML pour traiter le fichier en conséquence. De plus, vous pouvez également utiliser la nouvelle méthode constructeur http.Server() pour créer un objet http.Server, par exemple :

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

Ce qui précède le code est créé directement Un objet http.Server, puis y ajoutez un écouteur d'événement de demande. L'objet http.Server créé à l'aide de la méthode createServer() ajoute un écouteur d'événement de requête par défaut, mais il est omis.


Les événements de http.Server sont mentionnés ci-dessus. L'événement le plus couramment utilisé de http.Server est "request", qui est déclenché lorsqu'une requête http est reçue. Dans l'événement "request", les paramètres req et res transmis à la fonction de rappel sont respectivement des instances de http.IncomingMessage et http.ServerResponse :

La classe http.IncomingMessage contient les informations de requête http envoyées par le client. peut être utilisé pour accéder à l'état de la réponse, aux en-têtes de message, aux données, etc., par exemple :


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

La classe http.ServerResponse est renvoyée à les informations du client, il dispose de trois méthodes importantes pour renvoyer les en-têtes de réponse, le contenu de la réponse et terminer la demande :

writeHead(statusCode[, statusMessage][,headers]) : Envoyer les en-têtes de réponse au client demandeur. peut être appelé au plus une fois dans une requête. S'il n'est pas appelé, un en-tête de réponse sera automatiquement généré

write(chunk[,encoding][,callback]) : Envoyer le contenu de la réponse au client demandeur, le chunk est Un tampon ou une chaîne Si le morceau est une chaîne, vous devez spécifier la méthode d'encodage

La valeur par défaut est utf-8. Vous pouvez appeler

end() plusieurs fois avant d'appeler le. Méthode end(). [data][,encoding][,callback]) : Terminer la réponse, informer le client que tous les envois sont terminés. Si cette fonction n'est pas appelée, le client sera toujours en attente

Autres événements de classe http.Server Vous pouvez vous référer à la documentation officielle : http://nodejs.cn/api/http.html

client httpLe module http fournit Il existe deux méthodes http.request() et http.get(), qui fonctionnent comme un client pour lancer des requêtes vers le serveur 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 等待连接的超时时间

Par exemple :

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();

Si rencontré lors de la demande S'il y a une erreur, l'événement "error" sera déclenché dans l'objet de requête renvoyé.

L'utilisation de http.request() doit toujours appeler req.end() pour indiquer la fin de la requête, même si aucune donnée n'est écrite Body

Méthode http.get(options[,callback])


La méthode http.get() est une version simplifiée de la méthode http.request(). La principale différence est que http.get () définit automatiquement la méthode de requête sur la requête "GET", et il n'est pas nécessaire d'appeler manuellement req.end()

Ce qui précède représente l'intégralité du contenu de cet article, j'espère. cela sera utile à l'apprentissage de chacun. Pour plus de contenu connexe, veuillez suivre le site Web PHP chinois !

Recommandations associées :

Introduction à l'utilisation du module Request dans Node.js pour gérer les requêtes du protocole HTTP


Le module cluster dans Node Learning


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn