الحد الأقصى لحجم حقل طلب HTTP (POST) وRequest.BinaryRead في JSPs

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

  •  22-07-2019
  •  | 
  •  

سؤال

أولاً، Java الخاص بي هو أبعد من الصدأ ولم أستخدم JSPs أو servlets مطلقًا، ولكني أحاول مساعدة شخص آخر في حل المشكلة.

يتم إعادة نشر النموذج المقدم بواسطة JavaScript إلى JSP.يزيد حجم بعض الحقول في هذا النموذج عن 100 كيلو بايت.ومع ذلك، عندما يتم استرداد حقل النموذج على جانب JSP، يتم اقتطاع قيمة الحقل إلى 100 كيلو بايت.

أعلم الآن أن هناك مشكلة مماثلة في ASP Request.Form والتي يمكن التغلب عليها باستخدام Request.BinaryRead.هل هناك ما يعادلها في جافا؟

أو بدلاً من ذلك، هل يوجد إعداد في Websphere/Apache/IBM HTTP Server يتغلب على نفس المشكلة؟

هل كانت مفيدة؟

المحلول 2

لقد حللنا هذه المشكلة.لا علاقة له بإعدادات خادم الويب كما اتضح فيما بعد ولم يتم اقتطاع أي شيء في المنشور.

تم تقسيم حقل النموذج قبل النشر إلى أجزاء بحجم 102399 بايت بواسطة JavaScript وتمت إضافة كل قطعة إلى حقل النموذج كقيمة لذلك انتهى الأمر بمجموعة من القيم.يبدو أن Request.Form() يقوم بتسلسل هذه القيم تلقائيًا لإعادة إنتاج السلسلة العملاقة المفردة، لكن Java getParameter() لا تفعل ذلك.إن استخدام getParameterValues() وإعادة بناء السلسلة من القيم التي تم إرجاعها قد أدى الغرض.

نصائح أخرى

نظرًا لأنه يجب الاحتفاظ بالطلب المنشور في الذاكرة بواسطة حاوية servlet لتوفير الوظائف التي تتطلبها واجهة برمجة تطبيقات ServletRequest، فإن معظم حاويات servlet لها حد حجم قابل للتكوين لمنع هجمات DoS، وإلا فإن عددًا صغيرًا من العملاء الزائفين يمكن أن يستفزوا الخادم لـ نفاد الذاكرة.

من الغريب بعض الشيء أن يقوم WebSphere باقتطاع الطلب بصمت بدلاً من الفشل بشكل صحيح، ولكن إذا كان هذا هو سبب مشكلتك، فقد تجد خيارات التكوين هنا في وثائق WebSphere.

يمكنك استخدام getInputStream (البايت الخام) أو getReader (بيانات الأحرف التي تم فك تشفيرها) لقراءة البيانات من الطلب.ملحوظة كيف يتفاعل هذا مع قراءة المعلماتإذا كنت لا ترغب في استخدام servlet، فقم بإلقاء نظرة على استخدام ملف منقي ل طَوّق الطلب.

أتوقع أن يرفض WebSphere الطلب بدلاً من اقتطاع البيانات بشكل تعسفي.أظن وجود خطأ في مكان آخر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top