精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一個有意思的Tomcat 異常

開發 開發工具
在公眾號后臺,經常能看到讀者的消息,其中一部分消息是關于Tomcat使用過程中遇到的問題。今天我們就聊聊關于Tomcat 異常的問題。

在公眾號后臺,經常能看到讀者的消息,其中一部分消息是關于Tomcat使用過程中遇到的問題。但是,由于微信的「克制」,如果消息回復的比較晚,就會遇到「過期」的尷尬,我并不能主動聯系到提問的人。

后面有需要討論問題的朋友,如果公眾號發消息未收到回復,可以加我微信。

說回正題,之前有位讀者留言,說了一個 Tomcat 異常的問題。

即 Tomcat 各功能正常,不影響使用,但是偶爾的在日志中會看到類似于這樣的異常信息:

  1. INFO [https-apr-8443-exec-5] org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header 
  2.  Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level. 
  3.  java.lang.IllegalArgumentException: Invalid character (CR or LF) found in method name 
  4.     at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:443) 
  5.     at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:982) 

為啥報這個呢?明明自己沒做什么操作。

順著異常信息我們往上看,首先這個提示是解析請求頭出現的錯誤。更細節一些是解析請求頭中第一行,所謂的「Request Line」的時候出了問題。

什么是「Request Line」呢? 就是HTTP 規范中指定的,以請求方法開頭 再加上請求URI 等。具體看這個規范說明

這里我們的異常信息提示我們是在解析 Method name的時候出了問題。看規范里說了「The Request-Line begins with a method token」也就是有固定的東西的,不是啥都能叫一個method name。我們熟悉的GET/POST/PUT/DELETE都是這里允許的。

我們再來看 Tomcat 的源碼,是如何判斷這里的 Requet Line 是不是一個包含一個合法的 method name。

順著異常的類和方法,輕車熟路,直接就能看到了。

  1. if (parsingRequestLinePhase == 2) { 
  2.     // 
  3.     // Reading the method name 
  4.     // Method name is a token 
  5.     // 
  6.     boolean space = false
  7.     while (!space) { 
  8.         // Read new bytes if needed 
  9.         if (byteBuffer.position() >= byteBuffer.limit()) { 
  10.             if (!fill(false)) // request line parsing 
  11.                 return false; 
  12.         } 
  13.         // Spec says method name is a token followed by a single SP but 
  14.         // also be tolerant of multiple SP and/or HT. 
  15.         int pos = byteBuffer.position(); 
  16.         byte chr = byteBuffer.get(); 
  17.         if (chr == Constants.SP || chr == Constants.HT) { 
  18.             space = true
  19.             request.method().setBytes(byteBuffer.array(), parsingRequestLineStart, 
  20.                     pos - parsingRequestLineStart); 
  21.         } else if (!HttpParser.isToken(chr)) { 
  22.             byteBuffer.position(byteBuffer.position() - 1); 
  23.             throw new IllegalArgumentException(sm.getString("iib.invalidmethod")); 
  24.         } 
  25.     } 
  26.     parsingRequestLinePhase = 3

我們注意紅色的異常就是上面產生的內容。產生這個是由于讀取的byte 不是個 SP 同時下面的 isToken 也不是true導致。

那Token都有誰是怎么定義的?

這里挺有意思的,直接用一個boolean數組來存,前面我們傳進來的byte,對應的是這個數組的下標。

  1. public static boolean isToken(int c) { 
  2.     // Fast for correct values, slower for incorrect ones 
  3.     try { 
  4.         return IS_TOKEN[c]; 
  5.     } catch (ArrayIndexOutOfBoundsException ex) { 
  6.         return false; 
  7.     } 

這里的boolean數組,初始化時有幾個關聯的數組一起,長度為128。

  1. private static final boolean[] IS_CONTROL = new boolean[ARRAY_SIZE]; 
  2. private static final boolean[] IS_SEPARATOR = new boolean[ARRAY_SIZE]; 
  3. private static final boolean[] IS_TOKEN = new boolean[ARRAY_SIZE]; 
  4. // Control> 0-31, 127 
  5. if (i < 32 || i == 127) { 
  6.     IS_CONTROL[i] = true; 
  7. // Separator 
  8. if (    i == '(' || i == ')' || i == '<' || i == '>'  || i == '@'  || 
  9.         i == ',' || i == ';' || i == ':' || i == '\\' || i == '\"' || 
  10.         i == '/' || i == '[' || i == ']' || i == '?'  || i == '='  || 
  11.         i == '{' || i == '}' || i == ' ' || i == '\t') { 
  12.     IS_SEPARATOR[i] = true; 
  13.  
  14. // Token: Anything 0-127 that is not a control and not a separator 
  15. if (!IS_CONTROL[i] && !IS_SEPARATOR[i] && i < 128) { 
  16.     IS_TOKEN[i] = true; 

所以這里token的定義明確了,非控制字符,非分隔符,ascii 碼小于128 的都是 token。

所以問題產生原因定位了,是由于我們的請求頭中傳遞了「非法」方法名稱,導致請求不能正確處理。

我們來看一個正常的請求信息

Request Line 就是上面看到的第一行內容。 GET /a/ HTTP/1.1

那有問題的內容大概是這個樣子

誰能從上面解析出來請求方法?

這時你可能會問,正常請求都好好的,你這個怎么搞的?

對。正常沒問題,如果我們的Connector 是普通的此時可以響應請求,如果你一直http://localhost:port/a ,可以正常響應,此時后臺收到一個https://localhost:port1/a,你要怎么響應?

要知道這兩個編碼大不一樣。所以就出現了本文開頭的問題。

如果不想走尋常路,可以自己寫個Socket ,連到 Tomcat Server上,發個不合法的請求,大概也是一個樣子。

那出現了這類問題怎么排查呢? 別忘了 Tomcat 提供了一系列有用的 Valve ,其中一個查看請求的叫AccessLogValve(閥門(Valve)常打開,快發請求過來 | Tomcat的AccessLogValve介紹)

在 Log里可以查看每個到達的請求來源IP,請求協議,響應狀態,請求方法等。但是如果上面的異常產生時,請求方法這類有問題的內容也是拿不到的,此時的response status 是400 。但通過IP我們能看到是誰在一直請求。如果判斷是非法請求后,可以再增加我們的過濾Valve,直接將其設置為Deny就OK了。

【本文為51CTO專欄作者“侯樹成”的原創稿件,轉載請通過作者微信公眾號『Tomcat那些事兒』獲取授權】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2020-12-12 13:50:16

云開發

2021-01-27 13:54:05

開發云原生工具

2023-05-15 09:16:18

CSSCSS Mask

2024-05-20 01:10:00

Promise變量

2020-03-10 14:59:16

oracle數據庫監聽異常

2009-08-26 17:53:31

C# DropDown

2022-03-21 10:21:50

jQuery代碼模式

2021-03-25 06:12:55

SVG 濾鏡CSS

2015-03-12 10:46:30

代碼代碼犯罪

2012-05-22 10:12:59

jQuery

2024-03-18 08:14:07

SpringDAOAppConfig

2022-06-15 07:21:47

鼠標指針交互效果CSS

2022-08-15 22:34:47

Overflow方向裁切

2021-02-20 16:01:26

Github前端開發

2022-07-11 13:09:26

mmapLinux

2022-05-20 07:36:02

LiveTerm工具

2017-08-01 00:52:07

kafka大數據消息總線

2012-06-19 16:49:19

Web開發

2013-08-28 09:46:09

Debian LinuLinux發行版

2021-04-23 07:51:56

CSS Container Q Chrome
點贊
收藏

51CTO技術棧公眾號

哥也色在线视频| 无码人妻精品一区二| 精品国产一区二区三区性色av| 亚洲人成影院在线观看| 国产精品久久国产三级国电话系列| 久久久久免费看| 日韩深夜影院| 7777女厕盗摄久久久| 五月天在线免费视频| 日本高清视频免费观看| 蜜桃视频在线观看一区| 久久久久久成人精品| 欧洲av一区二区三区| 老司机亚洲精品一区二区| 欧美日韩中文字幕在线| 亚洲视频精品一区| 手机在线观看毛片| 国产一区美女在线| 国产成人精品免费视频| 欧美国产在线看| 精品日韩欧美一区| 亚洲国产欧美在线成人app| av亚洲天堂网| 久久电影tv| 亚洲午夜久久久久久久久电影院| 日韩三级电影网站| 天天操天天射天天| 国产大片一区二区| 国产区亚洲区欧美区| 成年人视频在线免费看| 欧美日韩国产色综合一二三四| 亚洲欧美国产va在线影院| 人妻av一区二区三区| 四虎国产精品免费久久| 在线观看国产91| 妺妺窝人体色www在线小说| 国产视频在线播放| 国产精品美女久久久久久| 欧美日韩国产高清视频| 天堂a√中文在线| www.亚洲色图| 国产精品一区二区三区在线观| 97精品人妻一区二区三区| 国产免费av在线| 在线日本欧美| 午夜精品久久久| 真实国产乱子伦对白视频| 国内精品久久久久久野外| 国产精品视频观看| 少妇特黄a一区二区三区| 你懂的在线看| 久久蜜桃香蕉精品一区二区三区| 国产伦精品一区二区| 亚洲狼人综合网| 岛国一区二区三区| 超碰97人人人人人蜜桃| 国产高清精品软件丝瓜软件| 国产一区高清在线| 999视频在线观看| 午夜久久久久久噜噜噜噜| 国产成人在线免费观看| 91黄在线观看| 高h放荡受浪受bl| av在线不卡网| 鲁鲁狠狠狠7777一区二区| 三区在线观看| 国产三级欧美三级| 亚洲精品自在在线观看| 午夜小视频在线| 亚洲日本欧美天堂| 国产天堂视频在线观看| 国产美女精品写真福利视频| 欧美日韩综合视频网址| 三级a在线观看| 伊人久久一区| 亚洲国产日韩欧美在线动漫| 精品人妻一区二区三区香蕉| 精品国产乱码久久久久久1区2匹| 一区二区在线免费视频| 国产亚洲精品久久久久久豆腐| 婷婷成人基地| 久久久伊人日本| 欧美a视频在线观看| 日本女人一区二区三区| 成人写真视频福利网| 亚洲精品国产片| 久久综合狠狠综合久久综合88| 日韩视频精品| 男女在线观看视频| 欧美在线视频全部完| 黄色三级视频在线播放| 美日韩黄色大片| 日韩在线免费高清视频| 久久精品欧美一区二区| 丝袜亚洲另类丝袜在线| 91精品国产自产在线老师啪| 后入内射欧美99二区视频| 国产欧美视频一区二区| 波多野结衣 作品| 黄色亚洲网站| 精品国产欧美一区二区| 91无套直看片红桃在线观看| 欧美日韩一区二区国产| 国产精品成av人在线视午夜片| 国产免费无遮挡| 久久免费看少妇高潮| 中文字幕一区综合| 二区三区不卡| 日韩视频免费直播| 国产熟女一区二区| 国产精品啊啊啊| 国产精选久久久久久| 黄色av网址在线| 中文字幕国产一区| 无码aⅴ精品一区二区三区浪潮| 激情久久免费视频| 国产亚洲美女久久| 日本在线视频免费观看| 国产在线麻豆精品观看| 日韩久久不卡| 色是在线视频| 欧美精品一区二区三| 蜜桃av免费在线观看| 国产精品一级| 国产精品一区二区三区免费| 国产在线激情视频| 欧美视频日韩视频| 好吊日免费视频| 亚洲毛片av| 动漫一区二区在线| 成码无人av片在线观看网站| 欧美亚洲动漫精品| 青青草视频成人| 亚洲看片一区| 精品欧美日韩在线| 18aaaa精品欧美大片h| 欧美成人在线直播| 久久久久久久久久久久久女过产乱| 巨乳诱惑日韩免费av| 麻豆成人av| 国产激情视频在线看| 欧美成人激情免费网| 2021亚洲天堂| 国产麻豆精品在线观看| 中文字幕精品—区二区日日骚| 日本综合视频| 国产一区二区三区丝袜| 99re热视频| 国产欧美日韩在线| 午夜激情在线观看视频| 日韩电影免费网址| 国产剧情久久久久久| 免费看a在线观看| 欧美精品日日鲁夜夜添| 一级性生活免费视频| 黄页视频在线91| 99久re热视频精品98| 日韩精品一区二区三区中文字幕| 久久中文字幕一区| 亚洲黄色在线免费观看| 亚洲国产另类av| 国产白嫩美女无套久久| 久久人人超碰| 亚洲综合欧美日韩| 蜜桃精品一区二区三区| 欧美日韩福利电影| 神宫寺奈绪一区二区三区| 欧美午夜片在线免费观看| 色欲AV无码精品一区二区久久| 久热国产精品| 老汉色影院首页| 国产一区二区三区亚洲| 韩国视频理论视频久久| 九色在线免费| 69堂国产成人免费视频| 久久久美女视频| 91视频在线看| www.国产视频.com| 国内自拍视频一区二区三区| 久久综合毛片| 日韩精品一级毛片在线播放| 欧美猛交免费看| 日本人妖在线| 91麻豆精品久久久久蜜臀| 精品肉丝脚一区二区三区| 久久午夜老司机| 亚洲第一色av| 国产精品日韩| 一级二级三级欧美| 欧美大胆视频| 成人午夜一级二级三级| 亚洲国产福利| 欧美成年人视频| 欧美扣逼视频| 日韩欧美在线网站| 老熟妇一区二区三区| 亚洲免费在线看| 蜜桃传媒一区二区亚洲| 国产激情一区二区三区四区| 国产视频一区二区三区在线播放| 伊人青青综合网| 日本一区二区三区www| 午夜视频一区二区在线观看| 奇米影视亚洲狠狠色| 91精品国产91久久久久久青草| 亚洲国产另类久久精品| 国产偷拍一区二区| 色狠狠综合天天综合综合| 欧美日韩三级在线观看| 国产日韩欧美电影| 99久久人妻精品免费二区| 国产综合久久久久影院| 日本在线视频www| 亚洲高清资源| 91xxx视频| 久久综合成人| 欧美一区免费视频| 米奇精品关键词| 51午夜精品| 日日夜夜亚洲| 国产精品va在线播放| 国产精品论坛| 欧美日韩成人在线播放| 日本三级在线视频| 伊人久久久久久久久久久久久| 黑人操亚洲女人| 欧美变态口味重另类| 国产精品一级二级| 欧美色精品在线视频| 日韩三级小视频| 一区二区三区中文在线| 成人涩涩小片视频日本| 国产精品久久精品日日| 女女互磨互喷水高潮les呻吟| 99在线热播精品免费| 91传媒理伦片在线观看| 国产一区在线观看视频| 亚洲涩涩在线观看| 看电视剧不卡顿的网站| 91精品无人成人www| 日韩国产欧美三级| 日本爱爱免费视频| 日韩高清在线观看| 亚洲欧美另类动漫| 蜜桃视频第一区免费观看| 青青青在线视频免费观看| 天堂一区二区在线免费观看| 欧美色图另类小说| 美日韩精品视频| 成人黄色一区二区| 日韩电影网1区2区| 亚洲欧美自偷自拍另类| 青娱乐精品视频| 亚洲这里只有精品| 激情国产一区二区 | 在线观看一区| 国产综合中文字幕| 欧美亚洲网站| 日本美女高潮视频| 狠狠色狠狠色综合系列| 深夜福利网站在线观看| 成人av电影免费观看| a视频免费观看| 国产亚洲精品中文字幕| 中文字幕在线观看二区| 亚洲免费视频成人| 成年人午夜视频| 在线一区二区三区做爰视频网站| 黄色网址中文字幕| 69p69国产精品| 刘亦菲毛片一区二区三区| 日韩成人xxxx| 岛国视频免费在线观看| 久久在线免费观看视频| 69av成人| 国产精品久久综合av爱欲tv| 国产日韩在线观看视频| 国产高清精品一区二区| 国产欧美一区二区三区精品观看 | 成人免费网址| 97婷婷涩涩精品一区| 日本.亚洲电影| 2014国产精品| 亚洲精品国产动漫| 中文字幕日韩一区二区三区| 亚洲国产裸拍裸体视频在线观看乱了中文 | 国产精品久久久久秋霞鲁丝| 久久丁香四色| 欧美下载看逼逼| 欧美国产三区| 日韩中文字幕二区| 国产成人av电影在线| 中文字幕网站在线观看| 亚洲精品日日夜夜| 天天爱天天做天天爽| 日韩一区二区三区免费观看| 日本1级在线| 九九精品在线观看| 粉嫩91精品久久久久久久99蜜桃| 99视频免费观看| 成人中文视频| 青青艹视频在线| 国产精品一级在线| 亚洲精品视频久久久| 亚洲国产精品久久不卡毛片| 伊人亚洲综合网| 日韩成人av在线| 久久免费电影| 成人动漫网站在线观看| 综合亚洲自拍| 男的插女的下面视频| 韩国一区二区在线观看| 美女脱光内衣内裤| 午夜国产不卡在线观看视频| 国产精品亚洲欧美在线播放| 亚洲欧洲一区二区三区在线观看 | 国产福利精品av综合导导航| 91国内精品| 8x8x华人在线| 久久av资源网| 人妻熟人中文字幕一区二区| 欧美日韩亚洲天堂| 人人妻人人玩人人澡人人爽| 久久精品国产亚洲一区二区| 中文另类视频| 欧美色图亚洲自拍| 性一交一乱一区二区洋洋av| 白嫩情侣偷拍呻吟刺激| 亚洲美女在线国产| 国产精品久久久久久久免费| 国产一区二区三区毛片| 二区三区不卡| 秋霞久久久久久一区二区| 国产精品永久| www.久久国产| 日韩欧美国产中文字幕| 色猫av在线| 欧美一区二区色| 欧美男男freegayvideosroom| 久草免费福利在线| 成人国产精品视频| 国产精品不卡av| 日韩电影大片中文字幕| 成人bbav| 欧美高清一区二区| 久久综合影音| 成人信息集中地| 制服丝袜国产精品| 亚洲国产精品精华素| 2022国产精品| 激情综合中文娱乐网| 私密视频在线观看| 欧美性jizz18性欧美| 亚洲色欧美另类| 日韩av电影在线免费播放| 国产一区二区精品久| www亚洲成人| 亚洲女人小视频在线观看| www.国产.com| 国产91精品高潮白浆喷水| 久久99久久人婷婷精品综合 | 成人av在线一区二区| 免费观看一区二区三区毛片 | 国产日产一区二区| 91在线在线观看| 亚洲看片一区| 中文字幕免费在线看线人动作大片| 欧美日韩一级片网站| 91精品久久久| 你懂的视频在线一区二区| 欧美96一区二区免费视频| www欧美com| 亚洲成人国产精品| 日韩免费小视频| 影音先锋在线亚洲| 波多野洁衣一区| 无码任你躁久久久久久久| 久久精品精品电影网| 国产精品115| 中文字幕永久视频| 亚洲一线二线三线视频| 人人九九精品| 99re国产在线播放| 老牛嫩草一区二区三区日本 | 国产精品99一区二区三区| 国产成人av片| 色婷婷香蕉在线一区二区| 成人短视频在线| 免费一区二区三区| 国产成人精品三级麻豆| 区一区二在线观看| 九九热精品视频| 欧美最新另类人妖| 国产ts在线观看| 欧美日韩国产成人在线91| 91av久久| 看一级黄色录像| 久久精品夜色噜噜亚洲a∨| 亚洲av无码国产综合专区| 国产精品九九九|