理解HTTP请求格式

     HTTP概念

   HTTP全称HyperTextTransfer Protocol(超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议;HTTP是一个客户端(用户)和服务端(网站)之间请求和响应的标准。

        HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。 协议规定,POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式。服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。所以说到 POST 提交数据方案,包含了 Content-Type 和消息主体编码方式两部分 。

请求行:  post http://10.170.xxx.x:3000/user/getToken HTTP/1.1

请求头:  key : value

空   行:   代表 请求头结束

请求体:   发送给服务器请求时,携带的数据

        HTTP请求是互联网应用中最常见的交互方式之一,而数据格式是HTTP请求中不可或缺的一部分。在Web开发中,常见的HTTP请求数据格式有JSON、x-www-form-urlencoded和form-data。了解这三种数据格式的特点和使用场景,对于开发人员来说非常重要。

1.JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。在HTTP请求中,JSON数据格式通常用于发送和接收结构化数据。例如,在RESTful API中,JSON经常被用于传输数据。JSON数据格式的例子如下:

// 1.创建ajax对象
var xhr = new XMLHttpRequest();
// 2.告诉Ajax对象要向哪发送请求,以什么方式发送请求
// 1)请求方式 2)请求地址
xhr.open('post', 'http://localhost:3000/json');
// 通过请求头告诉服务器端客户端向服务器端传递的请求参数的格式是什么
xhr.setRequestHeader('Content-Type', 'application/json');
// JSON.stringify() 将json对象转换为json字符串
// 3.发送请求
xhr.send(JSON.stringify({name: 'lisi',age: 50
}));

2.x-www-form-urlencoded

 x-www-form-urlencoded是一种常见的HTTP请求数据格式,主要用于发送HTML表单数据。这种格式将表单中的字段和值编码到一个单一的字符串中,字符串中的每个字段都由等号连接字段名和字段值,多个字段之间用逗号分隔。x-www-form-urlencoded的例子如下:

//拼接样式name=John&age=30&city=New+York
//举例
var xhr = new XMLHttpRequest(); // 创建ajax对象
var nameValue = username.value;
var ageValue = age.value;
var params = 'username=' + nameValue + '&age=' + ageValue; // 拼接请求参数xhr.open('get', 'http://localhost:3000/get?' + params); // 配置ajax对象
xhr.send(); // 发送请求

 注意:x-www-form-urlencoded格式中的字段名和值只能包含ASCII字符,而且字段名和值必须进行URL编码。

3. form-data

 form-data是一种常用的HTTP请求数据格式,主要用于发送二进制数据或文件。当用户通过HTML表单上传文件时,通常会使用这种格式。

formdata 的两种格式 

1.multipart/form-data :既可以上传文件等二进制数据,也可以上传表单键值对,只是最后会转化为一条信息;

2.x-www-form-urlencoded:只能上传键值对,并且键值对都是间隔分开的。

与x-www-form-urlencoded最明显的不同,form-data将表单字段和值编码到一个multipart/form-data类型的字符串中,每个字段都被包含在一个指定的边界内。

  • 请求头的Content-Type属性除了指定为multipart/form-data,还需要定义boundary参数
  • 请求体中的请求行数据是由多部分组成,boundary参数的值模式--${Boundary}用于分隔每个独立的分部
  • 每个部分必须存在请求头Content-Disposition: form-data; name="${PART_NAME}";,这里的${PART_NAME}需要进行URL编码,另外filename字段可以使用,用于表示文件的名称,但是其约束性比name属性低(因为并不确认本地文件是否可用或者是否有异议)
  • 每个部分可以单独定义Content-Type和该部分的数据体
  • 请求体以boundary参数的值模式--${Boundary}--作为结束标志

下面是一个使用form-data格式上传文件的例子:

# 请求头 - 这个是必须的,需要指定Content-Type为multipart/form-data,指定唯一边界值
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTr2gzrWJ
------WebKitFormBoundary7MA4YWxkTr2gzrWJ# 请求体
Content-Disposition: form-data; name="file"; filename="example.txt"# 内容
Content-Type: text/plain
This is the content of the example.txt file.
------WebKitFormBoundary7MA4YWxkTr2gzrWJ--

在这个例子中,表单字段名是“file”,文件名是“example.txt”,文件内容是“This is the content of the example.txt file.”。在每个字段之间插入了一个边界字符串(这里是“———WebKitFormBoundary7MA4YWxkTr2gzrWJ”),并在最后添加了一个结束标记。

总结:

  • 1.JSON适用于传输结构化数据。
  • 2.x-www-form-urlencoded适用于发送简单的表单数据。
  • 3.form-data适用于上传文件将文件转成二进制数据进行传输,不涉及转码或发送复杂的表单数据。
  • 4.text/plain: 是使用纯文本进行传输,平时用的很少。

了解这三种数据格式的特点和使用场景,可以帮助开发人员更好地设计和实现Web应用。

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

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

相关文章

Gobject tutorial 八

The GObject base class Object memory management Gobject的内存管理相关的API很复杂,但其目标是提供一个基于引用计数的灵活的内存管理模式。 下面我们来介绍一下,与管理引用计数相关的函数。 Reference Count 函数g_object_ref和g_object_unref的…

怎么将几段音频合并在一起,试试这几个音频拼接小妙招

怎么将多个音频合并在一起呢?音频是我们日常工作生活中常见的文件,音频与我们息息相关,无论你是音乐爱好者,还是喜欢记录生活中的声音,都离不开音频。因此我们会遇到关于很多音频剪辑的难题,就像今天小编给…

usb摄像头应用编程

作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…

conda install xformers -c xformers/label/dev 的安装问题

在StableSR项目框架中,需要执行 conda install xformers -c xformers/label/dev 但是报错,错误显示,版本不匹配,如下所示: 我改用pip来安装,好像就不报错了: pip install xformers

javaWeb项目-ssm+vue企业台账管理平台功能介绍

本项目源码:javaweb项目ssm-vue企业台账管理平台源码-说明文档资源-CSDN文库 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboo…

vue项目——前端CryptoJS加密、解密

1、vue项目需要安装CryptoJS安装包 npm install crypto-js 2、在项目中引入CryptoJS import CryptoJS from crypto-js 3、使用,代码如下 // 此处key为16进制let key jiajiajiajiajiajiajiajia;console.log(密钥:, key);// key格式化处理key Crypt…

【前端开发工具】VS Code安装和使用

文章目录 一、前言二、下载三、安装四、配置五、使用5.1 导入项目5.2 本地运行项目5.3 修改界面文案,验证效果5.4 添加日志打印5.5 代码调试5.6 代码提交到Git仓库 六、总结 一、前言 本文介绍一下在前端vue项目中,VS Code的安装和配置。 什么是VS Code…

【干货分享】25地学考研推免夏令营汇总表

​ 25考研学子们,考研准备要赶早。 小编给大家整合准备了25地信考研夏令营时间信息表,需要的宝子收藏起来。 ​ 话不多说,需要的小伙伴直接评论区留言 25地信考研择校信息表:

IT入门知识第一部分《IT基础知识》(1/10)

目录 IT入门知识第一部分《IT基础知识》(1/10) 1.引言 2.第一部分:IT基础知识 2.1 计算机硬件 CPU:计算机的心脏 内存:数据的临时居所 存储设备:数据的长期仓库 输入输出设备:与计算机的…

[Mysql] 的基础知识和sql 语句.教你速成(上)——逻辑清晰,涵盖完整

目录 前言 上篇的内容概况 下篇的内容概况 数据库的分类 关系型数据库 常见的关系型数据库系统 非关系型数据库 1. 键值对数据库(Key-Value Stores) 特点: 常见的键值对数据库: 2. 文档数据库(Document Store…

【React】Axios请求头注入token

业务背景: Token作为用户的数据标识,在接口层面起到了接口权限控制的作用,也就是说后端有很多接口都需要通过查看当前请求头信息中是否含有token数据,来决定是否正常返回数据 // 添加请求拦截器 request.interceptors.request.use(config …

填坑-celery正常启动后能收到任务但不执行任务的解决办法

场景 Flask开发中用celery 6正常启动后能收到任务但不执行任务的解决办法,也没有错误提示…… INFO/MainProcess] Task app.add_together[ce406ed8-71b3-49e6-8556-f44bfe66549c] received [2024-06-20 19:38:10,632: INFO/SpawnPoolWorker-36] child process 2244…

求最小生成树的新算法

不管 prim 算法还是 kruskal 算法都基于 “当前可见最短边” 作贪心策略,但这并不适合分布式并行操作,比方说所有节点一起构建最小生成树,这些算法都显得同步开销过大,甚至导出错误的结果。 最近研究并构建最大流多路径传输协议的…

如何获得一个Oracle 23ai数据库(vagrant box)

准确的说,是Oracle 23ai Free Developer版,因为企业版目前只在云上(OCI和Azure)和ECC上提供。 前面我博客介绍了3种方法: Virtual ApplianceRPM安装Docker 今天介绍最近新出的一种方法,也是我最为推荐的…

Debugger的使用

断点调试 1.打断点 2.以debug模式运行 3.流程控制

SQL注入-sqlmap使用

sqlmap简介 一款自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB Sqlma…

图像处理:Python使用OpenCV 减少图片噪音

文章目录 1. 均值滤波 (Mean Filtering)2. 高斯滤波 (Gaussian Filtering)3. 中值滤波 (Median Filtering)4.代码实现示例5.效果展示 在图像处理中,均值滤波、高斯滤波和中值滤波是三种常用的降噪方法。它们的实现原理各有不同: 1. 均值滤波 (Mean Filte…

Object类hashCode方法和equals方法源码

hashCode方法 顶级类Object里面的方法,所有类都是继承Object的,返回值int类型 根据一定的hash规则(存储地址、字段、或者长度等),映射成一个数值,即散列值 public static int hashCode(Object a[]) {if (a…

wps要会员才能把pdf分开,这不纯属智商税吗

我有一个文档 然后 我给你们写好了一个代码 from PyPDF2 import PdfReader, PdfWriterdef split_pdf(file_path, ranges, output_names):# Open the input PDF filewith open(file_path, rb) as pdf_file:reader = PdfReader(pdf_file)total_pages = len(reader.pages)if len…

Cookie、Session、Token的关系和区别

关系 Session与Cookie:Session通常依赖于Cookie来工作。当服务器为客户端创建一个Session时,它会在服务器上存储与客户端相关的信息,并将一个唯一的SessionID通过Cookie发送给客户端。客户端在后续的请求中会携带这个Cookie(包含…