我想问一个关于multipart/form-data的问题。在HTTP报头中,我发现Content-Type: multipart/form-data;边界= ? ?。
是??由用户自由定义?还是从HTML中生成的?我能不能定义一下??=英语字母?
我想问一个关于multipart/form-data的问题。在HTTP报头中,我发现Content-Type: multipart/form-data;边界= ? ?。
是??由用户自由定义?还是从HTML中生成的?我能不能定义一下??=英语字母?
当前回答
Multipart /form-data包含分隔名称/值对的边界。边界就像提交表单时传递的每个名称/值对块的标记。边界会自动添加到请求头的内容类型中。
具有enctype="multipart/form-data"属性的表单将有一个请求头Content-Type: multipart/form-data;边界——WebKit193844043-h(浏览器生成的值)。
传递的有效负载看起来像这样:
Content-Type: multipart/form-data; boundary=---WebKitFormBoundary7MA4YWxkTrZu0gW
-----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name=”file”; filename=”captcha”
Content-Type:
-----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name=”action”
submit
-----WebKitFormBoundary7MA4YWxkTrZu0gW--
在webservice端,它以@ consumers ("multipart/form-data")的形式被使用。
注意,当使用chrome postman测试你的webservice时,你需要从下拉框中检查表单数据选项(单选按钮)和文件菜单来发送附件。将content-type显式提供为multipart/form-data会抛出错误。因为边界是丢失的,因为它通过附加边界来覆盖post man对服务器的curl请求。
参见RFC1341章节7.2 Multipart Content-Type
其他回答
使用这个
headers: {
'content-type': 'application/x-www-form-urlencoded'
}
对于边界误差
我们必须分割数据。所以,服务器知道我们发送了什么。
1示例:我们拆分数据
$email = $_POST['email'];
$p_id = $_POST['pid'];
2.例如:如果我们发送JSON数据(With)内容类型Multipart/form-data,我们会得到一个与边界相关的警告
$json = file_get_contents("php://input");
Multipart /form-data包含分隔名称/值对的边界。边界就像提交表单时传递的每个名称/值对块的标记。边界会自动添加到请求头的内容类型中。
具有enctype="multipart/form-data"属性的表单将有一个请求头Content-Type: multipart/form-data;边界——WebKit193844043-h(浏览器生成的值)。
传递的有效负载看起来像这样:
Content-Type: multipart/form-data; boundary=---WebKitFormBoundary7MA4YWxkTrZu0gW
-----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name=”file”; filename=”captcha”
Content-Type:
-----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name=”action”
submit
-----WebKitFormBoundary7MA4YWxkTrZu0gW--
在webservice端,它以@ consumers ("multipart/form-data")的形式被使用。
注意,当使用chrome postman测试你的webservice时,你需要从下拉框中检查表单数据选项(单选按钮)和文件菜单来发送附件。将content-type显式提供为multipart/form-data会抛出错误。因为边界是丢失的,因为它通过附加边界来覆盖post man对服务器的curl请求。
参见RFC1341章节7.2 Multipart Content-Type
是??由用户自由定义?
Yes.
还是HTML提供的?
不。HTML与此无关。阅读下面。
我能不能定义一下??英语字母吗?
Yes.
如果需要向web服务器发送以下数据:
name = John
age = 12
使用application/x-www-form-urlencoded如下所示:
name=John&age=12
如您所见,服务器知道参数由&分隔。如果参数值需要&,则必须对其进行编码。
那么,当服务器使用multipart/form-data接收HTTP请求时,它如何知道参数值从哪里开始和结束呢?
使用边界,类似于&。
例如:
--XXX
Content-Disposition: form-data; name="name"
John
--XXX
Content-Disposition: form-data; name="age"
12
--XXX--
在这种情况下,边界值是XXX。您可以在Content-Type报头中指定它,以便服务器知道如何分割它接收到的数据。
所以你需要:
使用一个不会出现在发送到服务器的HTTP数据中的值。 保持一致,在请求消息中处处使用相同的值。