js浏览器请求,post请求中的参数形式和form-data提交数据时数据格式问题(2024-05-06)

javascript——表单,FormData 对象详解 表单()用来收集用户提交的数据,发送到服务器。比如,用户提交用户名和密码,让服务器验证,就要通过表单。表单提供多种控件,让开发者使用,具体的控件种类和用法请参考 HTML 语言的教程。本章主要介绍 JavaScript 与表单的交互。 阅读详情
AI摘要

本文详细介绍了浏览器POST请求中常见的Content-Type属性及其作用,包括application/x-www-form-urlencoded、multipart/form-data、application/json等编码方式,以及它们在数据提交和文件上传中的应用。,

浏览器几种常见的post请求方式

Content-Type 属性规定在发送到服务器之前应该如何对表单数据进行编码。
默认表单数据会编码为 "application/x-www-form-urlencoded"

post请求的参数一般放在Body里。

Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载一个文件或一张图片的原因。

Content-Type 标头告诉客户端实际返回的内容的内容类型。

 

(1)HTTP 协议是以 ASCII 码 传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。
(2)协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须 使用什么编码方式 。开发者完全可以自己决定消息主体的格式,只要最后发送的 HTTP 请求满足上面的格式就可以。
(3)数据发送出去,还要服务端解析成功才有意义。一般服务端语言如 php、python 等,以及它们的 framework,都内置了自动解析常见数据格式的功能。服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。


1、application/x-www-form-urlencoded 

最常见的 POST 提交数据的方式。浏览器的原生 <form> 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。

application/x-www-form-urlencoded方式也是post请求最早支持的一种数据传输方式,这种也是key和value形式,将我们的参数类似于GET方式那样拼接成一个字符串,例如:key1=value1&key2=value2,这种形式,然后将这个参数字符串进行urlencode编码,放到Body里进行发送请求数据。

<form action="form_action.asp" enctype="text/plain">
  <p>First name: <input type="text" name="fname" /></p>
  <p>Last name: <input type="text" name="lname" /></p>
  <input type="submit" value="Submit" />
</form>


//Content-Type: application/x-www-form-urlencoded;charset=utf-8
//title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3

 Content-Type 被指定为 application/x-www-form-urlencoded;其次,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。大部分服务端语言都对这种方式很好的支持,常用的如jQuery中的ajax请求,Content-Type 默认值都是「application/x-www-form-urlencoded;charset=utf-8

jq的Ajax写法

function getOrigantAjaxPost() {
    let stringData = 'name=value1&pwd=value2'
    $.ajax({
        data: stringData,
        async: true,
        url: 'http://hostName:9000/entity/urlReq',
        type: "post",
        processData: false,  //tell jQuery not to process the data
        contentType: "application/x-www-form-urlencoded",
        success: function (data, status) {
            console.log("Data: " + JSON.stringify(data) + "  " + status);
        },
        error: function (e) {
            console.log('error ' + JSON.stringify(e));
        }
    });
}

2、multipart/form-data

这也是常见的post请求方式,一般用来上传文件,各大服务器的支持也比较好。所以我们使用表单上传文件时,必须让<form>表单的enctype属性值为 multipart/form-data。

它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。
由于有boundary隔离,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件,在springmvc中可以使用MultipartHttpServletRequest接收通过api根据"name"获取不同的键值,也可以通过MulTipartFile数组接收多个文件
。

3、application/json

application/json作为响应头并不陌生,实际上,现在很多时候也把它作为请求头,用来告诉服务端消息主体是序列化的JSON字符串,除了低版本的IE,基本都支持。除了低版本的IE都支持JSON.stringify()的方法,服务端也有处理JSON的函数,使用json不会有任何麻烦。

// 请求数据
let data = {name:'sara',sex:'girl'};
// 请求数据序列化处理
JSON.stingify(data);

//结果:{'name':'sara','sex':'girl'};

4、text/plain,text/html

text/html的意思是将文件的content-type设置为text/html的形式,浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理。

text/plain的意思是将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理。

5、raw

可以上传任意格式的文本,可以上传text、json、xml、html等Controller接口可以通过@RequestBody 来修饰,传入数据就是JSON格式

注意: 在使用raw 方式,如果在PostMan再测试的时候需要在headers中添加一个key-value (Content-Type: application/json 或者对应的格式)

6、binary

相当于Content-Type:application/octet-stream,从字面意思得知,只可以上传二进制数据,通常用来上传文件,由于没有键值,所以,一次只能上传一个文件。

CTF流量分析实战:Wireshark与010 Editor从HTTP POST中提取Flag 网络流量分析是网络安全与数字取证领域的核心技能,其本质是对网络通信过程中产生的二进制数据流进行捕获、解析与解读。理解TCP/IP协议栈、HTTP/HTTPS等应用层协议的工作原理,是分析的基础。通过协议解析,可以还原网络会话,洞察数据传输过程,这对于安全审计、入侵检测和事件响应具有重要价值。在CTF竞赛和实战场景中,攻击痕迹或关键信息(如Flag)常隐藏在特定的网络请求中,例如HTTP POST请求,因其常用于提交表单数据或文件,成为重点分析对象。Wireshark作为主流的网络协议分析工具,能对海量数据包 阅读详情

相关推荐

JavaScript发送GET/POST请求(附完整源码)

JavaScript发送GET/POST请求(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1320

js中使用post的方式发送请求

在javaScript中发送请求: 1、发送get请求:下面这两个方式都是get方式的发送请求 //直接设置新的url,这种方式跳转为get方式 //document.location = "/servlet/pageUpdateUser?usercode="+$("#usercode").text()+"&username="+$("#username").val(); //这种是DOM层面的页面跳转 window.liocation.href = url; //这种是实现窗...

Java学习之旅 2万+

第四十八:Python接口自动化- post请求上传文件(multipart/form-data传参类型-files/data传参)

【代码】第四十八:Python接口自动化- post请求上传文件(multipart/form-data传参类型-files/data传参)

欢迎来到本博客! 1177

通过js进行post请求

1.通过get请求时,会在地址栏显示参数,所以为了防止参数不会被恶意修改,通过采用post请求, 通过js实现post请求,实际是创建一个虚拟的form表单 function httpPost(URL, PARAMS) { var temp = document.createElement("form"); temp.actio...

king2wang的博客 3万+

Unity采样器过多导致URP默认的Lit.Shader报错(shader error in ‘universal render pipeline/lit’: maximum ps_4_0 samp)

Shader中多个Sample Texture2D,Sample Texture3D或者类似节点的使用,该类节点都需要一个采样器,如果Shader使用超过了16个纹理采样器,如多个Base Color,Normal Map等,就容易超出。是因为每种Shader Model和GPU都有一个对纹理采样器数量的限制,是因为每个采样器都需要在显卡占用一个独立的寄存器,而寄存器的数量是有限的,当超过限制,显卡无法分配更多的寄存器给新的采样器,因此会导致编译错误。2.什么原因导致纹理采样器超出16个?

qq_41884036的博客 4235

FPGA实现PI控制

FPGA实现PI控制

m0_57319166的博客 3897

dotlottie-web 安全部署指南:如何用 setWorkerUrl 与 setWasmUrl 通过严格内容安全策略

dotlottie-web(`@lottiefiles/dotlottie-web`)是一款由 Rust + WebAssembly 驱动的高性能 Lottie / dotLottie 网页播放器,支持 React、Vue、Svelte、Solid 与 Web Components。在启用了严格内容安全策略(CSP)的生产站点上,它"默认从 CDN 拉取 WASM + 用 blob: 地址启动 W

gitblog_00455的博客 310

【没有网络,安装python包】如何从 PyPI 下载并安装 Plotly 的离线包

在某些情况下,您可能需要在没有互联网连接的环境中安装 Python 包,例如在飞机上、在某些受限制的网络环境中或在需要离线安装的场景下。以下是如何在 PyPI(Python Package Index)下载 Plotly 包并进行离线安装的详细步骤。

赖德发的博客 1104

remix multipart-parser 实战指南:流式解析 multipart/form-data,内存安全处理文件上传

`multipart-parser` 是 remix 仓库中独立的流式 multipart 解析器(工作区包名 `@remix-run/multipart-parser`),它以增量方式处理 `multipart/*` 消息体,让大文件上传无需把整个 payload 缓存在内存中。本文以 [packages/multipart-parser/README.md](https://link.gitc

gitblog_00508的博客 138

Visual Studio Git 使用指南

Visual Studio 2022深度集成了Git功能,提供了直观的图形界面管理源代码。本文详细介绍了VS中Git的使用方法:从环境准备、克隆/创建仓库开始,重点讲解了"Git更改"窗口的日常操作,包括查看修改、暂存文件、提交推送等。同时涵盖了分支管理、查看历史、解决冲突等核心功能,以及储藏、重置等高级操作。文章还提供了实用技巧,如提交规范、频繁提交等最佳实践。VS的Git集成覆盖了日常开发需求,图形界面与命令行可互补使用,适合各层次开发者高效管理代码版本。

guigenyi的专栏 1572

如何实现VMware虚拟机上的ubuntu与windows主机共享文件夹

windows主机部分   在硬盘上任意位置新建文件夹,此处命名为Share,实际上随意。 接下来右键属性,操作如下系列图所示: 在硬盘上任意位置新建文件夹,此处命名为Share,实际上随意。 成功修改后,显示如下界面: VMware部分 ubuntu在关机状态下,点击“编辑虚拟机设置” 接下来,开启ubuntu系统,在终端输入: ·· vmware-hgfsclient ·· 将会显示如下画面,但是此时你可能找不到 /mnt/hgfs 这个路径,如果找不到该路径,则需要在虚拟

Mr.Sliver的博客 8219

contenttype属性 php,理解HTTP之Content-Type

0x01.About查看Restful API 报头插件:Chrome插件REST Console,以及发送Restful API工具:Chrome插件POST Man在HTTP 1.1规范中,HTTP请求方式有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT通常我们用的只有GET、POST,然而对于Restful API规范来说,请求资源要用PUT方法...

weixin_36176188的博客 1186

混合部署 操作系统混合部署

在openEuler Embedded 22.03中,已经集成了OpenAMP相关支持,并与openEuler的SIG Zephyr合作实现了openEuler Embedded与实时操作系统Zephyr在QEMU平台上的混合部署。具体的混合部署方式取决于设备的硬件和软件支持。例如,可以使用虚拟机软件(如VirtualBox)在Linux操作系统上运行Android虚拟机,从而实现Linux和Android的混合部署。需要注意的是,混合部署涉及到设备的硬件和软件兼容性,以及操作系统的配置和管理。

dianqicyuyan的博客 1767

fastapi——简单快速入门

fastapi print("\033[31m5. --- ORM模型: 从类创建符合的ORM对象模型 ---\033[Om")#显示彩色内容 fastapi是高性能的web框架。他的主要特点是: 快速编码 减少人为bug 直观 简易 具有交互式文档 基于API的开放标准(并与之完全兼容):OpenAPI(以前称为Swagger)和JSON Schema。 1.1fastapi的安装 一、fastapi的安装 pip install fastapi 当然你可以使用国内阿里云镜像源进行安装,会快很多,

m0_55212788的博客 4485

Python实现将pdf,docx,xls,doc,wps,zip,xlsx,ofd链接下载并将文件保存到本地

本文是该专栏的第31篇,后面会持续分享python的各种干货知识,值得关注。在工作上,尤其是在处理爬虫项目中,会遇到这样的需求。访问某个网页或者在采集某个页面的时候,正文部分含有docx,或pdf,或xls,或doc,或wps等链接。需要你使用python自动将页面上含有的这些信息链接下载并保存到指定文件夹。遇到这种情况需要怎么做呢?别担心,跟着笔者直接往下看正文的详细解决方法。(附完整代码)在有些网页的正文中,有时会有如下图中的doc链接。比如爬虫在采集正文数据的时候,像标题,正文内容,作者,发布时间等等

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 4147

华为od 面试八股文_Spring_03_含答案

控制反转IOC是一个很大的概念,可以用不同的方式来实现。其主要实现方式有两种:依赖注入和依赖查找依赖注入;

MISAYAONE的博客 2341

Python Requests 爬虫完全指南(增强版)

# Python Requests 爬虫完全指南(增强版) 本指南在原有基础上增加了处理JavaScript渲染页面、代理IP使用和高并发处理等高级内容,从基础到进阶全面覆盖爬虫开发所需知识和技巧。

桃李不言下自成蹊 1219

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

全网最强SpringMVC教程 | 万字长文爆肝SpringMVC(一)

本文介绍了SpringMVC框架的基本概念和入门案例实现。主要内容包括: SpringMVC概述 基于MVC设计模式的轻量级Web框架 主要处理请求接收、业务转发和响应数据转换 相比Servlet更简单灵活 入门案例实现步骤 创建Maven web项目 导入SpringMVC和Servlet依赖 创建SpringMVC配置类 编写Controller处理请求 配置DispatcherServlet替代web.xml 关键点说明 使用@Controller注解标记控制器类 @RequestMapping定义请

qq_45832461的博客 1146

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Postman Pre-request Script实战:自动化MD5签名、动态时间戳与多时区处理

在接口测试与API自动化领域,动态参数处理是保障测试可靠性的核心环节。其原理在于通过脚本在请求发送前实时生成或修改参数,以模拟真实、多变的请求场景。这项技术的核心价值在于将测试从静态、易错的手工操作,升级为可编程、可复用的自动化流程,显著提升测试覆盖率和效率。典型的应用场景包括需要动态签名验签的支付接口、要求时间戳防重放的安全API,以及服务全球用户的多时区系统。本文聚焦Postman的Pre-request Script功能,深入解析如何利用JavaScript与内置CryptoJS库,自动化实现**MD

weixin_30430169的博客 420

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JB3-7-Vue(二)

封装通用JS文件(工具,请求等),封装ElementPlus组件(路径导航,图标文字,数据页头,数据表格,数据表单,上传文件等)

周航宇的博客 959

PowerShell 测试基础设施 WebListener:ASP.NET Core HTTP/HTTPS 请求模拟站点的搭建与全部端点实战指南

> 导读:WebListener 是 PowerShell 开源仓库([GitHub_Trending/po/PowerShell](https://link.gitcode.com/i/51cabbcc60362072f5ea00ded80c4fc3))测试工具集中内置的一个 ASP.NET Core MVC 应用,它在本机(Loopback 地址)同时提供 HTTP 与多种 TLS 版本的 H

gitblog_00209的博客 905

WebUSB+Chrome侧边栏实现免安装Android投屏与提单

WebUSB是一种浏览器原生支持的USB设备安全访问机制,它通过标准化的JavaScript API绕过操作系统驱动栈,在无需管理员权限、不安装ADB或libusb的前提下,实现网页对Android设备的批量数据传输。其核心价值在于将传统本地工具(如QtScrcpy)的系统级依赖,降维为轻量、跨平台、一次授权永久信任的网页能力。结合Chrome侧边栏(Side Panel)与Service Worker持久化通信架构,可构建出30秒内完成连接、零本地残留、支持点击即提单的协作闭环。本文聚焦于该技术路径在真实

weixin_34174422的博客 279

用单个C文件播放音频:从零上手miniaudio

你手上有一个wav文件,想在没有任何第三方依赖的机器上把它播出来,又不想引入整套音频框架。miniaudio就是干这个的:单文件、零依赖的C语言音频库,支持音频播放和录音,覆盖Windows、macOS、Linux和Android。 ## 三个关键特性 - 单一源文件——把 `miniaudio.c` 和 `miniaudio.h` 放进源码树就能集成,不需要构建系统和包管理器 - 零外部依赖

gitblog_00457的博客 157

工作中使用到的单词(软件开发)_第五版

本文摘要: 本文为软件开发相关的术语与技术要点整理,主要包含2020-2025年间四版内容更新(No.01-41)。重点包括: 证书文件格式(PEM/P12)差异 外部API通信注意事项(Accept头设置、HTTPS连接问题) Postman工具使用技巧(Cookie管理、请求头设置) WAS配置相关经验(JVM设置、SSL连接问题) 数据库操作命令(DB2表结构修改) IBM安全管理组件(TAM/iv-user机制) 网络通信细节(chunked传输编码特性) 常用开发工具(curl、Postman)的

sun0322 2521

大文件分片上传的工程实践:稳全快省四维平衡

大文件上传不是简单的HTTP POST,而是涉及前端切片、网络传输、服务端合并与存储校验的全链路工程问题。其核心原理在于将不可靠的一次性请求,拆解为可验证、可中断、可并行的确定性操作。技术价值体现在提升上传成功率、降低服务端资源压力、保障数据完整性,并支撑断点续传与秒传等关键体验。典型应用场景包括在线教育课件上传、医疗影像传输、BIM模型共享及短视频素材提交等。本文聚焦分片大小的黄金平衡点(8MB)、服务端原子性防线、全链路校验机制及真实压测SLA定义,覆盖大文件分片上传的核心工程实践。

weixin_34098209的博客 191

springMVC开发手册V2.0

今日内容看到SpringMVC这个名字我们会发现其中包含Spring,那么SpringMVC和Spring之间的会有关系么?答案是肯定有,SpringMVC隶属于Spring,是Spring技术中的一部分。那么SpringMVC到底是用来做什么的呢?那么既然已经有了Servlet为什么还需要花时间再学习一个SpringMVC技术?要回答这个问题,我们就需要搞清楚SpringMVC与Servlet相比,有什么优势:框架我们都知道是用来简化开发的,所以SpringMVC与Servlet相比,开发起来更简单快捷,

AlbenXie的博客 160
上一篇: js ,javascript,Window Location 对象 URL详解(2024-05-05)
下一篇: JavaScript ,js闭包函数的理解(2024-05-06)
宝子卡粉
博客等级 码龄10年 1489粉丝 166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值