1. Get est utilisé pour obtenir des données du serveur, tandis que le post est utilisé pour transmettre des données au serveur.
2. GET Ajoute les données sous la forme à l'URL pointée par l'action sous la forme de variable = valeur et utilise A? connexion entre les deux, tandis que la & connexion entre chaque variable; Le poste consiste à placer les données sous la forme dans le corps de données et à la transmettre à l'URL pointée par l'action de la façon dont la variable et la valeur correspondent à la valeur.
3. Get n'est pas sûr car pendant le processus de transmission, les données sont placées dans l'URL demandée. De nos jours, de nombreux serveurs existants, serveurs proxy ou agents utilisateur enregistreront l'URL demandée dans le fichier journal, puis la placeront quelque part, afin que certaines informations de confidentialité puissent être vues par des tiers. De plus, les utilisateurs peuvent également voir directement les données soumises sur le navigateur, et certains messages système internes seront affichés devant l'utilisateur. Toutes les opérations de poste sont invisibles pour l'utilisateur.
4. La quantité de données transmises par GET est petite, ce qui est principalement dû à la limitation de la longueur de l'URL; Et le POST peut transférer une grande quantité de données, vous ne pouvez donc utiliser Post que lors du téléchargement de fichiers (bien sûr, il y a une autre raison, qui sera mentionnée plus loin).
5. Get restreint la valeur de l'ensemble de données des formulaires de formulaire à être des caractères ASCII; tandis que Post prend en charge l'intégralité du jeu de caractères ISO10646. Par défaut, encodage ISO-8859-1
6. Get est la méthode de formulaire par défaut.
La comparaison suivante est très, très utile:
Je travaille sur le développement Web de Java depuis un certain temps, et il y a un problème qui me dérange toujours, ce qui est le problème du brouillage. Fondamentalement, je recherche des solutions en ligne (il y a vraiment beaucoup d'informations en ligne), et ils présentent tous comment résoudre ces problèmes brouillés, mais peu d'entre eux expliquent clairement toute l'histoire du problème. Parfois, après avoir lu certains articles, je pense que je le comprends, mais en développement, le problème brouillé sort comme un fantôme et est vraiment un gros problème! Cet article est une accumulation d'une certaine compréhension de ma lutte à long terme avec les codes brouillés, et j'espère que plus d'amis me donneront des conseils et des suppléments.
Il existe 2 méthodes pour que le formulaire soumette des données au serveur, parlons respectivement de Get et Post.
(I) Obtenez une soumission
1. Tout d'abord, parlons de la façon de coder les données et de les soumettre au serveur à l'aide de la méthode GET.
Pour la méthode GET, les données sont concaténées après l'URL demandée en tant que paramètres, tels que: http: // localhost: 8080 / servlet? Msg = ABC
(Un problème très courant de code brouillé apparaîtra. Si chinois ou d'autres caractères spéciaux apparaissent dans l'URL, tels que: http: // localhost: 8080 / servlet? Msg = hangzhou, le code brouillé est facile à obtenir du code brouillé sur le serveur), une fois l'épissage de l'URL terminé, le navigateur sera à encoder l'URL puis l'envoie au serveur. Le processus de l'encodage de l'URL consiste à encoder une partie de l'URL en tant que caractères et à le coder en code d'octets binaires en fonction d'une certaine méthode de codage (telle que: UTF-8, GBK, etc.), puis chaque octet est représenté par une chaîne% xy contenant 3 caractères, où XY est la représentation hexadécimale de deux bits de l'octet. Ce que j'ai dit ici peut ne pas être clair. Pour plus de détails, veuillez consulter l'introduction de la classe java.net.urlencoder ici. Après avoir compris le processus d'URL encoder, nous pouvons voir deux questions très importantes. Premièrement: les caractères qui nécessitent un encodage d'URL sont généralement des caractères non ASCII (d'une manière générale). En termes simples, à l'exception des lettres anglaises (comme le chinois, le japonais, etc.) doivent toutes effectuer un encode d'URL. Par conséquent, pour nous, l'encodage URL ne sera pas brouillé lorsque le serveur sera brouillé. Le code brouillé est causé par l'URL contenant des caractères chinois ou spéciaux dans l'URL; Deuxièmement: dans quelle méthode d'encodage URL codera-t-il les caractères? Il s'agit de l'activité du navigateur, et différents navigateurs ont des pratiques différentes. Les versions chinoises des navigateurs utilisent généralement GBK par défaut. UTF-8 peut également être utilisé en définissant le navigateur. Différents utilisateurs peuvent avoir différents paramètres de navigateur, ce qui conduit à différentes méthodes de codage. Par conséquent, de nombreux sites Web font d'abord l'URL en utilisant JavaScript pour les caractères chinois ou spéciaux dans l'URL, puis en épissant l'URL pour soumettre des données, c'est-à-dire en faisant du codémence de l'URL pour le navigateur. L'avantage est que le site Web peut unifier la méthode d'encodage de soumission des données. Après avoir terminé le codage de l'URL, l'URL actuelle devient un caractère dans la plage ASCII, puis la convertit en binaire dans la méthode de codage de l'ISO-8859-1 et est envoyée avec l'en-tête de demande. Je voudrais dire un peu plus ici que pour la méthode GET, il n'y a pas d'entité de demande et que les données contenant URL se trouvent dans l'en-tête de demande. La raison pour laquelle j'utilise URL Encode est: pour l'en-tête de demande, les données pures de l'en-tête de demande doivent être codées en binaire 101010 ... En fin de compte, les données pures de l'en-tête de demande doivent être transmises sur Internet. Si vous encodez directement des caractères spéciaux tels que le chinois et d'autres caractères ISO-8859-1, les informations seront perdues, il est donc nécessaire de faire de l'URL en premier.
2. Comment le côté serveur (TOMCAT) obtient-il les données de décodage.
La première étape consiste à décoder les données avec ISO-8859-1. Pour la méthode GET, Tomcat obtient les caractères d'en-tête de données dans la gamme ASCII et l'URL de demande contient des données de paramètres. S'il y a des caractères spéciaux tels que le chinois dans le paramètre, il s'agit toujours de l'état% xy après le code d'URL. Arrêtez d'abord, parlons du processus général d'obtention de données par les développeurs. Habituellement, tout le monde obtient des données de paramètres. L'objet de demande ou les données que nous obtenons est décodé, mais le programme ne peut pas les spécifier pendant le processus de décodage. Ici, nous devons dire que de nombreux débutants disent que l'utilisation de request.Setcharacterencoding (jeu de caractères) peut spécifier la méthode de décodage, mais ce n'est pas possible . En regardant l'API officielle du servlet, il y a une explication de cette méthode: remplace le nom du codage du caractère utilisé dans le corps de cette demande. Cette méthode doit être appelée avant de lire les paramètres de la demande ou la lecture d'entrée à l'aide de getReader (). On peut voir qu'il est impuissant à faire quoi que ce soit pour la méthode GET. Alors, quelle méthode d'encodage est utilisée pour décoder les données? C'est les affaires de Tomcat. La valeur par défaut est ISO-8859-1, afin que nous puissions découvrir pourquoi la demande GET a des paramètres chinois et pourquoi le code brouillé est obtenu du côté du serveur. La raison en est que l'UTF-8 ou GBK sont généralement utilisés pour coder le code de l'URL de données. Ici, le décodeur URL n'est évidemment pas possible. Dans le programme, nous pouvons directement
Code java
1. Nouvelle chaîne (request.getParameter (nom) .getBytes (ISO-8859-1), la méthode de codage d'encodage URL spécifié par le client)
Restaurez le bytecode et décodez les données de la bonne manière. Les articles en ligne font généralement une configuration à Tomcat
Code XML
1. <Port du connecteur = 8080 Protocole = HTTP / 1.1 MaxThreads = 150 ConnectionTimeout = 20000 Redirectport = 8443 URIENCODING = GBK />
Cela permet à Tomcat d'utiliser la méthode spécifiée pour récupérer les données. L'introduction du décodeur URL est là
(I) Soumission de poste
1. Comment coder les données et les soumettre au serveur à l'aide de la méthode Post du client (navigateur).
Les données à transmettre dans la méthode post-méthode doivent également être un encode d'URL, alors quelle méthode d'encodage utilise-t-elle?
S'il existe un segment <meta http-equiv = contenu contenu contenu = text / html; Charset = Set de caractères (GBK, UTF-8, etc.) Dans le fichier HTML où se trouve le formulaire, puis le post sera codé dans la méthode de codage spécifiée ici. Généralement, tout le monde pense que ce code consiste à faire savoir au navigateur quel personnage s'est défini pour interpréter la page Web, donc le site Web le placera à l'avant du code HTML et essaie de ne pas apparaître de code brouillé. En fait, il a également une autre fonction pour spécifier la méthode de codage d'encodage URL de la méthode post du formulaire pour soumettre des données . De là, nous pouvons voir que pour la méthode GET à compter, la méthode de codage d'encodage URL du navigateur est déterminée par les paramètres du navigateur (peut être spécifié dans JS pour les spécifications unifiées), et la méthode post peut être spécifiée par le développeur.
2. Comment le côté serveur (TOMCAT) obtient-il les données de décodage.
Si vous utilisez des paramètres par défaut TomCat et qu'aucun paramètre de codage tel que les filtres n'est effectué, il est également décodé avec ISO-8859-1, mais request.Setcharacterencoding (jeu de caractères) peut être utile.
J'ai trouvé que la prémisse de ce que fait Tomcat ci-dessus est qu'il n'y a pas de méthode de codage spécifiée dans l'en-tête de demande. Si la méthode d'encodage spécifiée dans l'en-tête de demande, elle sera codée de cette manière.Il y a 2 articles recommandés, et les adresses sont
Encodage URL en profondeur et facile à comprendre: http://www.cnblogs.com/yencain/articles/1321386.html;
Problème de code d'ordures Lors de la soumission des données à l'aide de la méthode du post: http://wanghuan8086.javaeye.com/blog/173869
Il est important d'utiliser le poste. S'il y a un segment dans le fichier HTML où se trouve le formulaire. <meta http-equiv = contenu contenu contenu = text / html; charse = set de caractères (gbk, utf-8, etc.) />
Fortement recommandé pour soumettre le poste