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

news2024/10/7 10:19:50

简单案例创建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.coloradmin.cn/o/831083.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WAF独木难支 RASP与ADR将成应用安全防护2.0时代新宠

曾几何时,黑客攻击大多通过网络层进行,但随着基于网络层的基础安全防护措施趋于严密,防火墙、入侵防御、防病毒等安全软硬件构建起了相对完善的防护体系,想再从网络层钻空子的难度增大。如今,黑客攻击从网络层转入Web为…

学无止境·运维高阶③(Mysqldump脚本)

Mysqldump脚本 1、详细脚本2、执行 1、详细脚本 #!/bin/bash mysql_cmd‘-uroot -pRedHat123’ exclude_db‘information_schema|performance_schema|sys’ bak_path/backup/db mysql m y s q l c m d − e ′ s h o w d a t a b a s e s ′ − N ∣ e g r e p − v " {m…

网络电视盒子哪个品牌好?2023最新性价比电视盒子排行榜

电视盒子是电视机成本最低的更新方案,但面对众多品牌和机型时往往不知道网络电视盒子哪个品牌好,踩雷的消费者非常多,想要小编分享电视盒子推荐,今天带新手们了解一下业内最新的性价比电视盒子排行榜,看看哪些电视盒子…

Docker 安装 Tomcat

目录 一、查看 tomcat 版本 二、拉取 Tomcat Docker 镜像 三、创建 Tomcat 容器 四、访问 Tomcat 五、停止和启动容器 一、查看 tomcat 版本 访问 tomcat 镜像库地址:https://hub.docker.com/_/tomcat,可以通过 Tags 查看其他版本的 tomcat; 二、拉…

聊聊我的故事-悲惨的童年

目录 前言一、介绍二、17年回顾1.出生2.上幼儿园3.上小学4.上初中 高中总结 前言 本人是06年生的,快18了, 提示:以下是本篇文章正文内容,下面案例可供参考 一、介绍 本人已经17了,在这17年过的很悲惨,也…

【Linux多线程】设计一个线程池(代码+讲解)

线程池 Lock.hpp说明 Task.hpp代码代码说明 Threadpool.hpp代码说明 Threadpool.cc代码说明 Log.hpp代码说明 Makefile运行结果 Lock.hpp #pragma once#include <iostream> #include <pthread.h>class Mutex { public:Mutex(){pthread_mutex_init(&lock_, nul…

百度离线地图(包含轨迹回放)

先来个效果图&#xff08;demo没那么仔细&#xff09; 现在下载资源包文件放至static文件内 如果需要新的瓦片则添加至static/tiles(我用的是png也可以是jpg) 在此处修改即可 但是&#xff0c;最好还是放在服务器内&#xff0c;因为瓦片很多&#xff0c;项目是无法运行的&…

FTP Cadence中心库的创建与配置 (中)

在上节介绍的ftp服务器根目录下 一、创建一个文件夹 Cadence_lib&#xff0c;并把其设置为 共享。 共享给用户hw 和用户layout&#xff0c;并设置对应权限。 点击“共享”按钮。 二、在Cadence_lib文件夹下&#xff0c;添加如下文件夹&#xff0c;及文件。 其中 “00DataShee…

Vue-函数式组件

最近在开发项目的时候&#xff0c;定制了一个公司内部样式的Modal模态框组件。 Modal组件伪代码 <!-- Modal/index.vue--> <template><div class"modal-container" id"modalContainer"><!-- Modal Content --><div class&quo…

MySQL的索引使用的数据结构,事务知识

一、索引的数据结构&#x1f338; 索引的数据结构&#xff08;非常重要&#xff09; mysql的索引的数据结构&#xff0c;并非定式&#xff01;&#xff01;&#xff01;取决于MySQL使用哪个存储引擎 数据库这块组织数据使用的数据结构是在硬盘上的。我们平时写的代码是存在内存…

编译原理陈火旺第三版第九章课后题答案

下面的答案仅供参考&#xff01; 1. 有哪些存储分配策略&#xff1f;并叙述何时用何种存储分配策略&#xff1f; 答&#xff1a;存储分配策略分为静态分配策略和动态分配策略两大类,而动态分配策略又可分为栈式动态分配策略和堆式动态分配策略两类。 在一个的具体的编译…

软件测试需求分析的常用方法

软件测试需求分析时&#xff0c;应要求产品人员对需求进行讲解&#xff0c;并使用相对应的方法进行科学分析&#xff0c;否则无法保障软件测试的完整性和科学性&#xff0c;从而造成在项目中后期Bug频出、风险增大等问题。 而常用的测试需求分析的方法&#xff1a; 1、功能分解…

腾讯云MSS多项能力获IDC五星评价,综合实力位列第一

近日&#xff0c;IDC发布了《IDC Technology Assessement: 中国公有云托管安全服务能力&#xff0c;2023》报告&#xff08;以下简称“报告”&#xff09;。腾讯云安全托管服务MSS凭借多年的技术积累和出色的服务能力&#xff0c;在报告的专家能力、漏洞及威胁检测、事件分析、…

二叉搜索树(BST)的模拟实现

序言&#xff1a; 构造一棵二叉排序树的目的并不是为了排序&#xff0c;而是为了提高查找效率、插入和删除关键字的速度&#xff0c;同时二叉搜索树的这种非线性结构也有利于插入和删除的实现。 目录 &#xff08;一&#xff09;BST的定义 &#xff08;二&#xff09;二叉搜…

刘汝佳の树状数组详解

引入 二叉索引树&#xff0c;也叫树状数组是一种便于数组单点修改和区间求和的数据结构 主要根据下标的lowbit值来建树 至于lowbit(x)&#xff0c;则是(x)&(-(x))&#xff0c;也就是一个二进制数从右边数第一个1代表的数 #define lowbit(x) ((x)&(-(x)))基础树状数组…

GF(2)上矩阵秩的快速计算

https://github.com/mhostetter/galois/issues

uniapp发布插件显示components/xxx文件没找到,插件格式不正确

uniapp发布插件显示components/xxx文件没找到&#xff0c;插件格式不正确 将插件文件这样一起选中&#xff0c;然后右键压缩成zip文件&#xff0c;而不是外层文件压缩

亚马逊、美客多卖家如何运营,养号技巧和硬件要求有哪些?

流量等于销量、等于利润&#xff0c;没有流量&#xff0c;一切都是白搭&#xff0c; 流量是一切销量的前提&#xff0c;我们平时做的优化、推广也是为了引入流量。所有亚马逊卖家都在围着一个目标而努力&#xff0c;那就是流量。那么亚马逊新卖家该如何引流呢? 我们需要从以下…

无涯教程-Perl - 条件判断

以下是在大多数编程语言中找到的典型判断结构的概述- Perl编程语言提供以下类型的条件语句。 Sr.No.Statement & 描述1 if statement if语句由布尔表达式和一个或多个语句组成。 2 if...else statement在 if语句之后可以是可选的 else语句。 3 if...elsif...else statemen…

如何将镜像体积海量缩减

点击上方蓝色字体&#xff0c;选择“设为星标” 回复”云原生“获取基础架构实践 镜像的传统构建 我们随便找个Golang代码项目作为案例&#xff0c;来开始构建一个镜像。下面我们以我的一个实战项目开始讲解&#xff1a;https://gitee.com/damon_one/uranus。 第一步&#xff1…