在 XHR 中使用 multipart/form-data 作为 Content-Type 时收到“400 Bad Request”

2023-12-06

我有一个发送一些数据的 AJAX 请求。数据尊重 multipart/form-data规格.

我面临的问题是浏览器将 Content-Type 标头设置为 text/plain,它应该是 multipart/form-data。

我尝试这样做:request.setRequestHeader("Content-Type", "multipart/form-data");但这会给出 400 Bad Request 错误。

If I do request.setRequestHeader("Content-Typexxxx", "multipart/form-data");没有错误,设置了“Content-Typexxxx”标头,但显然对我没有帮助。

我想有一个可以设置的有效内容类型标头列表,并且“multipart/form-data”不在其中,但我找不到解决我的困境的方法。

实际发送的数据示例:


Content-Type: multipart/form-data; boundary=l3iPy71otz

--l3iPy71otz
Content-Disposition: form-data; name="titluPublic"

Variation_1
--l3iPy71otz
Content-Disposition: form-data; name="nr_versiune"


--l3iPy71otz--
  

Thanks!


你没有设置boundary在您的请求标头中,如下所示:

request.setRequestHeader("Content-Type", "multipart/form-data; boundary=l3iPy71otz");

有关更多信息,请参阅RFC 2045:

5 内容类型头字段
[…]
参数是媒体的修饰符 子类型,因此不 从根本上影响事物的性质 内容。有意义的一组 参数取决于媒体类型 和子类型。大多数参数是 与单个特定的 亚型。然而,给定 顶级媒体类型可以定义 适用于的参数 该类型的任何子类型。参数 可能需要他们的定义 内容类型或子类型或者它们可能是 选修的。 MIME 实现必须 忽略其名称的任何参数 不认识。

例如,“字符集” 参数适用于任何子类型 “文本”,同时“边界” 任何子类型都需要参数 “多部分”媒体类型。

Update:我发现的另一个问题网络上当出现charset被添加到Content-type在请求标头中,但不在正文的消息边界中(对于您的测试用例也是如此)。这似乎不是一个可能的解决方案,但也许有帮助。

在您的情况下,明确添加charset在请求标头和消息边界中:

data.params += "--" + data.uniqid + "; charset=UTF-8" + data.crlf;
…
request.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + data.uniqid + "; charset=UTF-8");

更新2:在本地尝试此操作后,我注意到前导边界未被识别为这样,而是被解释为最后一个参数内容(在我更宽容的服务器上)。也许这导致阿帕奇抛出了一个400 Bad Request error.

经过一番尝试和错误后,我注意到这是因为服务器期望charset将在every边界,甚至是最后一个。为了防止混淆,我决定明确设置charset在请求头中before边界参数,因此边界将是最后一个参数Content-type请求标头。在此之后,一切似乎都很顺利。

data.params = "Content-Type: multipart/form-data; boundary=" + data.uniqid;
…
data.params += "--" + data.uniqid + data.crlf;
…
data.params += "--" + data.uniqid + "--";
…
request.setRequestHeader("Content-Type", "multipart/form-data; charset=UTF-8; boundary=" + data.uniqid);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 XHR 中使用 multipart/form-data 作为 Content-Type 时收到“400 Bad Request” 的相关文章

随机推荐

  • 如何获取活动窗口的类名?

    通过使用此代码 我可以获得活动窗口的标题 DllImport user32 dll static extern IntPtr GetForegroundWindow DllImport user32 dll static extern in
  • Apache Camel 和 Web 服务

    我试图了解如何将 Apache Camel 与任何提供 WSDL 的 Web 服务集成以生成其类 然后调用他的方法来返回一些请求 我研究了一些关于骆驼弹簧WS and 骆驼 CXF包 正如我所看到的 Spring Web 服务组件不支持使用
  • R - 如何创建重复的自定义 Ifelse 函数

    我非常熟悉 R 的标准 ifelse 语句 以及如何创建嵌套的 ifelse 语句 然而 我想创建一个 更好 的版本 这样我就不必多次复制 粘贴 ifelse 以这个嵌套的 ifelse 语句为例 df lt data frame b 1
  • Tabhost底部边框线android

    截屏 注意到选项卡下方的那条小灰线 选定的选项卡除外 我该如何改变 改变它 它会是 FrameLayout tabHost 或 TabWidget 的一部分吗 我只是找不到改变或删除这条小灰线的方法 Thanks 这是删除灰线的更简单的方法
  • 切换 JPanel 和 keyListener

    我正在开发一款游戏 首先进入主屏幕 有多种选择 例如单人游戏 双人游戏 积分等 我有一个大问题 如果我单击菜单中的按钮 不是JButton the JPanels 切换 但 keyListener 丢失 这Keylistener与游戏代码在
  • 无法登录管理站点。返回页面未找到错误

    我正在尝试通过 a2hosting 共享托管计划托管我的网站 我被告知使用 cpanel 创建一个 virtualenv 然后使用乘客来运行 django 我的virtualenv文件夹和项目文件夹位于根目录中 设置完所有内容并运行coll
  • VB6 中的 LIKE 关键字

    我看到一个示例代码如下 If numb Like 0 9 Then End If Here numb是一个包含一个字符的字符串 VB6中的LIKE关键字是什么 有可用的文档吗 Like 运算符 Visual Basic for Applic
  • History.js 插件 - 如何使用

    我需要使用history js 插件 我整理了一个简短的页面来测试功能 http www salesmelbourne com 目前我正在努力解决以下问题 后退 前进按钮不会重新加载 AJAX div 这是我没有添加的额外的 History
  • 如何将 JavaScript 日期初始化为特定时区

    我将特定时区的日期时间作为字符串 我想将其转换为本地时间 但是 我不知道如何在 Date 对象中设置时区 例如 我有Feb 28 2013 7 00 PM ET 那我就可以 var mydate new Date mydate setFul
  • 如何阻止 Iframe 调用

    最近 我的完整网站被另外两个域在 iframe 中调用 我想阻止其他试图在 iframe 中显示我的网站的网站 我如何通过 htaccess 阻止它 您可以在标题 X Frame Options Deny 中设置变量 所有现代浏览器都支持
  • dart flutter 中 DateFormat 中的 tryParse

    我想要tryParse多种日期格式 tryParse方法可在DateTime但不在DateFormat 我想用DateFormat因为我想解析多种格式 如果我使用Parse方法然后我必须使用try catch block 目前我正在解析下面
  • R 中的行矩阵乘法

    我有一个维度为 1 亿条记录和 100 列的矩阵 现在我想将该矩阵乘以行 我的矩阵乘法示例代码是 df lt as matrix mtcars result lt apply df 1 prod 在我的例子中 上面的语法非常慢 I trie
  • keras 自动编码器与 PCA

    我正在玩一个玩具示例来理解 PCA 与 keras 自动编码器 我有以下代码来理解PCA import numpy as np import matplotlib pyplot as plt from mpl toolkits mplot3
  • jquery ajax 帖子说 xxx 不允许 Access-Control-Allow-Origin

    我试图使用 AJAX 调用 eBay FindProducts API post请求 但遇到以下错误 XMLHttpRequest 无法加载http open api ebay com shopping callname FindProdu
  • EntityFramework .net 4 用简单的方法更新实体

    我正在看这个问题 ADO net 实体框架 仅更新分离实体上的某些属性 这对我来说是一个很大的帮助 我现在知道在对其进行更改之前需要附加一个实体 但我该怎么做 我有一个 MVC 网站 一个客户更新页面 其中包含以下字段 ID 名称 地址等
  • C++ 全局重载运算符= [重复]

    这个问题在这里已经有答案了 可能的重复 运算符 必须是非静态成员 是什么意思 C Hi 我有以下代码 Header file struct dataRecord size t id char name gcNameLength void o
  • OpenGL 透明度无法正常工作

    我的项目的透明度存在问题 正如您所看到的 透明度对于其他对象来说效果很好 您可以看到树叶后面的犀牛 但问题出在树本身 当有两个分支并且其中一个比另一个更近时 较远的一个是不可见的 与后备箱相同 透明度对对象本身不起作用 这是我在创建纹理时使
  • 如何更改悬停时的内容

    我一直在研究这个 我认为这会很简单 我想做的是将鼠标悬停在 新 标签上 进入悬停状态后 仅使用 CSS 将内容从 NEW 更改为 ADD body font family Arial Helvetica sans serif item wi
  • 在Java中找到二次回归曲线的最佳方法

    我有三组数据 例如 x y 4 0 6 60 8 0 有谁知道任何 有效的 Java 代码可以给我返回 a b 和 c 的值 系数 我假设您想要这种形式的公式 y a x 2 b x c 如果只有三个点 您可以使用以下公式描述经过所有三个点
  • 在 XHR 中使用 multipart/form-data 作为 Content-Type 时收到“400 Bad Request”

    我有一个发送一些数据的 AJAX 请求 数据尊重 multipart form data规格 我面临的问题是浏览器将 Content Type 标头设置为 text plain 它应该是 multipart form data 我尝试这样做