热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

通过Nodeexpress服务端程序深入了解HTTP请求(一)

代码仓库:https:github.comjczzqcool…HTTP知识提要HTTP(超文本传输协议)是一个客户端(浏览器)和服务端(服务器)用于请求和响应的标准。记录http请

代码仓库:https://github.com/jczzq/cool…

HTTP 知识提要

HTTP(超文本传输协议)是一个客户端(浏览器)和服务端(服务器)用于请求响应的标准。记录http请求和响应信息的代码称为报文

HTTP动作

HTTP/1.1协议中共定义了八种方法来操作指定的资源:GET、HEAD、 POST、 PUT、 DELETE、 TRACE、 OPTIONS、 CONNECT

HTTP报文

HTTP报文由4个部分组成:

  • 请求(响应)行(第一行,以下将称为起始行
  • 头字段(第一行之后,明文字符串,以冒号分隔的键名与键值对,以回车(CR)加换行(LF)符号序列结尾。)
  • 空行
  • 请求体(可选的HTTP报文主体数据)

HTTP头字段

HTTP头字段(HTTP header fields)是指在HTTP的请求和响应消息中的消息头部分。它们定义了一个超文本传输协议事务中的操作参数。HTTP头字段根据实际用途被分为以下 4 种类型:

  • 通用头字段(General Header Fields):同时适用于请求和响应消息,但与最终消息主体中传输的数据无关的消息头。
  • 请求头字段(Request Header Fields):包含更多有关要获取的资源或客户端本身信息的消息头。
  • 响应头字段(Response Header Fields):包含有关响应的补充信息,如其位置或服务器本身(名称和版本等)的消息头。
  • 实体头字段(Entity Header Fields):包含有关实体主体的更多信息,比如主体长(Content-Length)度或其MIME类型。

请求方的头结构:通用报头 | 请求报头 | 实体报头
响应方的头结构:通用报头 | 响应报头 | 实体报头

需要注意的是请求头并不是按照我们理解的语义化分类,而是按照
RFC文件标准已经归类。Accept属于请求头, Content-Type属于实体头。HTTP头部字段可以自己根据需要定义,因此可能在 Web 服务器和浏览器上发现非标准的头字段。,按照惯例,非标准的协议头字段是在字段名称前加上
X-前缀来标识。但这一惯例已在2012年6月被废弃,因为按照这种惯例,非标准字段变成标准字段时会引起很多不方便之处。

准备工作

这是我的测试表单:

:method="form.method"
:enctype="form.enctype">



{{ form.name }} | action="{{ form.action }}" | method="{{ form.method }}" | enctype="{{ form.enctype }}"

























服务端脚本:

const path = require('path');
const express = require('express');
var app = express();
// 设置静态文件目录
app.use(express.static(path.resolve('./static')));
console.info('静态文件目录:', path.resolve('./static'));
// 首页
app.get('/', function(req, res) {
res.sendFile(path.join(__dirname, './index.html'));
});
app.use('/user', (req, res, next) => {
// return res.json({
// query: req.query,
// params: req.params,
// body: req.body
// });
return res.sendStatus(200);
});
app.listen(3000, '0.0.0.0', () => {
console.log('启动服务器: http://localhost:3000');
});

1. 表单提交时表单内的数据将会被如何处理?

表单提交有三个关键的属性:action,method,enctype。这三个参数分别指定了http请求消息的路径、动作、消息实体如何编码。前两者不做赘述,下面仔细说enctype属性。HTML5 Form的enctype有三个枚举值:

  • application/x-www-form-urlencoded
    Form表单默认编码方式,method="GET"时表单值内会自动处理成(?name1=value1&name2=value2…)结构的参数并追加到action指定的url之后。
  • multipart/form-data
    表单内有文件提交必选的编码格式。
  • text/plain
    表单数据以纯文本形式进行编码。

application/x-www-form-urlencoded

《通过 Node express服务端程序深入了解HTTP请求(一)》
《通过 Node express服务端程序深入了解HTTP请求(一)》

可以看到表单GET提交的数据默认采取了application/x-www-form-urlencoded编码。被追加到url后面。服务端默认响应的Content-Type是text/plain纯文本。

《通过 Node express服务端程序深入了解HTTP请求(一)》
《通过 Node express服务端程序深入了解HTTP请求(一)》

再来看看表单POST提交的报文,请求报文头字段Content-Type明文显示application/x-www-form-urlencoded,响应报文头字段Content-Type依然是默认的text/plain纯文本。

multipart/form-data

接下来看看第二个multipart/form-data,并且上传一个图片23333.jpg
《通过 Node express服务端程序深入了解HTTP请求(一)》

《通过 Node express服务端程序深入了解HTTP请求(一)》

观察请求报文,头字段Content-Type是我们设定的multipart/form-data,并且制定了一个特定的值boundary,请求实体被编码变成了一整条消息,里面的数据由分隔符boundary分割成了多个部分,每一个部分的描述不尽相同,其中我们上传的文件23333.jpg已经处理成了乱码。

text/plain

接下来看看第三个text/plain,依然上传一个图片23333.jpg
《通过 Node express服务端程序深入了解HTTP请求(一)》
《通过 Node express服务端程序深入了解HTTP请求(一)》

头字段Content-Type是我们设定的text/plain纯文本,服务端响应的也是纯文本。

参考链接

HTTP头字段 – Wikipedia
HTTP Headers – MDN
关于HTTP Content-Type说明

如有不足,欢迎指正。


推荐阅读
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • 本文详细解析了ASP.NET 2.0中的Callback机制,不仅介绍了基本的使用方法,还深入探讨了其背后的实现原理。通过对比Atlas框架,帮助读者更好地理解和应用这一机制。 ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 本文介绍了如何在Spring框架中使用AspectJ实现AOP编程,重点讲解了通过注解配置切面的方法,包括方法执行前和方法执行后的增强处理。阅读本文前,请确保已安装并配置好AspectJ。 ... [详细]
  • vue引入echarts地图的四种方式
    一、vue中引入echart1、安装echarts:npminstallecharts--save2、在main.js文件中引入echarts实例:  Vue.prototype.$echartsecharts3、在需要用到echart图形的vue文件中引入:   importechartsfrom"echarts";4、如果用到map(地图),还 ... [详细]
  • 使用Tkinter构建51Ape无损音乐爬虫UI
    本文介绍了如何使用Python的内置模块Tkinter来构建一个简单的用户界面,用于爬取51Ape网站上的无损音乐百度云链接。虽然Tkinter入门相对简单,但在实际开发过程中由于文档不足可能会带来一些不便。 ... [详细]
  • 本文详细介绍如何在忘记MySQL服务器密码的情况下进行密码重置,包括具体的步骤和注意事项。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 本文将深入探讨 iOS 中的 Grand Central Dispatch (GCD),并介绍如何利用 GCD 进行高效多线程编程。如果你对线程的基本概念还不熟悉,建议先阅读相关基础资料。 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
author-avatar
郝泓帥_169
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有