来自Tomcat的不完整HTTP响应

时间:2015-07-23 19:31:23

标签: java jsp tomcat

  • Tomcat 8.0.17,驻留在localhost上。
    • Linux Mint 17.1
    • Oracle Java 8.0.1.40-b25

我有一个很长的JSP:它包含一个下拉列表,其中包含国家/地区代码和国家/地区(以希伯来语命名)。当我尝试加载 JSP从它的地址开始,我得到了部分响应。在葡萄牙周围切断(可以在其他任何地方,取决于页面中的代码量)。

页面地址为 example.com/he/index2.jsp

我认为它与页面的大小有关,因为当我删除一些行时,我最终得到了正确的响应。

我没有得到任何例外或错误,响应返回状态为200。

我尝试将缓冲区大小设置为8kb,32kb,128kb和2048kb。当它是8kb时,我确实得到了缓冲区溢出错误,但是在32及以上时我没有得到这个错误并且响应仍然是部分的。

我尝试将自动刷新设置为false。

我已尝试在 server.xml 中的连接器节点中将 maxSwallowSize socketBuffer 设置为32768。< / p>

将代码缩小到最小,我有一个邪恶页面的例子。我已经删除了所有不必要的Java代码,包括等。注释包含是必不可少的,因为我确实需要这些CSS文件。仅仅为了检查,我对它们进行了评论,但我仍然得到了部分回应。

不知道它是否相关,我有一个解析此地址的请求过滤器,看到地址以 / he / 开头,并将Session对象附加到请求中。该对象包含一个String作为会话ID,一个Locale和一个String作为引用者。然后它将请求转发给 index2.jsp

感谢您解决此问题的任何帮助。

导致问题的最小页面: 最后一段元素用于指示响应是否正确。

&#13;
&#13;
<%@ page buffer="2048kb" autoFlush="false" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
    <!--     <link href="/css/bootstrap.css" rel='stylesheet' type='text/css'/> -->
    <!--     <link href="/css/bootstrap.min.css" rel='stylesheet' type='text/css'/> -->
    <!--     <link href="/css/theme-style.css" rel='stylesheet' type='text/css'/> -->
    <!--     <meta name="viewport" content="width=device-width, initial-scale=1"> -->
    <!--     <script src="/js/jquery.min.js"></script> -->
    <!--     <script src="/js/bootstrap.min.js"></script> -->
</head>
<body>
    <select>
        <option value="IL">ישראל</option>
        <option value="UG">אוגנדה</option>
        <option value="AT">אוסטריה</option>
        <option value="AU">אוסטרליה</option>
        <option value="UA">אוקראינה</option>
        <option value="UY">אורוגוואי</option>
        <option value="AZ">אזרבייג'ן</option>
        <option value="AE">איחוד האמירויות הערביות</option>
        <option value="IT">איטליה</option>
        <option value="BS">איי בהאמה</option>
        <option value="VG">איי הבתולה הבריטיים</option>
        <option value="TC">איי טורקס וקאיקוס</option>
        <option value="MH">איי מרשל</option>
        <option value="SJ">איי סבאלברד ויאן מאיין</option>
        <option value="SC">איי סיישל</option>
        <option value="FO">איי פארו</option>
        <option value="FK">איי פוקלנד</option>
        <option value="PN">איי פיטקרן</option>
        <option value="CK">איי קוק</option>
        <option value="KY">איי קיימן</option>
        <option value="SB">איי שלמה</option>
        <option value="ID">אינדונזיה</option>
        <option value="IS">איסלנד</option>
        <option value="IE">אירלנד</option>
        <option value="SV">אל סלוודור</option>
        <option value="AL">אלבניה</option>
        <option value="DZ">אלג'יריה</option>
        <option value="AI">אנגווילה</option>
        <option value="AO">אנגולה</option>
        <option value="AD">אנדורה</option>
        <option value="AG">אנטיגואה וברבודה</option>
        <option value="EE">אסטוניה</option>
        <option value="EC">אקוודור</option>
        <option value="AR">ארגנטינה</option>
        <option value="AW">ארובה</option>
        <option value="ER">אריתריאה</option>
        <option value="AM">ארמניה</option>
        <option value="US">ארצות הברית</option>
        <option value="ET">אתיופיה</option>
        <option value="BT">בהוטן</option>
        <option value="BW">בוטסואנה</option>
        <option value="BG">בולגריה</option>
        <option value="BO">בוליביה</option>
        <option value="BA">בוסניה והרצגובינה</option>
        <option value="BI">בורונדי</option>
        <option value="BF">בורקינה פאסו</option>
        <option value="BH">בחריין</option>
        <option value="BY">בלארוס</option>
        <option value="BE">בלגיה</option>
        <option value="BZ">בליז</option>
        <option value="BJ">בנין</option>
        <option value="BB">ברבדוס</option>
        <option value="BN">ברוניי</option>
        <option value="BR">ברזיל</option>
        <option value="GB">בריטניה</option>
        <option value="BM">ברמודה</option>
        <option value="DJ">ג'יבוטי</option>
        <option value="JM">ג'מייקה</option>
        <option value="GE">גאורגיה</option>
        <option value="GA">גבון</option>
        <option value="GT">גואטמלה</option>
        <option value="GP">גוואדלופ</option>
        <option value="GY">גיאנה</option>
        <option value="GF">גיאנה הצרפתית</option>
        <option value="GI">גיברלטר</option>
        <option value="GN">גינאה</option>
        <option value="GW">גינאה ביסאו</option>
        <option value="GM">גמביה</option>
        <option value="GL">גרינלנד</option>
        <option value="DE">גרמניה</option>
        <option value="GD">גרנדה</option>
        <option value="DM">דומיניקה</option>
        <option value="DK">דנמרק</option>
        <option value="ZA">דרום אפריקה</option>
        <option value="KR">דרום קוריאה</option>
        <option value="NF">האי נורפוק</option>
        <option value="AN">האנטילים ההולנדיים</option>
        <option value="IN">הודו</option>
        <option value="NL">הולנד</option>
        <option value="HK">הונג קונג</option>
        <option value="HU">הונגריה</option>
        <option value="HN">הונדורס</option>
        <option value="PH">הפיליפינים</option>
        <option value="DO">הרפובליקה הדומיניקנית</option>
        <option value="CD">הרפובליקה הדמוקרטית של קונגו</option>
        <option value="WF">ואליס ופוטונה</option>
        <option value="VN">וייטנאם</option>
        <option value="VU">ונואטו</option>
        <option value="VE">ונצואלה</option>
        <option value="ZW">זימבבואה</option>
        <option value="ZM">זמביה</option>
        <option value="CI">חוף השנהב</option>
        <option value="TW">טאיוואן</option>
        <option value="TJ">טג'יקיסטן</option>
        <option value="TV">טובאלו</option>
        <option value="TG">טוגו</option>
        <option value="TO">טונגה</option>
        <option value="TN">טוניסיה</option>
        <option value="TR">טורקיה</option>
        <option value="TM">טורקמניסטן</option>
        <option value="TZ">טנזניה</option>
        <option value="TT">טרינידד וטובגו</option>
        <option value="GR">יוון</option>
        <option value="JP">יפן</option>
        <option value="JO">ירדן</option>
        <option value="KW">כווית</option>
        <option value="LA">לאוס</option>
        <option value="LU">לוקסמבורג</option>
        <option value="LV">לטביה</option>
        <option value="LT">ליטא</option>
        <option value="LI">ליכטנשטיין</option>
        <option value="LS">לסוטו</option>
        <option value="MR">מאוריטניה</option>
        <option value="MU">מאוריציוס</option>
        <option value="YT">מאיוט</option>
        <option value="ML">מאלי</option>
        <option value="MG">מדגסקר</option>
        <option value="VA">מדינת קריית הוותיקן</option>
        <option value="MZ">מוזמביק</option>
        <option value="MD">מולדובה</option>
        <option value="MN">מונגוליה</option>
        <option value="ME">מונטנגרו</option>
        <option value="MS">מונטסראט</option>
        <option value="MC">מונקו</option>
        <option value="FM">מיקרונזיה</option>
        <option value="MW">מלאווי</option>
        <option value="MV">מלדיביים</option>
        <option value="MY">מלזיה</option>
        <option value="MT">מלטה</option>
        <option value="EG">מצרים</option>
        <option value="MK">מקדוניה</option>
        <option value="MX">מקסיקו</option>
        <option value="MA">מרוקו</option>
        <option value="MQ">מרטיניק</option>
        <option value="NR">נאורו</option>
        <option value="NO">נורווגיה</option>
        <option value="NG">ניגריה</option>
        <option value="NZ">ניו זילנד</option>
        <option value="NU">ניואה</option>
        <option value="NE">ניז'ר</option>
        <option value="NI">ניקרגואה</option>
        <option value="NA">נמיביה</option>
        <option value="NP">נפאל</option>
        <option value="ST">סאו תומה ופרינסיפה</option>
        <option value="SZ">סווזילנד</option>
        <option value="SO">סומליה</option>
        <option value="SR">סורינאם</option>
        <option value="SL">סיירה ליאונה</option>
        <option value="C2">סין</option>
        <option value="SG">סינגפור</option>
        <option value="SI">סלובניה</option>
        <option value="SK">סלובקיה</option>
        <option value="WS">סמואה</option>
        <option value="SM">סן מרינו</option>
        <option value="SN">סנגל</option>
        <option value="SH">סנט הלנה</option>
        <option value="VC">סנט וינסנט והגרנדינים</option>
        <option value="LC">סנט לוסיה</option>
        <option value="PM">סנט פייר ומיקלון</option>
        <option value="KN">סנט ריטס ונוויס אנגווילה</option>
        <option value="ES">ספרד</option>
        <option value="RS">סרביה</option>
        <option value="LK">סרי לנקה</option>
        <option value="OM">עומן</option>
        <option value="SA">ערב הסעודית</option>
        <option value="PL">פולין</option>
        <option value="PF">פולינזיה הצרפתית</option>
        <option value="PT">פורטוגל</option>
        <option value="FJ">פיג'י</option>
        <option value="FI">פינלנד</option>
        <option value="PW">פלאו</option>
        <option value="PA">פנמה</option>
        <option value="PG">פפואה גינאה החדשה</option>
        <option value="PY">פרגוואי</option>
        <option value="PE">פרו</option>
        <option value="TD">צ'אד</option>
        <option value="CL">צ'ילה</option>
        <option value="CZ">צ'כיה</option>
        <option value="FR">צרפת</option>
        <option value="CO">קולומביה</option>
        <option value="KM">קומורוס</option>
        <option value="CG">קונגו</option>
        <option value="CR">קוסטה ריקה</option>
        <option value="KZ">קזחסטן</option>
        <option value="QA">קטאר</option>
        <option value="CV">קייפ ורדה</option>
        <option value="KG">קירגיזסטן</option>
        <option value="KI">קיריבטי</option>
        <option value="NC">קלדוניה החדשה</option>
        <option value="KH">קמבודיה</option>
        <option value="CM">קמרון</option>
        <option value="CA">קנדה</option>
        <option value="KE">קניה</option>
        <option value="CY">קפריסין</option>
        <option value="HR">קרואטיה</option>
        <option value="RE">ראוניון</option>
        <option value="RW">רואנדה</option>
        <option value="RO">רומניה</option>
        <option value="RU">רוסיה</option>
        <option value="SE">שוודיה</option>
        <option value="CH">שוויץ</option>
        <option value="TH">תאילנד</option>
        <option value="YE">תימן</option>
    </select>
    <p>Last paragraph</p>
</body>
</html>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

感谢Jozef Chocholacek,我已经找到了解决方案。

  

在我的Fedora 22(Tomcat 8.0.17,Oracle Java 1.8.0_45-b14)上对代码进行了快速测试,它似乎运行正常。所以我怀疑问题可能在过滤器中 - 你介意分享它的代码吗?

由于响应是通过过滤器,我应该使用response.setBufferSize(...)设置缓冲区大小。 现在一切都运转良好。

答案 1 :(得分:0)

我在 Jboss 5 中遇到过类似的情况,页面返回不完整。没有错误,也没有例外。经过几个小时的研究和重构所有涉及的代码没有找到解决方案,我发现页面上使用的字符串属性有损坏的字符,导致生成的响应返回不完整。希望这能帮助有同样问题的人。