2010-11-22 4 views
20

Je voulais juste une clarification des types de contenu de formulaire:Type de contenu de formulaire pour un HTTP POST json?

  1. application/x-www-form-urlencoded: C'est là que vous pouvez envoyer params encodés avec l'URL.

  2. multipart/form-data: ??

je dois envoyer un JSON dans le poste (il aurait du type: text/x-json, je suppose). Donc la question est, est multipart/form-data approprié à cet effet/est application/x-www-form-urlencoded mieux?

De même, serait-il possible d'envoyer certains paramètres codés dans l'URL, et certaines données dans le json?

Répondre

3
multipart/form-data 

est utilisé lorsque vous souhaitez télécharger des fichiers sur le serveur. Veuillez vérifier this article pour plus de détails.

+0

J'ai lu cet article, mais il n'a pas indiqué que multipart/form-data est seulement pour les téléchargements de fichiers. Est-ce le cas dans la pratique, cependant? – rmk

+1

Oui. L'utilisation la plus courante consiste à télécharger un fichier sur un serveur même s'il était simplement inclus dans la spécification pour conditionner le contenu à soumettre dans plusieurs sections d'un document multiforme. Si vous allez à l'article et trouvez le mot "multipart", vous lirez: '[...] La valeur par défaut de cet attribut est" application/x-www-form-urlencoded ". La valeur "multipart/form-data" doit être utilisée en combinaison avec l'élément INPUT, type = "file" .' – Lorenzo

+1

Si tout ce qui est envoyé est un seul document json, il est parfois préférable d'utiliser 'application/json', Cela demande un peu de travail pour que les clients et les serveurs standard utilisent autre chose que 'multipart/form-data' et' application/x-www-form-encoded' mais cela reste tout à fait dans les normes. –

5

Je me suis demandé la même chose. Fondamentalement, il semble que la spécification html a différents types de contenu pour les données html et formulaire. Json n'a qu'un seul type de contenu.

Selon les spécifications, un poste de données JSON doit avoir le type de contenu:
demande /JSON

partie pertinente des HTML spec

6,7 types de contenu (types MIME)
...
Exemples de types de contenu: "text/html", "image/png", "image/gif", "video/mpeg", "text/css" et "audio/basic".

17.13.4 Types de contenu de formulaire
...
application/x-www-form-urlencoded
Il s'agit du type de contenu par défaut. Les formulaires soumis à ce type de contenu doivent être codés comme suit

partie pertinente des JSON spec

  1. Considérations IANA
    Le type de support MIME pour le texte JSON est une application/JSON.
+0

Est-ce une réponse ou une question? – Trix

22

Il semble que les gens ont répondu à la première partie de votre question (application d'utilisation/JSON).

Pour la deuxième partie: Il est parfaitement légal d'envoyer des paramètres de requête dans une requête HTTP POST.

Exemple:

POST /members?id=1234 HTTP/1.1 
Host: www.example.com 
Content-Type: application/json 

{"email":"[email protected]"} 

Les paramètres de requête sont couramment utilisés dans une requête POST de se référer à une ressource existante. L'exemple ci-dessus mettrait à jour l'adresse électronique d'un membre existant avec l'ID de 1234.

+0

L'exemple de requête POST est parfaitement légal, mais plus difficile à supporter qu'il ne devrait l'être (parce que les personnes qui écrivent des serveurs HTTP attendent que HTTP POST soit toujours une application/x-www-form-encoded ou multipart/form-data ', parce qu'obtenir n'importe quoi d'autre nécessite un javascript compliqué) –

+1

@JeremyList - Les serveurs Web ne s'attendent pas à ce qu'un post http soit l'un de ces deux types de contenu. Ces types de contenu se réfèrent aux formulaires html. Le type de données suggérera le type de contenu, par exemple application/json ci-dessus. – Matt

+0

@Matt C'est ce qu'ils devraient faire: en pratique, la plupart des serveurs traitent tout sauf les données de formulaire html comme null. –

Questions connexes