c - http服务器如何从客户端接收文件

标签 c visual-studio-2008 http

我已经编写了通过 HTTP 将客户端用户密码发送到 HTTP 服务器以进行验证的代码。我生成查询字符串(包含 usrpwd)并将请求发送到服务器。行得通。

但现在我必须向该服务器发送一个文件 (text/xml)。我不知道怎么办。

我们是否必须在服务器端或只在客户端编写一些代码?

服务器接收文件和客户端发送文件的机制是什么?

最佳答案

HTTP协议(protocol)真的很简单,其实是:

  1. 客户端发送包含 HTTP 方法名称、URL 和协议(protocol)版本的行
  2. 客户端发送包含请求参数的 RFC822 header ,如果后面是数据 block ,则发送有关数据 block 的详细信息。
  3. 客户端发送数据 block
  4. 服务器发送包含协议(protocol)版本、状态码和消息的一行
  5. 服务器发送包含响应参数的 RFC822 header ,如果后面是数据 block (或客户端执行 HEAD 请求),则发送有关数据 block 的详细信息
  6. 服务器发送数据 block ,除非方法是 HEAD。
  7. 要么断开连接,要么重新启动协议(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/

相关文章:

c++ - 我可以将普通文件链接到我的可执行文件吗?

visual-studio-2008 - C#报表在PDF/打印模式下不会在新页面上重复字段

VS.Net 的 Javascript 自动完成插件

实时/非批处理应用程序中的 C 退出代码和 atexit()

C - 将命令行参数存储为 Char 数组

visual-c++ - fatal error LNK1106 : invalid file or disk full: cannot seek to 0x5A57BEBC

asp.net - IE 8 和客户端缓存

javascript - XMLHttpRequest 'Access-Control-Allow-Origin' 错误

windows - 为什么HTTP访问*.mp4文件会出现404错误?

c - 对指针的引用作为单个指针的参数