Node.js-http模块服务端请求与响应操作,请求报文与响应报文

news/2024/10/22 7:30:42/

简单案例创建HTTP服务端:

// 导入 http 模块
const http = require("http");
// 创建服务对象
const server = http.createServer((request, response) => {// 设置编码格式,解决中文乱码问题response.setHeader("content-type", "text/html;charset=utf-8");// 设置响应体response.end("欢迎访问!");
})
// 监听8090端口,启动服务
server.listen(8090, () => {console.log("服务已经启动...")
})

端口号被占用:
1.关闭当前正在运行监听端口的服务
2.修改其他的端口号

一、request 获取请求方的相关信息

  • 获取请求方式类型
// get、post
request.method();
  • 获取请求的 url 地址
// 只包含 url 中路径与查询字符串
// /search?name=node&num=2
request.url
  • 通过实例化 URl 对象获取路径与查询字符串
// 得到 URL 对象
let url = new URL(request.url, "http://192.168.0.1:8090");
// 得到路径 => /search
console.log(url.pathname)
// 得到 name 查询字符串 => node
console.log(url.searchParams.get("name"))
  • 获取 http 协议的版本号
// 1.1
request.httpVersion
  • 获取 http 的请求头
request.headers

二、response 获取响应方的相关信息

响应报文组成:

1.响应行:包含:HTTP 版本号、响应状态码、响应状态的描述。
2.响应头:一些附加信息。
3.响应体:响应格式有HTML、CSS、JavaScript、JSON、图片、视频等。

  • 设置响应体内容
const http = require("http");
const fs = require("fs");
const server = http.createServer((request, response) => {// 读取文件内容let resHtml = fs.readFileSync(__dirname + "/index.html");// 方式一:设置响应体,可以多次调用response.write(resHtml);response.write("hello2");response.end();// 方式二:设置响应体,只能调用一次response.end(resHtml);
});
// 监听8090端口,启动服务
server.listen(8090, () => {console.log("服务已经启动...")
});
  • 设置响应状态码
response.statusCode = 200;

在这里插入图片描述

在这里插入图片描述

  • 设置响应头
response.setHeader("content-type", "text/html;charset=utf-8");
  • 响应不同静态资源文件
const http = require("http");
const fs = require("fs");
const server = http.createServer((request, response) => {// 获取请求url路径let { pathname } = new URL(request.url, "http://192.168.0.1:8090");// 拼接资源文件路径let filePath = __dirname + "/pages" + pathname;fs.readFile(filePath, (err, data) => {// 文件读取失败if(err){response.statusCode = 500;response.end('文件读取失败!');return}// 成功,响应体内容response.end(data);})
})

三、设置资源类型 (mime类型)

媒体类型(通常称为 Multipurpose lnternet Mail Extensions 或 MIME 类型)是一种标准,用来表示文档、文件或字节流的性质和格式。
HTTP 服务可以设置响应头 Content-Type 来表明响应体的MIME 类型,浏览器会根据该类型决定如何处理资源。

const path = require("path");
// 1. 声明一个变量
Let mimes = {html: 'text/html',css: 'text/css',js: 'text/javascript',png: 'image/png',jpg:'image/jpeg',gif:'image/gif',mp4: 'video/mp4',mp3: 'audio/mpeg',json: 'application/json'
}// 2. 获取文件后缀名
let ext = path.extname("资源文件路径").slice(1);
// 3. 获取文件后缀名对应的 mime 类型
let type = mimes[ext];
// 判断是否有对应类型
type ? response.setHeader("content-type", type) : response.setHeader("content-type", "application/octet-stream")
  • 解决乱码问题
// 判断是否有对应类型
if(type){if(ext === "html"){response.setHeader("content-type", type + ";charset=utf-8");}else{response.setHeader("content-type", type);}
}else{response.setHeader("content-type", "application/octet-stream");
}

对于末知的资源类型,可以选择 application/octet-stream 类型,浏览器在遇到该类型的响应时,会对响应体内容进行独立存储,也就是我们常见的下载效果。


http://www.ppmy.cn/news/1002082.html

相关文章

git config 常用命令

​ Git config是一个用于设置Git配置变量的命令&#xff0c;它可以控制Git的外观和行为1。Git config管理的常用命令有以下几种&#xff1a; git config --global user.email <email>&#xff1a;设置全局的邮箱地址&#xff0c;用于标识你的提交2。 git config --globa…

【CSDN竞赛第67期】Python正则匹配

文章目录 竞赛题目正则匹配代码实现 竞赛题目 正则匹配 给你一个字符串s和一个字符模式p&#xff0c;请你来原生实现一个支持 .和*的正则表达式匹配。点号表示匹配任意字符&#xff0c;星号表示匹配前一项字符零个或多个。必须匹配到整个字符串&#xff0c;才可视为匹配成功&a…

赶紧学起来,成为人生赢家很简单,只需这五个网站就能实现

在数字化时代&#xff0c;人们越来越重视个人技能的提升。 在这个过程中&#xff0c;有几个网站备受青睐。让我们赶紧使用起来&#xff0c;偷偷的弯道超车&#xff0c;提高自己的技术能力&#xff0c;悄悄的变现。 一、Coursera&#xff08;www.coursera.org&#xff09; 是一…

vue-webpack代码混淆、代码压缩设置

package.json "dependencies": {"webpack": "^4.41.3" // webpack版本"webpack-obfuscator": "^2.6.0" // 代码混淆版本"compression-webpack-plugin": "6.1.1", // 代码压缩版本 } webpack.config.p…

【第一阶段】kotlin语言的String模板

1.在Java中拼接字符串使用的是“” 2.在kotlin中使用"${}" 3.kotlin语言中if是表达式&#xff0c;更灵活 fun main() {val city"西安"val time24//java中写法println("我在"city"玩了"time"小时")//kotlin中写法&#xff0…

回归预测 | MATLAB实现SO-CNN-GRU蛇群算法优化卷积门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现SO-CNN-GRU蛇群算法优化卷积门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现SO-CNN-GRU蛇群算法优化卷积门控循环单元多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现SO-CNN-GRU蛇群算法优化卷积门控循…

ES6之Promise、Class类与模块化(Modules)

目录 PromiseClass类extendssuper Modules 模块系统export default 和对应importexport 和 import Promise Promise 是 ES6 引入的一种用于处理异步操作的对象。 它解决了传统回调函数&#xff08;callback&#xff09;模式中容易出现的回调地狱和代码可读性差的问题。 Promis…

Maven里面没有plugins dependence问题解决

说明&#xff1a;今天在做Nacos、Dubbo整合的时候&#xff0c;在父模块中做了版本限制&#xff0c;出错后就又把版本控制什么都删掉&#xff0c;回退到最开始的状态&#xff0c;此时父模块下面的服务右侧的 maven里面没有plugins dependence &#xff0c;然后项目全都报错。 问…