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

时间:2016-11-08 17:15:21

标签: swift http http-headers httprequest http-parameters

我看了this个问题,但它没有回答我的问题。

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

  • 这是对的吗?
  • headersparameters之间是否存在其他差异?
  • 您使用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
        )
    }

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

2 个答案:

答案 0 :(得分:10)

与Rob讨论聊天:

标准是,如果它的信息关于该请求或关于客户端,那么标题是合适的。
但如果它是请求本身的内容(例如,您从服务器请求的内容,一些标识要返回的项目的详细信息,一些要保存在Web服务器上的详细信息等),那么它&# 39;参数。

举个例子:

<强>参数
我们假设您要求提供产品图片。产品ID可以是一个参数。图像大小(缩略图与完整大小)可能是另一个参数。 产品ID和请求的图像大小是&#34;一些细节&#34; (或参数)作为请求内容的一部分提供。

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

答案 1 :(得分:9)

以下是差异列表:

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

  2. 服务器端将自动取消/解码参数名称/值。这不适用于标题名称/值。

  3. 标题名称/值需要在客户端手动转义/编码,并在服务器端手动取消转义/解码。通常使用Base64编码或百分比转义。

  4. 最终用户(查询参数)可以在URL上看到参数,但会向最终用户隐藏标题。