gpt4 book ai didi

http - formData 与查询字符串

转载 作者:行者123 更新时间:2023-12-05 02:04:46 26 4
gpt4 key购买 nike

我想了解浏览器如何解释表单数据。我知道一个 http 请求包含 [Method][Header][URL][Params][Body]

我不知道如何将表单数据放在那里?它是被解释为参数(查询字符串)还是在正文中发送? header 中的 application/x-www-form-urlencoded 是什么?

最佳答案

表单数据确实在 POST 请求的 HTTP 正文中发送

如果我反汇编一个 POST 请求:

Request line >  POST /index.php HTTP/1.1

Headers > Cache-Control: max-age=0
> Origin: http://localhost:8080
> Upgrade-Insecure-Requests: 1
> DNT: 1

The content
type header > Content-Type: application/x-www-form-urlencoded

Also headers > User-Agent: Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/85.0.4183.121Safari/537.36
> Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
> Sec-Fetch-Site: same-origin
> Sec-Fetch-Mode: navigate
> Sec-Fetch-User: ?1
> Sec-Fetch-Dest: document
> Referer: http://localhost:8080/index.php
> Accept-Encoding: gzip,deflate,br
> Accept-Language: cs-CZ,cs;q=0.9,en;q=0.8

Empty line >

Body > fname=John&lname=Doe&formsubmitted=5000

如您所见,在一堆乱七八糟的其他 header 中(对此我深表歉意),有一个 Content-Type header ,它指定了 HTTP Body 中内容的 MIME 类型,这对于 POST 表单,通常是 application/x-www-form-urlencoded,这是您在上面的 HTTP 请求中看到的。

这里,Body 包含来自以下表单的表单数据(由 & 分隔):

<form action="/index.php" method="POST">
<input type="text" id="fname" name="fname" value=""><br>
<input type="text" id="lname" name="lname" value=""><br>
<input type="hidden" id="formsubmitted" name="formsubmitted" value="5000"><br>
<input type="submit" value="Submit">
</form>

另一个被使用的是multipart/form-data,引用MIME type reference on developer.mozzila.com : "作为一种多部分文档格式,它由不同的部分组成,由边界(以双破折号 -- 开头的字符串)分隔。每个部分都是自己的实体,具有自己的 HTTP header 、Content-Disposition 和 Content-Type用于文件上传字段。”,该定义还包括以下示例:

Content-Type: multipart/form-data; boundary=aBoundaryString
(other headers associated with the multipart document as a whole)

--aBoundaryString
Content-Disposition: form-data; name="myFile"; filename="img.jpg"
Content-Type: image/jpeg

(data)
--aBoundaryString
Content-Disposition: form-data; name="myField"

(data)
--aBoundaryString
(more subparts)
--aBoundaryString--

虽然我从未真正遇到过 multipart/form-data MIME 类型,但在处理 POST HTTP 请求时必须承认它

关于更详细地回答您的其他问题“另外,标题中的 application/x-www-form-urlencoded 是什么?”
application/x-www-form-urlencoded是一个MIME类型,其中的urlencoded表示表单数据的编码方式和GET请求一样,每个字段由&字符分隔,字段格式为name=value

对于你写的“我知道一个 http 请求由 [Method][Header][URL][Params][Body] 组成”,这是错误的,一个 HTTP 请求由这些组成但不是按这个顺序,实际顺序是这样的:

Method Requested_Resource(and GET parameters if any) HTTP_Version \r\n
Headers ('\r\n' after each header)
\r\n
Body

关于http - formData 与查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64106669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com