我已经编写了通过 HTTP 将客户端用户密码发送到 HTTP 服务器以进行验证的代码。我生成查询字符串(包含 usr
、pwd
)并将请求发送到服务器。行得通。
但现在我必须向该服务器发送一个文件 (text/xml
)。我不知道怎么办。
我们是否必须在服务器端或只在客户端编写一些代码?
服务器接收文件和客户端发送文件的机制是什么?
最佳答案
HTTP协议(protocol)真的很简单,其实是:
- 客户端发送包含 HTTP 方法名称、URL 和协议(protocol)版本的行
- 客户端发送包含请求参数的 RFC822 header ,如果后面是数据 block ,则发送有关数据 block 的详细信息。
- 客户端发送数据 block
- 服务器发送包含协议(protocol)版本、状态码和消息的一行
- 服务器发送包含响应参数的 RFC822 header ,如果后面是数据 block (或客户端执行 HEAD 请求),则发送有关数据 block 的详细信息
- 服务器发送数据 block ,除非方法是 HEAD。
- 要么断开连接,要么重新启动协议(protocol)。
通常,服务器至少会理解这些方法:
- GET(客户端不发送数据 block ,服务器发送数据 block )
- HEAD(同GET,但服务器省略响应数据 block )
- POST(客户端发送数据 block ,服务器响应数据 block )
- PUT(客户端发送数据 block ,服务器不发送数据 block )
在方法的选择上有一些隐含的语义,因为 GET 请求永远不会修改服务器状态并且它们的结果可以被缓存和重用(这是允许浏览器在页面之间来回移动的原因),而 POST 请求则可以更改服务器状态——顺便说一下,这是您上传文件时所做的。
因此,为了发送文件,准备一个 POST 或 PUT 请求(取决于您是否期望回复文档,或者一个简单的确认状态代码是否足够),它由请求行组成, header 包含额外的协议(protocol)信息(“Host:”,“User-Agent:”,...),描述文件的标题(“Content-Type:”,“Content-Length:”,...),一个空行,以及文件内容,并通过 TCP 连接发送,然后读回状态行、响应 header 和响应文件(如果您要求的话)。
关于c - http服务器如何从客户端接收文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9582892/