HTTP参数和HTTP标头有什么区别?

Hon*_*ney 8 http httprequest http-headers http-parameters swift

我读了这个问题,但它没有回答我的问题.

对我来说,标题和参数都是字典,区别在于标题是[String : String]参数是什么[String : AnyObject]?,所以如果您的参数也是字符串,那么您可以在标题内发送它们(同时使用'x-'前缀表示它们不是标准标题)这是一种常见但不好的做法.

  • 那是对的吗?
  • headers和之间还有其他区别parameters吗?
  • 你要发送什么样的其他非String类型parameters

Alamofire Request方法

public func request(
        method: Method,
        _ URLString: URLStringConvertible,
          parameters: [String: AnyObject]? = nil,
          encoding: ParameterEncoding = .URL,
          headers: [String: String]? = nil)
        -> Request
    {
        return Manager.sharedInstance.request(
            method,
            URLString,
            parameters: parameters,
            encoding: encoding,
            headers: headers
        )
    }
Run Code Online (Sandbox Code Playgroud)

作为一个例子,我看到人们["x-ios-version" : UIDevice.currentDevice().systemVersion]通过标题传递或构建版本

Hon*_*ney 11

从Rob在聊天中的讨论:

的标准是,如果它的信息有关的请求或关于客户端,则该标头是适当的.
但如果它是请求本身的内容(例如,您从服务器请求的内容,一些标识要返回的项目的详细信息,一些要保存在Web服务器上的详细信息等),那么它就是一个参数.

举个例子:

参数
假设您正在为产品请求图像.产品ID可以是一个参数.图像大小(缩略图与完整大小)可能是另一个参数.产品ID和请求的图像大小是作为请求内容的一部分提供的"一些细节"(或参数)的示例.

标题
但是请求是JSON或x-www-form-urlencoded之类的东西不是请求的内容,而是有关请求的信息(尤其是因为Web服务需要知道如何解析请求的主体).这就是为什么它是一个标题.


Loc*_*Loc 9

以下是差异列表:

  1. 它们是为不同目的而设计的.标头携带元信息,参数携带实际数据.

  2. HTTP标头不能携带Unicode内容.请参阅此处我可以在HTTP标头中使用Unicode字符吗?

    但参数可以携带Unicode内容.

  3. Web服务器将自动取消转义/解码参数值.这不适用于标题.

  4. 如果要通过标头发送unicode内容,则需要手动编码/解码内容.经常使用Base64编码.

  5. URL上的最终用户(查询参数)可以看到参数,但最终用户可以隐藏标题.