web-dev-qa-db-fra.com

Quelle est la différence entre les paramètres HTTP et les en-têtes HTTP?

J'ai lu cette question mais cela n'a pas répondu à ma question.

Pour moi, les en-têtes et les paramètres sont tous deux des dictionnaires, à la différence que les en-têtes sont [String : String] Tandis que les paramètres sont [String : AnyObject]? Et donc si vos paramètres sont également des chaînes, alors vous pourriez envoyer dans les en-têtes (tout en utilisant un préfixe 'x-' pour signifier qu'ils ne sont pas des en-têtes standard), ce qui est une pratique courante mais pas bonne.

  • Est-ce exact?
  • Existe-t-il une autre différence entre headers et parameters?
  • Quel type d'autres types non String enverriez-vous en utilisant parameters?

Méthode 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
        )
    }

Par exemple, j'ai vu des gens passer ["x-ios-version" : UIDevice.currentDevice().systemVersion] ou construire des versions via des en-têtes

11
Honey

Voici la liste des différences:

  1. Ils sont conçus pour différents usages. Les en-têtes contiennent des méta-informations, les paramètres contiennent des données réelles.

  2. Le côté serveur désannule/décode automatiquement les noms/valeurs des paramètres. Cela ne s'applique pas aux noms/valeurs d'en-tête.

  3. Les noms/valeurs d'en-tête doivent être échappés/codés manuellement côté client et être décompressés/décodés manuellement côté serveur. L'encodage Base64 ou le pourcentage d'échappement est souvent utilisé.

  4. Les paramètres peuvent être vus par les utilisateurs finaux (paramètres de requête) sur l'URL, mais les en-têtes sont masqués pour les utilisateurs finaux.

10
Loc

De la discussion avec Rob dans le chat:

Le critère est que s'il s'agit d'informations sur la demande ou sur le client , alors l'en-tête est approprié.
Mais si c'est le contenu de la demande elle-même (par exemple, ce que vous demandez au serveur, certains détails qui identifient l'article à retourner, certains détails à enregistrer sur le serveur Web, etc.), alors c'est un paramètre.

Par exemple:

paramètre
Disons que vous demandez une image pour un produit. L'identifiant du produit peut être un paramètre. La taille de l'image (miniature vs taille réelle) peut être un autre paramètre. L'identifiant du produit et la taille d'image demandée sont des exemples de "certains détails" (ou paramètres) fournis dans le cadre du contenu d'une demande.

En-tête
Mais des choses comme la demande est JSON ou x-www-form-urlencoded ne sont pas le contenu de la demande, mais plutôt des informations sur la demande (d'autant plus que cela est nécessaire pour que le service Web sache comment analyser le corps de la demande). C'est pourquoi c'est un en-tête.

14
Honey