Bienvenue sur PEBKAC.fr, le site qui recense les anecdotes où l’on se moque des utilisateurs ne maîtrisant pas l’outil informatique. PEBKAC est un acronyme signifiant « Problem Exists Between Keyboard And Chair ».
Le problème se situe entre la chaise et le clavier : soumettez vos histoires, donnez votre avis !
Ce site n'est pas le site original pebkac.fr. Je publie ici la liste des PEBKAC que j'ai pu sauvegarder avant que le site original ne soit mis hors ligne.
J'ai des problèmes de remboursement avec un gros constructeur de matériel informatique. Après presque quatre mois de coups de téléphone inutiles, on me redirige vers le service de réclamation, que l'on peut contacter via un formulaire en ligne.

J'ai épuisé mes réserves de patience face à leur incompétence, mais le coup de grâce arrive : ce formulaire ne fonctionne pas. Après analyse du problème, leur serveur renvoie un code 302 à ma requête POST, ce qu'aucun navigateur existant ne sait interpréter correctement.
Bon, et bien, ce sera un courrier papier. PEBKAC.
PEBKAC #6849 proposé par pH le 03/02/2013 | 11 commentaires | 👍🏽 👎🏽 +159
En quoi une redirection en réponse d'un POST poserait problème ?
Personnellement, j'utilise cela au quotidien et ça fonctionne sans problème sur tous les navigateurs que l'on doit gérer (jusqu'à IE7 inclus).

Je m'abstiens de voter en attendant
Commentaire #77253 écrit par neo le 03/02/2013 à 09h00 | 👍🏽 👎🏽
La direction 302 va transformer le POST en GET et par la même occasion perdre toutes les variables. Du coup, la page sensée traiter le formulaire va recevoir une requête vide...
Commentaire #77255 écrit par Request le 03/02/2013 à 09h08 | 👍🏽 👎🏽
@Request c'est un problème d'implémentation client, dans ce cas, pas un problème serveur. Si le client ne reprend pas les champs dans sa nouvelle requête, en quoi est-ce le problème du serveur?

La RFC est claire à ce sujet, notamment le troisième paragraphe:

The requested resource resides temporarily under a different URI. Since the redirection might be altered on occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only cacheable if indicated by a Cache-Control or Expires header field.

The temporary URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).

If the 302 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.

Note: RFC 1945 and RFC 2068 specify that the client is not allowed
to change the method on the redirected request. However, most
existing user agent implementations treat 302 as if it were a 303
response, performing a GET on the Location field-value regardless
of the original request method. The status codes 303 and 307 have
been added for servers that wish to make unambiguously clear which
kind of reaction is expected of the client.
Commentaire #77258 écrit par Laocoon le 03/02/2013 à 09h20 | 👍🏽 👎🏽
On ne parle pas de transformer une requête en une autre, il ne s'agit que de la réponse.
Normalement, tu dois pouvoir faire une redirection 302 après réception des données POST, elles ont très bien pu être traitées entre temps et ça redirige simplement vers une page avec un message ou la page d'accueil.
Il y a vraiment PEBKAC et incompétence quand la redirection 302 se fait en boucle :D (Non non, ça m'arrive jamais innocent)
Commentaire #77266 écrit par Cartman34 le 03/02/2013 à 09h54 | 👍🏽 👎🏽
J'allais poster le même commentaire.

Je rajouterais que c'est même une pratique recommandée : le serveur fait le traitement du POST, puis envoie un 302 pour rediriger vers une page qui dit en gros "Succès de la requête, merci".

Côté client, ça permet d'éviter qu'en faisant F5, le client se retrouve avec une boîte de dialogue du type "Pour actualiser la page, des données doivent être renvoyées. Voulez-vous renvoyer ces données ?".

Côté serveur, ça évite les doubles soumissions en cas d'actualisation.

C'est donc très bien de faire ça, et je le faisais déjà en 2002, donc ça marche très bien sur tous les navigateurs. En attendant des explications de l'auteur, je m'abstiens également de voter.
Commentaire #77267 écrit par FBM le 03/02/2013 à 09h56 | 👍🏽 👎🏽
« If the 302 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request »
« most existing user agent implementations treat 302 as if it were a 303 response, performing a GET on the Location field-value regardless of the original request method. »

Autrement dit : la redirection 302 n'est pas sensé marcher en POST mais la plupart des navigateurs transforment la requête en GET.
La RFC donne raison à Request.
Commentaire #77272 écrit par BSK le 03/02/2013 à 10h24 | 👍🏽 👎🏽
Les explications sont données juste en dessous par Request (voir la RFC dans un autre post plus loin).

Merci de lire tous les commentaires avant de dire « Je comprends pas » !
Commentaire #77273 écrit par BSK le 03/02/2013 à 10h29 | 👍🏽 👎🏽
J'avais vu quelque part l'histoire de quelqu'un qui avait le même genre de problèmes pour un remboursement. Il avait écrit un script qui envoyait automatiquement un email de relance tout les dix minutes. Il a été remboursé en quelques heures.
Commentaire #77274 écrit par Yukotso le 03/02/2013 à 10h46 | 👍🏽 👎🏽
j'ai hésité avec CTLP car vu la bande d'incompétents auxquels tu as l'air d'avoir eu affaire, je pense que tu aurais du passer au recommandé directement
Commentaire #77279 écrit par achille le 03/02/2013 à 11h00 | 👍🏽 👎🏽
En effet ; je ne sais pas si c'est ta source, mais j'avais lu ça sur Slashdot.
Commentaire #77303 écrit par Noraa le 03/02/2013 à 13h42 | 👍🏽 👎🏽
La note de la rfc explique au contraire que tous les navigateurs traitent une réponse 302 en faisant un GET sur l'URL donné dans le header location.

Donc le comportement des navigateurs a fait changer la RFC où deux nouveaux codes ont été introduits pour gérer tous les cas sans ambiguïté.

Ça confirme que tous les navigateurs gèrent les réponses 302 en réponse à un POST sans aucun problème, contrairement à ce qu'affirme l'auteur du pebkac.
Commentaire #77339 écrit par FBM le 03/02/2013 à 19h34 | 👍🏽 👎🏽