2010-02-26 5 views
2

J'ai trouvé le texte cité dans la programmation Python 3ème édition par Mark Lutz du chapitre 16: côté serveur de script (page 987):HTTP POST Les demandes nécessitent plusieurs transmissions?

Forms comprennent également une option de méthode pour spécifier le style de codage à utiliser pour envoyer des données sur une socket vers la machine du serveur cible. Ici, nous utilisons le style de poste , qui contacte le serveur et lui envoie ensuite un flux de données d'entrée utilisateur dans une transmission distincte. Une alternative obtient le style des navires d'entrée d'informations au serveur dans une seule étape de transmission, en ajoutant des entrées de l'utilisateur à la fin de l'URL utilisée pour invoquer le script, généralement après un? personnage (plus sur cela bientôt).

Je lis ceci avec un peu de perplexité. Autant que je sache, les données postales sont envoyées dans la même transmission qu'une partie du même en-tête http. Je n'ai jamais entendu parler de cette étape supplémentaire pour la transmission de données post.

J'ai rapidement regardé par-dessus les rfc HTTP concernés et n'ai remarqué aucune différence dans la version 1.0 ou 1.1. J'ai également utilisé wireshark pour une analyse et n'ai pas remarqué plusieurs transmissions pour la poste. Est-ce que je manque quelque chose de fondamental ou est-ce une erreur dans le texte?

+0

En fait, je pense que c'était mon interprétation incorrecte de la déclaration. Il n'y a qu'une seule transmission de données entre le serveur et le client.Alors que sur le serveur la communication entre le serveur web et l'application cgi (avec post) se passe dans deux transferts. La requête pour le script python est envoyée par le serveur et les données post sont envoyées via stdin (deux transferts). Alors qu'avec get les données d'entrée sont passées comme env vars ou arguments de ligne de commande (un transfert). – tdedecko

Répondre

0

Oui, il n'y a qu'une transmission de données entre le serveur et le client.

Le contexte du passage faisait référence à la communication entre le serveur web et l'application cgi. La communication du serveur entre le serveur Web et l'application cgi utilisant POST se produit dans deux transferts distincts. La requête pour le script python est envoyée par le serveur en un seul transfert, puis les données POST sont envoyées séparément via stdin (deux transferts).

Considérant que, avec GET, les données d'entrée sont passées en tant que variables d'env ou arguments de ligne de commande en un transfert.

1

La requête POST simple est en une seule étape. mais lorsque vous téléchargez un fichier, le formulaire est publié en plusieurs parties. Dans ce cas, le type de contenu application/x-www-form-urlencoded est remplacé par multipart/form-data.

0

Le HTTP Expect 100-Continue header (see 8.2.3) et 100 Continue response permet la division client HTTP POST dans 2 transmissions (sur une seule connexion):

Le but de l'état 100 (Suite) est de permettre à un client qui envoie une demande message avec un corps de demande pour déterminer si le serveur d'origine est prêt à accepter la demande (en fonction des en-têtes de la demande) avant que le client n'envoie le corps de la demande.

Dans certains cas, il peut être inapproprié ou hautement inefficace pour le client d'envoyer le corps si le serveur refuse le message sans regarder le corps.

Je ne pense pas que la plupart des navigateurs utilisent cela, mais certaines bibliothèques/utities font (curl, .Net).