【问题标题】:What are some differences between encoding vs content-type in AlamofireAlamofire中的编码与内容类型有什么区别
【发布时间】:2019-01-21 05:30:07
【问题描述】:
 Alamofire.request(url, method: .post, parameters: param, encoding: JSONEncoding.default, headers: [content-type: multipart/form-data])

在请求的标题中,我看到有一个名为 content-type 的字段,可以设置为 application/json、application/x-www-form-urlencoded、multipart/form-data。但问题是在编码参数中我们也可以设置为JSONEncoding.default。那么Alamofire中的encoding vs content-type有什么区别。

【问题讨论】:

    标签: swift networking alamofire


    【解决方案1】:

    编码:用于我们发送到服务器的参数

    content-type:用于指定响应类型

    【讨论】:

    • 我通常看到人们设置 Content-Type: multipart/form-data 用于上传文件(将文件发送到服务器)。当您说“内容类型:用于指定响应类型”时。你能解释更多吗?
    【解决方案2】:

    encoding 参数设置Alamofire 应该如何解析传递的参数。例如,如果设置为 URLEncoding.default,Alamofire 会将参数附加到 URL。

    另一方面,Content-Type 标头告诉 Web 服务器我们要发送什么类型的内容。

    来自the MDN web docs

    Content-Type 实体头用于指示资源的媒体类型。

    在响应中,Content-Type 标头告诉客户端返回内容的实际内容类型。

    【讨论】:

    • 我通常看到人们设置 Content-Type: multipart/form-data 用于上传文件(将文件发送到服务器)。而您说“我们想要返回的内容类型。”你能解释更多吗?
    • @Louis 感谢您的通知,我相应地更正了我的答案。请求中的 Content-Type 标头指示我们发送到服务器的文件的类型。
    • 这很有帮助。谢谢
    【解决方案3】:

    由于 Alamofire 是一个 HTTP 请求包装器,它提供了一个用于设置 HTTP 标头的参数。正如 W3C 所述,HTTP 标头定义了服务器如何处理您的请求:W3C' Header Field Definitions

    Alamofire 中提供了一个额外的编码参数,因为您必须描述如何格式化输入响应。简而言之,服务器无法理解如何处理 Swift Array 或 Dictionary,您需要明确编写需要哪种 encoding。 Alamofire 提供了几种编码 Swift 对象的解决方案:Alamofire Encoding Options.

    这样,根据您的请求方法(PUT、GET、POST,...),您可以有一个 Header ["Accept": "application/json"] 和不同的 Alamofire 编码选项。

    【讨论】:

      猜你喜欢
      • 2021-01-24
      • 2020-04-17
      • 2011-09-25
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 2010-10-02
      • 2020-07-02
      相关资源
      最近更新 更多