我在第16章:服务器端脚本(第987页)中由Mark Lutz编写的Python第3版中找到了引用文本:
表单还包括一个方法选项,用于指定用于通过套接字将数据发送到目标服务器计算机的编码样式。在这里,我们使用帖子样式,它与服务器联系,然后在单独的传输中发送用户输入数据流。另一种获取样式通过将用户输入添加到用于调用脚本的URL的末尾,通过一个传输步骤将输入信息传送到服务器。角色(很快就会有这个)。
我读到这个有些困惑。据我所知,发布数据是在与同一http报头的一部分相同的传输中发送的。我从未听说过后期数据传输的额外步骤。
我很快查看了相关的HTTP rfc,并没有注意到版本1.0或1.1中的任何区别。我还使用wireshark进行一些分析,并没有注意到多次传输。
我是否遗漏了一些基本内容,或者这是文本中的错误?
答案 0 :(得分:1)
简单的POST请求只需一步。但是当您上传文件时,表单会以多个部分发布。在这种情况下,内容类型 application / x-www-form-urlencoded 将更改为 multipart / form-data 。
答案 1 :(得分:0)
是的,服务器和客户端之间只有一次数据传输。
该段落的背景是指web服务器和cgi应用程序之间的通信。使用POST的Web服务器和cgi应用程序之间的服务器通信在两个单独的传输中发生。服务器在单次传输中发送对python脚本的请求,然后通过stdin(两次传输)单独发送POST数据。
而使用GET,输入数据在一次传输中作为env变量或命令行参数传递。
答案 2 :(得分:0)
HTTP Expect 100-Continue header (see 8.2.3)和100 Continue response允许客户端将HTTP POST分成2次传输(通过单个连接):
100(继续)状态的目的是 允许正在向请求正文发送请求消息的客户端 确定源服务器是否愿意接受请求 (基于请求标头)在客户端发送请求之前 身体。
在某些情况下,它可能不合适或非常高 如果服务器拒绝,客户端发送正文是低效的 没有看着身体的消息。
我认为大多数浏览器都不会使用此功能,但有些库/功能可以使用(curl,.Net)。