接口訪問報錯:The valid characters are defined in RFC 7230 and RFC 3986


 

寫了個接口,在測試訪問的時候,需要傳json串,但是后台報錯了

The valid characters are defined in RFC 7230 and RFC 3986

當前使用的tomcat版本:apache-tomcat-8.0.53

 

 

 一、方案一(修改后被源碼覆蓋,無法修改文件):


在tomcat/conf/catalina.properties中添加下面這句話 tomcat.util.http.parser.HttpParser.requestTargetAllow=|{} 在tomcat/conf/service.xml中在Connector標簽中添加URIEncoding="UTF-8"、relaxedQueryChars="[]|"、relaxedPathChars="[]|" 而我使用的tomcat8中catalina.properties文件中已經有了這句話,打開注釋即可。 清理tomcat后,重啟后還是無效,打開catalina.properties和service.xml查看,修改的內容自動恢復以前的狀態,重試多次也如此,修改過用戶操作文件權限也還是這種情況,真的很納悶!!!

  

 

 

二、方案二(修改后重啟tomcat無效)
在tomcat的vm中添加:-Dcatalina.config="J:\DevelopTool\apache-tomcat\apache-tomcat-8.0.53\backup\catalina.properties"


看網上的Tomcat源碼分析-CatalinaProperties類
這個類很簡單,就是一個屬性獲取的公共類。但是用法卻很巧妙,代碼相當優雅,所以忍不住想要再說說這個類。
它的功能是管理catalina.properties類文件中的配置屬性獲取,只有一個方法getPropertity(String name).

 

我認為這個類的高明之處就是充分使用了配置屬性,配置文件路徑可配置,即流程圖的第一個操作,是從環境變量中獲取的配置文件路徑。如果我通過VM參數配置-Dcatalina.config=”xxx/myfile/catalina.properties”的話,就改變了它的默認的配置文件。

  

方案二內容引用來源:https://blog.csdn.net/wojiushiwo945you/article/details/72865427

 

 

 

Tomcat源碼分析-CatalinaProperties類

引用來源:https://blog.csdn.net/guo20082200/article/details/80558151

 

 
         

分析原因:
第一種方案還不確定行不行,第二種方案試驗不行。經過第二種方案的閱讀發現,第一種方案沒有成功的原因是tomcat會生成catalina.properties

文件覆蓋你自己修改后的catalina.properties文件,於是我先用tomcat的clean將項目編譯成class文件,然后修改catalina.properties后

直接啟動服務,然后訪問接口成功了。

 


第二波bug的出現
由於參數中json串過大(20kb左右),請求接口的時候又報出了錯誤

http post request header is too large

 

在tomcat/conf/service.xml中在Connector標簽中添加maxHttpHeaderSize ="102400"和maxPostSize="-1",如下

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"
  URIEncoding="UTF-8"
  relaxedQueryChars="[]|"
  relaxedPathChars="[]|"
  maxHttpHeaderSize ="102400"
  maxPostSize="-1"/>

說明: maxPostSize="-1"(代表POST數據大小限制,在tomcat7.0.63之前,設置為0和負數均可以代表不限制;在tomcat7.0.63之后,不可以設置為0,只能是負數代表不限制)

使用postman測試接口,post請求,body下form-data和x-www-form-urlencoded均可以請求成功,如果請求參數數據量太大,不設置maxPostSize可能會報錯。

參考來源:https://blog.csdn.net/whatever8975757/article/details/60576188

 

 


第三波bug的出現
接口調試完成后,部署到測試環境時(環境中的tomcat均已修改),訪問接口又報出錯誤

Nginx 414 Request-URI Too Large

 

原因是請求頭的長度超出了nginx限制,在nginx.conf里面把這兩個緩存加大就行
client_header_buffer_size 512k;
large_client_header_buffers 4 512k;

 

 

打開文件
vim /usr/local/nginx/conf/nginx.conf
按i進行編輯,並添加上面兩行代碼,按Esc退出編輯,按:wq!保存
進入nginx可執行目錄sbin下
cd /usr/local/nginx/sbin/
重啟nginx
./nginx -s reload


再次訪問接口的時候就正常了。

 
 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM