web-dev-qa-db-ja.com

HTTPパラメータとHTTPヘッダーの違いは何ですか?

私は this 質問を読みましたが、私の質問には回答しませんでした。

私にとってヘッダーとパラメーターはどちらも辞書ですが、パラメーターが_[String : String]_であるのにヘッダーが_[String : AnyObject]?_であるという違いがあります。そのため、パラメーターも文字列の場合は、ヘッダー内でそれらを送信しますcould ( 'x-'プレフィックスを使用して、それらが標準ヘッダーではないことを示します)これは一般的ですが、良い方法ではありません。

  • あれは正しいですか?
  • headersparametersには他に違いがありますか?
  • parametersを使用して、他のどのような非文字列型を送信しますか?

Alamofire Request method

_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]またはビルドバージョンを渡す人々を見てきました

11
Honey

ここに違いのリストがあります:

  1. それらは異なる目的のために設計されています。ヘッダーにはメタ情報が含まれ、パラメーターには実際のデータが含まれます。

  2. サーバー側は、パラメータ名/値を自動的にアンエスケープ/デコードします。これはヘッダー名/値には適用されません。

  3. ヘッダー名/値は、クライアント側で手動でエスケープ/エンコードし、サーバー側で手動でエスケープ解除/デコードする必要があります。 Base64エンコーディングまたはパーセントエスケープがよく使用されます。

  4. パラメーターはURLのエンドユーザー(クエリパラメーター)から見ることができますが、ヘッダーはエンドユーザーに表示されません。

10
Loc

チャットでのロブとの議論から:

基準は、それがaboutリクエストであるか、またはaboutクライアントである場合です。 、ヘッダーが適切です。
しかし、それ自体が要求の内容(たとえば、サーバーから要求しているもの、返されるアイテムを識別するいくつかの詳細、Webサーバーに保存されるいくつかの詳細など)であれば、それはパラメータ。

例として:

パラメータ
商品の画像をリクエストしているとします。製品IDは1つのパラメータである場合があります。画像サイズ(サムネイルとフルサイズ)は、別のパラメーターである可能性があります。製品IDと要求された画像サイズは、要求のコンテンツの一部として提供される「詳細」(またはパラメーター)の例です。

ヘッダー
しかし、リクエストがJSONまたはx-www-form-urlencodedであるようなものは、リクエストのコンテンツではなく、リクエストに関する情報です(espは、Webサービスが本文の解析方法を知るために必要なので、リクエスト)。それがヘッダーである理由です。

14
Honey