【问题标题】:How do boundaries work in multipart post requests?边界在多部分发布请求中如何工作?
【发布时间】:2010-10-26 19:21:56
【问题描述】:

我试图将文件从 iPhone 上传到服务器。我试图避免使用任何不是由苹果制作的库,据我所知,我需要在构建我的请求时达到相当低的水平。有人能告诉我多部分/表单数据请求中的“边界”是什么以及如何正确使用它吗?

【问题讨论】:

  • 你是在写 iPhone 代码,还是服务器代码?
  • 两者,但我问的是在客户端(iphone)上构建请求。

标签: iphone http post http-post multipartform-data


【解决方案1】:

边界是一段任意文本,客户端使用它来分隔要发布的表单的字段。客户端将其使用的边界声明为 Content-type 标头的一部分。

From the IETF Form-based File Upload in HTML RFC:

选择了一个没有出现在任何数据中的边界。 (这 有时以概率方式进行选择。)表单的每个字段 被发送,按照它在表格中出现的顺序,作为 多部分流。每个部分都标识了 INPUT 名称中的 原始的 HTML 表单。每个部分都应标有适当的标签 content-type 如果媒体类型已知(例如,从文件中推断) 扩展名或操作系统类型信息)或作为 应用程序/八位字节流。

...

6。例子

假设服务器提供以下 HTML:

<FORM ACTION="http://server.dom/cgi/handle"
       ENCTYPE="multipart/form-data"
       METHOD=POST>
 What is your name? <INPUT TYPE=TEXT NAME=submitter>
 What files are you sending? <INPUT TYPE=FILE NAME=pics>
 </FORM>

并且用户在名称字段中键入“Joe Blow”,然后选择一个文本 文件“file1.txt”以回答“您要发送哪些文件?”

客户端可能会发回以下数据:

   Content-type: multipart/form-data, boundary=AaB03x

   --AaB03x
   content-disposition: form-data; name="field1"

   Joe Blow
   --AaB03x
   content-disposition: form-data; name="pics"; filename="file1.txt"
   Content-Type: text/plain

    ... contents of file1.txt ...
   --AaB03x--

如果用户还指定了图像文件“file2.gif”作为答案 到“你发送什么文件?”,客户端可能客户端可能发送 返回以下数据:

   Content-type: multipart/form-data, boundary=AaB03x

   --AaB03x
   content-disposition: form-data; name="field1"

   Joe Blow
   --AaB03x
   content-disposition: form-data; name="pics"
   Content-type: multipart/mixed, boundary=BbC04y

   --BbC04y
   Content-disposition: attachment; filename="file1.txt"

在第一个示例中,边界是固定字符串AaB03x。在第二个例子中,边界首先是AaB03x,然后切换到BbC04y

【讨论】:

    猜你喜欢
    • 2017-07-05
    • 2016-05-22
    • 1970-01-01
    • 2019-03-07
    • 2018-10-01
    • 2013-12-22
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    相关资源
    最近更新 更多