Requête HTTP (POST) limite de taille de champ & amp; Request.BinaryRead dans les JSP

StackOverflow https://stackoverflow.com/questions/1826524

  •  22-07-2019
  •  | 
  •  

Question

Tout d’abord, mon Java est plus que rouillé et je n’ai jamais utilisé de JSP ni de servlet, mais j’essaie d’aider quelqu'un d'autre à résoudre un problème.

Un formulaire rendu par JavaScript est en train d'être posté sur un fichier JSP. Certains des champs de ce formulaire ont une taille supérieure à 100 Ko. Toutefois, lors de l'extraction du champ de formulaire côté JSP, la valeur du champ est tronquée à 100 Ko.

Maintenant, je sais qu'il existe un problème similaire dans ASP Request.Form qui peut être résolu en utilisant Request.BinaryRead. Existe-t-il un équivalent en Java?

Ou bien existe-t-il un paramètre dans Websphere / Apache / IBM HTTP Server qui corrige le même problème?

Était-ce utile?

La solution 2

Nous avons résolu le problème. Rien à voir avec les paramètres du serveur Web, comme il s'est avéré et rien n'a été tronqué dans le message.

Le champ de formulaire avant la publication était divisé en blocs de la taille de 102399 octets par JavaScript et chaque bloc était ajouté au champ de formulaire en tant que valeur pour aboutir à un tableau de valeurs. Request.Form () semble concaténer automatiquement ces valeurs pour reproduire la chaîne géante unique, contrairement à Java getParameter (). Utiliser getParameterValues ??() et reconstruire la chaîne à partir des valeurs renvoyées a toutefois fait l'affaire.

Autres conseils

Etant donné que la requête publiée doit être conservée en mémoire par le conteneur de servlets pour fournir la fonctionnalité requise par l'API ServletRequest, la plupart des conteneurs de servlets ont une taille configurable pour empêcher les attaques par déni de service, faute de quoi un petit nombre de faux clients pourrait provoquer le serveur manque de mémoire.

C’est un peu étrange que WebSphere tronque la demande en silence au lieu d’échouer correctement, mais si c’est la cause de votre problème, vous pouvez trouver les options de configuration dans la documentation WebSphere .

Vous pouvez utiliser getInputStream (octets bruts) ou getReader (données de caractères décodés) pour lire les données de la requête. Remarque comment cela interagit avec la lecture des paramètres. Si vous ne souhaitez pas utiliser de servlet, utilisez Filtre pour wrap la demande.

Je m'attendrais à ce que WebSphere rejette la demande plutôt que de tronquer les données de manière arbitraire. Je soupçonne un bug ailleurs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top