下面我们来学nodejs中的http模块。在此之前,你需要有一定的网络知识储备,能知道http,IP,端口是什么并且它们之间的关系。如果还不清楚或比较模糊,可以查看下面的文章:
HTTP协议与IP

下面我们开始学习。

目录

创建一个HTTP服务端

向本机端口发送请求

HTTP服务的注意事项

1、如何关闭服务器?

2、如何实现代码的修改更新?

3、响应内容中文乱码

4、端口号被占用

5、HTTP协议默认端口

在浏览器中查看报文


 

创建一个HTTP服务端

有了HTTP服务端后,我们就能处理浏览器发送过来的请求,并且可以返回响应。和前端开发不同,我们无法随时在浏览器中渲染看到我们编写的结果,因此我们需要逐渐习惯后端开发时的编写习惯。

1、导入http模块

const http = require('http');

这部分和之前的导入模块相同。

2、创建服务对象

创建服务对象我们使用 createServer 方法来创建,其返回结果为一个对象。代码为:

const server = http.createServer();

该方法有一个实参,它是一个函数;该函数又接受两个形参,为 request 和 response。request是浏览器发送的请求报文的封装对象,可以获取到请求报文的相关内容。

而response则是对响应报文的封装对象,可以为浏览器设置响应结果。

这里我们说明一下,request和rresponse只是参数名称,我们可以自己为参数命名。

下面我们简单书写一下函数:

const server = http.createServer((request,response) => {response.end('Hello HTTP Server');//设置响应体并结束响应
});

后面我们还会详细讲解如何去编写,这里我们就留个印象,要知道这么写的目的是什么。

3、监听端口,启动服务

直接看代码:

server.listen();

listen是对象里面的一个方法,需要往里面传入两个参数:一个数值和回调函数。具体如下:

server.listen(9000,() => {console.log('服务器已成功启动...');
});

数值表示端口号,上面代码表示端口号为9000。当然其他端口也可行,这里我们选取9000。直接运行上述代码查看结果:

这样我们就成功运行了。当服务器启动成功以后才会执行回调函数内的代码。(response)

现在,端口9000就已经被我们的服务器占用了。将来只要有程序往9000端口发送http请求,回调函数就就会被执行。我们知道,浏览器会向服务器发送http请求;下面我们使用本机的IP试着发送请求。

向本机端口发送请求

向本机端口发送请求,我们首先要知道本机的IP地址。而本机回环地址就是我们当前计算机,即本机的地址。IP为:127.0.0.1。下面我们打开浏览器,输入IP发送我们的http请求。

http://127.0.0.1:9000/

在网址栏输入上述代码,跳转后我们就能看到执行了回调函数之后的页面。

HTTP服务的注意事项

1、如何关闭服务器?

启动服务之后,我们使用 Crtl + C 就能停止运行。

2、如何实现代码的修改更新?

如果我们想对代码进行修改后服务器也会做出对应修改该怎么办呢?比如我们把之前的 'Hello HTTP Server' 修改为'Hello World!':

const http = require('http');
const server = http.createServer((request,response) => {response.end('Hello World!');//设置响应体并结束响应
});
server.listen(9000,() => {console.log('服务器已成功启动...');
});

直接修改后发现页面没有变化。这时我们需要关闭当前服务器并再次启动才会实现更新。即重启服务。

3、响应内容中文乱码

我们再次修改文本内容,这次我们使用中文 “你好” 来替换文本。

response.end('你好');

重启服务器,发现出现了奇怪的结果:

感兴趣可以多尝试一些中文文本,会看到都会出现乱码。这里是因为字符集的问题。我们在前面多加入一行代码:

response.setHeader('content-type','text/html;charset=utf-8');

这段代码是什么意思呢?它表示在发送请求报文时,多加入一个键名为 conten.type 的响应头;返回的内为HTML,并且字符的格式为 utf-8 。这样浏览器就会按照utf-8字符集的规范来解析字符了。下面我们重启一下服务,发现回归正常:

4、端口号被占用

我们在vscode中保持服务器不断开,新打开一个终端,启动文件会发现出现报错:

这时就是端口已经被占用的情况。我们在另一个终端已经使用了9000端口,不能再被其他的使用。解决这个问题有两个方法,一是停止正在启动的端口;二是修改端口号。

5、HTTP协议默认端口

HTTP协议的默认端口为80。如果我们不设置端口号,请求就会默认向80端口发送请求。再补充一下 https协议的默认端口为443。

在浏览器中查看报文

我们在之前运行的页面上打开控制台应用,选择网络:

之后我们启动服务器就能看到出现了两个请求:

我们先看下面那个 favicon.ico ,这个其实是谷歌浏览器的默认行为,在打开网页时它都会发送这样一个请求。

我们再来看向本机发送的请求,有三个大的分类项;我们打开请求标头,就能看到报文的内容了。但打开后发现没有请求行,我们点击原始(源代码),就能看到初始的代码,也就能看见请求行了。

那么请求体怎么看呢?我们需要另外建立一个文件:

如图所示我们快速建立一个html文件,如下书写一个表单:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><form action="http://127.0.0.1:9000" method="post"><input type="text" name="username"><input type="password" name="password"><input type="submit" value="提交"></form>
</body>
</html>

之后打开网页,输入对应的信息后提交后就会像对应端口发送一个Post请求。

提交后我们能在控制台看到多出来一个“负载”标签页,里面存放我们刚刚输入的信息:

这就是格式化之后的请求体内容。如果想要查看原始的内容,点击查看源即可:

username=123&password=123456

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95229.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95229.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/95229.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

后端去拿数据怎么拿?

简单来说&#xff0c;Entity 和 DTO 代表了数据在不同层次和场景下的不同形态和目的。它们最根本的区别在于&#xff1a;职责和目的不同。一句话概括Entity&#xff1a;代表数据库中的表&#xff0c;是业务逻辑的核心&#xff0c;与持久化&#xff08;数据库&#xff09;紧密相…

从源码角度来学习Activit的启动流程

免责声明&#xff1a;本文是本人的学习记录文档&#xff0c;有问题可以评论区指出&#xff0c;谢谢 一、从Launcher点击桌面图标&#xff0c;拉起app进程&#xff08;不同进程间拉组件&#xff09; 从桌面点击icon图标拉起进程&#xff0c;这个就涉及到很多逻辑了&#xff0c;我…

pgAdmin介绍(PostgreSQL数据库管理软件)数据库客户端、PG客户端、PostgreSQL客户端

文章目录**1. 安装 pgAdmin****1.1 下载****1.2 安装步骤&#xff08;以 Windows 为例&#xff09;**1. **运行安装程序**&#xff1a;双击下载的 .exe 文件。2. **接受协议**&#xff1a;点击 Next&#xff0c;勾选 I accept the agreement。3. **选择安装路径**&#xff1a;默…

桌面GIS软件FlatGeobuf转Shapefile代码分享

桌面GIS软件FlatGeobuf转Shapefile代码分享1、后端代码分享2、前端代码分享分享完成

【Bluedroid】A2DP Source 音频传输停止流程及资源管理机制(btif_a2dp_source_stop_audio_req)

本文深入剖析Android蓝牙协议栈中A2DP音频传输停止流程,涵盖从用户请求触发、工作线程调度、资源释放到性能统计的全链路实现。通过分析btif_a2dp_source_stop_audio_req到btif_a2dp_source_audio_tx_stop_event的代码执行路径,揭示多线程环境下的竞争规避策略、硬件抽象层(H…

1-ruby介绍、环境搭建、运行 hello world 程序

1-ruby介绍、环境搭建、运行 hello world 程序 Ruby 简介 Ruby 是一种开源的、面向对象的、解释型的动态编程语言&#xff0c;由 Yukihiro “Matz” Matsumoto 于 1995 年发布。主要特点包括&#xff1a; 纯面向对象&#xff1a;所有东西都是对象动态类型&#xff1a;变量不…

PPO、DPO和GRPO的区别

一、 核心思想一句话概括 首先&#xff0c;我们用三个比喻来快速理解它们的核心思想&#xff1a;PPO (近端策略优化)&#xff1a; 「比武招亲」 模型&#xff08;AI&#xff09;通过试错和与裁判&#xff08;奖励模型&#xff09;的互动来学习。它生成多个回答&#xff0c;裁判…

使用组合子构建抽象语法树

引言 组合子&#xff08;Combinator&#xff09;是一种函数式编程中的概念&#xff0c;它允许我们通过组合简单的函数来构建复杂的逻辑。在解析器和抽象语法树&#xff08;AST&#xff09;的构建中&#xff0c;组合子提供了一种简洁且模块化的方法。本文将介绍如何使用组合子来…

20.27《24GB显卡轻松训练ChatGLM3-6B!QLoRA极速微调实战指南》

24GB显卡轻松训练ChatGLM3-6B!QLoRA极速微调实战指南 import torch from transformers import AutoModel, AutoTokenizer, BitsAndBytesConfig# 配置4-bit量化参数 bnb_config = BitsAndBytesConfig(load_in_4bit=True,bnb_4bit_use_double_quant=True

JSP 输出语法全面解析

JSP 输出语法全面解析 JSP 提供了多种输出内容到响应流的方式&#xff0c;每种方式都有其特定的使用场景和特点。以下是 JSP 输出语法的详细解析。 总结 JSP直接编写普通字符串 翻译到service方法的out.write(“这里面”) <%%> 翻译到service方法体内部&#xff0c;里面是…

前端学习——CSS

前面我们已经学习过来HTML。但是对于前端网页来说&#xff0c;HTML只是网页的骨架。而只是使用HTML的网页是十分简陋的&#xff0c;一般没办法应用于实际应用。因此我们还要学习CSS对网页进行美化。 相关代码已经上传至gitee&#xff1a;前端学习代码: 前端学习&#xff0c;喜欢…

【stm32】对射式红外传感器计次以及旋转编码器计次

对射式红外传感器计次 1. 将传感器的功能分装在一个模块里CountsSenser2.配置外部中断1.配置RCC&#xff0c;将涉及的外设的时钟都打开 2.配置GPIO&#xff0c;选择端口为输入模式 3.配置AFIO&#xff0c;选择前面使用的一路GPIO,连接到后面的EXTI 4.配置EXTI&#xff0c;选择边…

人工智能学习:Python相关面试题

1、Python与其他语言&#xff08;如Java/C&#xff09;的核心区别是什么&#xff1f;Python是动态类型的解释型语言&#xff0c;语法简洁&#xff0c;支持多种编程范式&#xff08;面向对象、函数式、过程式&#xff09;。与Java相比&#xff0c; Python无需编译且语法更简洁&a…

【Canvas与旗帜】哥伦比亚旗圆饼

【成图】【代码】<!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>哥伦比亚旗圆饼 Draft1</title><style type"text/css&qu…

Linux 系统 poll 与 epoll 机制2:实现原理与应用实践

接上文poll机制&#xff1a;Linux 系统 poll 与 epoll 机制1。 3. epoll 机制&#xff1a;高并发 I/O 的优化实现​ epoll(Efficient event polling implementation)机制诞生于 Linux 2.5.44 版本&#xff0c;是内核为解决高并发 I/O 场景&#xff08;如万级以上 FD 监听&…

Mamba LLM 架构简介:机器学习的新范式

Mamba LLM 架构简介&#xff1a;机器学习的新范式探索 Mamba LLM 的强大功能&#xff0c;Mamba LLM 是来自一流大学的变革性架构&#xff0c;重新定义了 AI 中的序列处理。语言模型是一种经过训练的机器学习模型&#xff0c;用于在自然语言上执行概率分布。它们的架构主要由多层…

GaussDB生产扩容引起的PANIC问题处理案例

1 环境信息CPU:8C内存&#xff1a;64GGaussDB版本&#xff1a;24.7.32解决方案部署形态&#xff1a;HCS部署形态&#xff1a;1主1从1日志扩容原因&#xff1a;当前的配置满足不了max_connections为2000值&#xff0c;即当前的业务最大连接数超过2000个而按照8C64G的配置最多满足…

【168页PPT】华为流程管理体系构建与落地(附下载方式)

篇幅所限&#xff0c;本文只提供部分资料内容&#xff0c;完整资料请看下面链接 https://download.csdn.net/download/2501_92796370/91662548 资料解读&#xff1a;【168页PPT】华为流程管理体系构建与落地 详细资料请看本解读文章的最后内容。华为&#xff0c;作为全球知名…

基于CotSegNet网络和机器学习的棉花点云器官分割和表型信息提取

一、引言PointNet作为点云处理领域的先驱与里程碑式深度学习模型&#xff0c;以其卓越的性能和对无序点云数据直接处理的能力而闻名。博主将分享1篇发表在《Computers and Electronics in Agriculture》&#xff08;中科院1区TOP&#xff09;的“Organ segmentation and phenot…

经典卷积神经网络CNN

一、CNN视觉处理三大任务&#xff1a;图像分类、目标检测、图像分割上游&#xff1a;提取特征&#xff0c;CNN下游&#xff1a;分类、目标、分割等&#xff0c;具体的业务1. 概述卷积神经网络是深度学习在计算机视觉领域的突破性成果。在计算机视觉领域, 往往我们输入的图像都很…