精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

99视频精品免费| 日本精品一区二区三区在线播放视频 | 西游记1978| 中文字幕 国产精品| 欧美日中文字幕| 欧美精品九九99久久| 中文字幕精品在线播放| www.久久精品.com| 91久久夜色精品国产九色| 精品无码久久久久久国产| 虎白女粉嫩尤物福利视频| av中文资源在线| 国精产品一区一区三区mba桃花| 欧美成人三级视频网站| 亚洲一区二区乱码| 91tv亚洲精品香蕉国产一区| 亚洲视频小说图片| 国产美女精品在线观看| 日本成人一级片| 欧美国产高潮xxxx1819| 日韩久久免费电影| 日本在线播放一区二区| free性护士videos欧美| 国产精品网站一区| 官网99热精品| 中国女人一级一次看片| 国产精品地址| 中文字幕欧美国内| 中文视频在线观看| 996久久国产精品线观看| 亚洲国产成人高清精品| 图片区小说区区亚洲五月| 亚洲免费黄色片| 日韩av一区二区在线影视| 欧美成人免费全部观看天天性色| aaaaa级少妇高潮大片免费看| 四虎地址8848精品| 色哟哟在线观看一区二区三区| 一区二区国产日产| 黄色片免费在线| 成人免费视频视频| 成人日韩在线电影| 国产精品第六页| 国产欧美91| 欧美激情国内偷拍| 黄色精品视频在线观看| 国产成人高清| 亚洲精品www久久久| 性色av浪潮av| 欧美日韩视频免费看| 高跟丝袜一区二区三区| bt天堂新版中文在线地址| 免费黄色在线网站| 国产精品无人区| 日韩欧美精品一区二区三区经典 | 黄色aa久久| 樱桃国产成人精品视频| 日本一区二区三区免费看| 日韩一级片免费| 高清日韩电视剧大全免费| 成人福利网站在线观看| 伊人22222| 毛片基地黄久久久久久天堂| 国产成人精品电影久久久| 久久久久久久久久久久久久av| 国产主播一区| 九九视频这里只有精品| 美国精品一区二区| 日本电影一区二区| 日韩在线视频一区| 欧美巨胸大乳hitomi| 日韩在线二区| 三级精品视频久久久久| 九九热免费在线| 欧美亚洲精品在线| www.日韩欧美| 午夜精品一区二区三级视频| 久久一级电影| 久久精品国产一区二区三区| 男人的天堂av网| 成人精品中文字幕| 精品国产一区二区三区久久久| 国产熟女一区二区| 99精品美女| 欧美成人免费视频| 日本在线一级片| 欧美午夜影院| 555www成人网| 国产suv精品一区二区33| 天堂久久一区二区三区| 国产精品三级网站| 国产免费一区二区三区免费视频| 国产剧情av麻豆香蕉精品| 成人3d动漫一区二区三区91| 日本精品一区二区在线观看| 99精品久久久久久| 日韩福利视频| www在线观看播放免费视频日本| 亚洲无人区一区| 精品少妇在线视频| 毛片免费看不卡网站| 欧美日韩亚洲综合| 四虎永久免费观看| 少妇精品久久久一区二区| 亚洲无限av看| 青娱乐国产盛宴| 9色精品在线| 国产精品香蕉国产| 国产18精品乱码免费看| 国产亚洲欧美一区在线观看| 国产精品波多野结衣| 国产在线美女| 一本一道久久a久久精品| 亚洲 国产 图片| 国产欧美自拍一区| 最近2019年手机中文字幕| 美女毛片在线观看| 日韩成人dvd| 不卡一卡2卡3卡4卡精品在| 国产孕妇孕交大片孕| 不卡在线观看av| 亚洲精品中文字幕在线| xxxx成人| 欧美精品xxxxbbbb| 亚洲少妇一区二区三区| 国产精品成人一区二区不卡| 欧美激情在线一区| 中文av免费观看| gogogo免费视频观看亚洲一| 亚洲国产一区二区三区在线| av毛片午夜不卡高**水| 欧美另类久久久品| 97人妻精品一区二区免费| 欧美精品福利| 国产精品福利观看| 无码h黄肉3d动漫在线观看| 中文字幕亚洲电影| 日本a级片在线播放| 国内精品伊人| 亚洲一区www| 男女视频免费看| 国产成人精品亚洲午夜麻豆| 免费国产一区二区| 国产网红在线观看| 欧美精品少妇一区二区三区| 好吊视频在线观看| 国产精品亚洲综合色区韩国| 99久久精品免费看国产一区二区三区 | 欧美国产一区在线| 日本韩国欧美在线观看| 日本电影久久久| 一区二区三区在线播放欧美| 国产九色在线播放九色| 成人av在线网站| 中文字幕在线乱| 成人乱码手机视频| 日韩毛片中文字幕| 免费看日韩毛片| 成人av网站在线| 九色自拍视频在线观看| 国产精品成人3p一区二区三区| 在线观看久久av| 夜夜躁狠狠躁日日躁av| 国产精品私人影院| 五月婷婷六月合| 日韩一区二区在线免费| 国产一区玩具在线观看| 日本中文字幕在线看| 欧美性大战久久久| 3d动漫精品啪啪一区二区下载| 国产欧美日韩一级| 欧美福利一区二区三区| heyzo高清在线| 亚洲黄色片网站| 亚洲免费在线视频观看| 91丨porny丨最新| 久久9精品区-无套内射无码| 久久99精品久久久久久园产越南| 97人人做人人爱| 日本一区二区三区在线观看视频| 精品毛片三在线观看| 黄色a一级视频| 日韩在线一二三区| 一本一道久久a久久综合精品| 深夜成人影院| 久久久91精品国产一区不卡| 国产aⅴ一区二区三区| 亚洲影院久久精品| 青青草视频成人| 捆绑紧缚一区二区三区视频| 中文字幕日韩一区二区三区不卡| 精品福利在线| 久久91精品国产91久久久| 五月激情婷婷综合| 欧美主播一区二区三区美女| 日本爱爱小视频| 成人免费毛片aaaaa**| a√天堂在线观看| 日韩精品欧美| 俄罗斯精品一区二区| 天堂在线中文网官网| 在线播放日韩av| 亚洲国产综合一区| 色噜噜狠狠一区二区三区果冻| 亚洲一二三四五六区| 成人国产精品免费| 天天插天天操天天射| 久久精品久久久| 欧美精品一区在线| 国产精品一区二区三区四区在线观看 | 中文字幕免费在线播放| 免费观看一级特黄欧美大片| 日韩欧美一级在线| 国产日韩视频在线| 国产精品99久久久久久久| 欧美日韩尤物久久| 午夜精品在线视频| bestiality新另类大全| 亚洲女在线观看| 一区二区视频网站| 色噜噜狠狠色综合欧洲selulu| 国精品无码一区二区三区| 2014亚洲片线观看视频免费| a级大片免费看| 免费的国产精品| 欧美综合在线观看视频| 在线观看的日韩av| 欧美日韩亚洲国产成人| 精品久久久久久久| 久久大片网站| 大陆精大陆国产国语精品| 国产狼人综合免费视频| 中文字幕在线免费观看视频| 欧美日韩国产二区| 秋霞午夜理伦电影在线观看| 伊人伊成久久人综合网站| 色屁屁草草影院ccyycom| 日韩三级免费观看| 国产一区二区三区三州| 在线免费不卡电影| 五月婷婷六月婷婷| 欧美日韩国产一区在线| 国产无码精品在线播放| 亚洲黄色小视频| 黄色香蕉视频在线观看| 亚洲欧洲av一区二区三区久久| 欧美老熟妇乱大交xxxxx| 9l国产精品久久久久麻豆| 精品人妻二区中文字幕| 激情五月激情综合网| www.日日操| 全部av―极品视觉盛宴亚洲| 无码精品国产一区二区三区免费| 亚洲第一网站| 国产九色porny| 国产精品chinese| 成人黄色大片网站| 亚洲精品1区| 少妇人妻无码专区视频| 最新日韩av| 熟女少妇在线视频播放| 麻豆9191精品国产| 男人的天堂99| 视频一区二区三区在线| 日日碰狠狠躁久久躁婷婷| 亚洲一区二区三区免费在线观看| 91免费视频网站在线观看| 蘑菇福利视频一区播放| 999精品网站| 蜜臀久久99精品久久久久宅男| 国产成人a亚洲精v品无码| 日韩电影在线免费观看| 日本超碰在线观看| 国产中文字幕一区| 色哟哟免费视频| 福利视频网站一区二区三区| 国产av一区二区三区传媒| 9色porny自拍视频一区二区| 久久久久亚洲av无码专区桃色| 久久综合久久综合久久综合| 亚洲自拍偷拍图| 亚洲三级电影网站| 国产在线视频你懂的| 欧美日韩国产在线看| 日本黄色中文字幕| 欧美高清www午色夜在线视频| 亚洲黄色在线播放| 亚洲精品乱码久久久久久金桔影视 | 久久精品女人| 99精品999| 99国产精品一区| 日本免费www| 一区二区三区在线视频播放| 黄网在线观看视频| 欧美日韩二区三区| 蜜桃av噜噜一区二区三区麻豆| 日韩va亚洲va欧洲va国产| 经典三级在线| 九九精品视频在线观看| 韩国主播福利视频一区二区三区| 国产精品久久久久久一区二区| 不卡的国产精品| 欧美精品与人动性物交免费看| 日韩欧美精品综合| 僵尸世界大战2 在线播放| 日本不卡一区二区三区| 久久久久亚洲av无码网站| 国产精品情趣视频| 99视频在线看| 777亚洲妇女| 久久久久久女乱国产| 欧美高清在线观看| 成人国产精品一区二区免费麻豆| 亚洲专区中文字幕| 欧美日韩在线二区| 日韩xxxx视频| 国产在线精品一区二区| 香蕉视频黄色在线观看| 亚洲三级视频在线观看| 黄色av一级片| 日韩成人在线视频网站| 国产乱色在线观看| 国产精品av在线播放| 777久久精品| 欧美日韩一区二区三区在线观看免| 欧美日韩久久| 三上悠亚av一区二区三区| 白白色 亚洲乱淫| 国产一二三四区| 欧美日韩国产综合一区二区三区| 色综合视频在线| 欧美另类交人妖| 欧美特黄色片| 欧美日韩高清在线一区| 最新成人av网站| 91九色蝌蚪porny| 亚洲免费在线观看视频| 中文字幕精品无码亚| 亚洲欧美中文日韩在线| 爱搞国产精品| 懂色中文一区二区三区在线视频| 999久久久亚洲| 蜜臀一区二区三区精品免费视频| 久久亚洲精品国产精品紫薇| 久久精品视频6| 日韩美女天天操| 国产黄色在线网站| 亚洲影院污污.| 中文字幕亚洲综合久久五月天色无吗''| www日韩在线观看| 国产欧美日韩不卡免费| 中文无码精品一区二区三区| 亚洲欧美资源在线| videos性欧美另类高清| 乱一区二区三区在线播放| 午夜在线视频一区二区区别| 亚洲一区二区三区综合| 欧美日韩精品在线视频| 天天干天天操av| 日本成人精品在线| 免费欧美一区| 一区二区在线播放视频| 欧美国产日产图区| 一级特黄色大片| www.日韩.com| 精品国产亚洲一区二区三区大结局 | 天天射天天干天天| 亚洲欧美日韩国产中文| 惠美惠精品网| 三区精品视频观看| 奇米色一区二区三区四区| 永久免费未视频| 717成人午夜免费福利电影| 麻豆视频在线观看免费网站| 亚洲xxxxx性| 在线视频观看日韩| 一本色道久久综合亚洲精品图片| 色综合久久综合网| 中文字幕日本在线观看| 亚洲伊人第一页| 夜夜嗨av一区二区三区网站四季av| 日本护士做爰视频| 一本久道中文字幕精品亚洲嫩| 91社区在线| 岛国视频一区免费观看| 亚洲免费影视| 激情无码人妻又粗又大| 欧美成人一区二区三区片免费| 久草免费在线色站| 免费精品视频一区| 久久99精品久久久久久国产越南| 破处女黄色一级片| 亚洲精品videossex少妇| 欧亚一区二区| 无码毛片aaa在线| 久久久久久久久免费| 国产精品久久久午夜夜伦鲁鲁| 欧美激情第99页| 日韩极品在线| 亚洲a级黄色片|