摘要:一前言在接到需求后很快的做完了然后做本地測(cè)試發(fā)現(xiàn)因?yàn)槭钦?qǐng)求里面參數(shù)數(shù)據(jù)是查詢?nèi)嗣詳y帶中文,對(duì)此進(jìn)行了問題分析。
一、前言
在接到需求后很快的做完了然后做本地測(cè)試發(fā)現(xiàn):
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
因?yàn)槭莋et請(qǐng)求里面參數(shù)數(shù)據(jù)是查詢?nèi)嗣詳y帶中文,對(duì)此進(jìn)行了問題分析。
二、分析過程在當(dāng)時(shí)我就立馬咨詢了百度老師,是因?yàn)門omcat在某個(gè)版本里面升級(jí)了,對(duì)URL遵守RFC規(guī)范,對(duì)特殊字符不予以放行。
要解決問題有兩個(gè)方向:
1.解決編碼問題。
2.Tomcat降版本。
使用postman攜帶中文參數(shù)可以正常訪問到數(shù)據(jù),之前也沒有遇到過這樣的問題,因此java服務(wù)端是沒問題的,而且服務(wù)是使用springboot 1.5.3 ,對(duì)應(yīng)的Tomcat版本是8.5.14,不考慮打成war包部署就打算從編碼入手了。
其實(shí)問題說起來還是挺簡單的。。但是因?yàn)榉?wù)設(shè)計(jì)的框架所以走錯(cuò)了路子。。。想記錄一下分析的過程。
從前端那里攜帶中文參數(shù)訪問Tomcat,在Tomcat的訪問日志里,看到了攜帶中文參數(shù)的請(qǐng)求是這樣的:
[18/Jun/2019:19:51:18 +0800] 0:0:0:0:0:0:0:1 "GET null null" 400 (0 ms)
請(qǐng)求都沒進(jìn)來就被過濾掉了。
我在js里面對(duì)參數(shù)進(jìn)行了編碼
window.location.href="?p=ware&d=ware-register-query&agentName="+encodeURI($(".agent").val());
在這里對(duì)參數(shù)進(jìn)行了編碼 ,發(fā)現(xiàn)并沒有用。百思不得其解。
其實(shí)因?yàn)槲覀兪?html+php+java架構(gòu)的,請(qǐng)求是經(jīng)過php處理后再發(fā)送到j(luò)ava后臺(tái)的,在js中編碼過的參數(shù),發(fā)送到php處理的時(shí)候,會(huì)自動(dòng)解碼:
var_dump(check_merchant_query."?agentName=".$_GET["agentName"]); // 打印拼接的url $req = new httpRequest("get",check_merchant_query."?agentName=".$_GET["agentName"],null,function($result){return $result;});
這里打印出來的結(jié)果是已經(jīng)解碼過的,當(dāng)時(shí)沒注意到,只是覺得這個(gè)url沒錯(cuò),因此多花了許多時(shí)間。。
以為在PHP里面構(gòu)造的http請(qǐng)求的get參數(shù)是已經(jīng)編碼過的,所以我將接下來的時(shí)間都放在了如何設(shè)置tomcat對(duì)特殊字符放行上。。
如果是正常的html+java,那么上面的編碼就是沒問題的,只是分析的時(shí)候忘記了還要經(jīng)過php處理。。
最后在Php中對(duì)參數(shù)進(jìn)行編碼就可以啦
$req = new httpRequest("get",check_merchant_query."?agentName=".urlencode($_GET["agentName"]),null,function($result){return $result;});
至于postman為什么能夠輸入中文參數(shù)就能夠直接訪問tomcat呢?是因?yàn)閜ostman就相當(dāng)于一個(gè)瀏覽器,在發(fā)送請(qǐng)求的時(shí)候已經(jīng)對(duì)參數(shù)進(jìn)行了編碼操作啦
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/77814.html
摘要:一前言在接到需求后很快的做完了然后做本地測(cè)試發(fā)現(xiàn)因?yàn)槭钦?qǐng)求里面參數(shù)數(shù)據(jù)是查詢?nèi)嗣詳y帶中文,對(duì)此進(jìn)行了問題分析。 一、前言 在接到需求后很快的做完了然后做本地測(cè)試發(fā)現(xiàn): java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are ...
摘要:狀態(tài)碼有那些分別代表是什么意思簡單版繼續(xù),一般在發(fā)送請(qǐng)求時(shí),已發(fā)送了之后服務(wù)端將返回此信息,表示確認(rèn),之后發(fā)送具體參數(shù)信息正常返回信息請(qǐng)求成功并且服務(wù)器創(chuàng)建了新的資源服務(wù)器已接受請(qǐng)求,但尚未處理請(qǐng)求的網(wǎng)頁已永久移動(dòng)到新位置。 http狀態(tài)碼有那些?分別代表是什么意思? 簡單版 [ 100 Continue 繼續(xù),一般在發(fā)送post請(qǐng)求時(shí),已發(fā)送了http header之后...
摘要:前言作為容器非常出色但是依然會(huì)有一些避之不及的小坑在此記錄一筆問題部署多個(gè)項(xiàng)目后路徑?jīng)_突情景描述下有兩個(gè)項(xiàng)目兩個(gè)項(xiàng)目除開管理信息接口其余都有安全驗(yàn)證機(jī)制由于未做前后端分離因此靜態(tài)資源也存在項(xiàng)目中在做靜態(tài)資源中的接口請(qǐng)求時(shí)未寫包名比如登錄代碼 前言 tomcat作為java容器非常出色,但是依然會(huì)有一些避之不及的小坑,在此記錄一筆. START 問題 部署多個(gè)項(xiàng)目后url路徑?jīng)_突 情景...
閱讀 1906·2021-11-22 14:44
閱讀 1672·2021-11-02 14:46
閱讀 3657·2021-10-13 09:40
閱讀 2599·2021-09-07 09:58
閱讀 1586·2021-09-03 10:28
閱讀 1658·2019-08-29 15:30
閱讀 976·2019-08-29 15:28
閱讀 1468·2019-08-26 12:20