我看了this个问题,但它没有回答我的问题。
对我来说,标题和参数都是字典,区别在于标题是[String : String]
而参数是[String : AnyObject]?
,所以如果您的参数也是字符串,那么可以发送它们在标题内(使用' x - '前缀表示它们不是标准标题)这是一种常见但不是很好的做法。
headers
和parameters
之间是否存在其他差异?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]
或通过标题构建版本
答案 0 :(得分:10)
与Rob讨论聊天:
标准是,如果它的信息关于该请求或关于客户端,那么标题是合适的。
但如果它是请求本身的内容(例如,您从服务器请求的内容,一些标识要返回的项目的详细信息,一些要保存在Web服务器上的详细信息等),那么它&# 39;参数。
举个例子:
<强>参数强>
我们假设您要求提供产品图片。产品ID可以是一个参数。图像大小(缩略图与完整大小)可能是另一个参数。
产品ID和请求的图像大小是&#34;一些细节&#34; (或参数)作为请求内容的一部分提供。
标题强>
但是请求是JSON或x-www-form-urlencoded之类的东西不是请求的内容,而是有关请求的信息(尤其是因为Web服务需要知道如何解析请求的主体)请求)。这就是为什么它是标题。
答案 1 :(得分:9)
以下是差异列表:
它们是为不同目的而设计的。标头携带元信息,参数携带实际数据。
服务器端将自动取消/解码参数名称/值。这不适用于标题名称/值。
标题名称/值需要在客户端手动转义/编码,并在服务器端手动取消转义/解码。通常使用Base64编码或百分比转义。
最终用户(查询参数)可以在URL上看到参数,但会向最终用户隐藏标题。