使用了proxy转发,遇见了以下错误,应该是关键字符{}]的问题,网上也有一些修改tomcat启动参数的解法:
https://www.cnblogs.com/hark0623/p/6977737.html
请问有无其他同学遇见,或者有无推荐的处理方式呢?谢谢
2017-12-27 10:40:11.580 DEBUG 22236 --- [nio-8087-exec-5] o.a.coyote.http11.Http11InputBuffer : Received [GET apiv1apicurrentUser HTTP/1.1
user-agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36
accept: /
referer: http://localhost:8000/
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9
cookie: bdoctip=ok; _ga=GA1.1.394914146.1503630842;
connection: close
content-length: 2
Accept-Charset: utf-8
Host: 127.0.0.1:8087
{}]
2017-12-27 10:40:11.580 DEBUG 22236 --- [nio-8087-exec-5] o.apache.coyote.http11.Http11Processor : Error parsing HTTP request header
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
为什么你的cookie这么长!
这个应该之前localhost开发留下的,当清除掉后:
in utils/request.js
const defaultOptions = {
//credentials: 'include',
};
2017-12-27 11:09:51.552 DEBUG 24884 --- [nio-8087-exec-7] o.a.coyote.http11.Http11InputBuffer : Received [GET apiv1apicurrentUser HTTP/1.1
user-agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36
accept: /
referer: http://localhost:8000/
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9
connection: close
content-length: 2
Accept-Charset: utf-8
Host: 127.0.0.1:8087
{}]
2017-12-27 11:09:51.556 INFO 24884 --- [nio-8087-exec-7] o.apache.coyote.http11.Http11Processor : Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
用的spring boot 吗? 还有没有详细的头信息?
tomcat的版本最好也告诉一下
尤其是你的参数.
spring boot : 1.5.9.RELEASE
tomcat : embedded 8.5.23
之前的header信息,是debug level 的,我再试试看trace的
果然是spring boot... 我也碰见过 我换成了jetty.
或者你把url和参数全部urlencode了
换成jetty 就好了 ? 我试着换成了undertow还是invalid character错误。。
我试试看jetty, 我尝试了URIEncode url,在fetch之前,但仍然无用
不想修改tomcat 你就这么用
```
restUrl + "/print?reportParams= " + encodeURI(JSON.stringify(jsonData));
java -jar -Dtomcat.util.http.parser.HttpParser.requestTargetAllow=|{} jihui.jar
```
推荐第一种
尝试换成jetty后,还是不成功,不过应该将root cause暴露了出来 :
Parse exception: HttpParser{s=CONTENT,0 of 2} for HttpChannelOverHttp@295a797b{r=1,c=false,a=IDLE,uri=//127.0.0.1:8087v1apisessionlist}
为什么转发请求的时候,将URI的 / 替换为了 呢?
handled=true async=false committed=false on HttpChannelOverHttp@4c869696{r=1,c=false,a=DISPATCHED,uri=//127.0.0.1:8087/v1/api/session/list}
从浏览器直接请求,则无错误。
我现在遇见的问题,似乎还没有到传输json数据,就错误了。。。
去webpack server看看吧.这个替换好没道理.
@wingpengfei proxy
还不行用他的api自己做一下转化.
好的,非常感谢:) 我去试试 ,我在想,是不是跟我的开发机是windows有关系呢 哈哈
应该不是 我是就是windows的.
如果真的是这个原因 ,那那就是webpack的bug了
@chenshuai2144 误打误撞尝试了一个方案,相对来说成本应该较低
目前解决了proxy转发时候,将URI中的/ 替换为的问题
验证了 tomcat/jetty/undertow 都符合预期
** JSON提交还未验证 ,目前还未触及 {}|的问题
参照:https://github.com/sorrycc/roadhog/issues/482
in .roadhogrc.mock.js
export {}
in .roadhogrc
"proxy": {
"/api/*": {
"target": "http://localhost:8087/v1/",
"changeOrigin": true
}
}
changeOrigin 是关键吗?
似乎就是配置的文件不同,去掉了 changeOrigin,仍然如预期工作
玄学了...
Most helpful comment
@chenshuai2144 误打误撞尝试了一个方案,相对来说成本应该较低
目前解决了proxy转发时候,将URI中的/ 替换为的问题
验证了 tomcat/jetty/undertow 都符合预期
** JSON提交还未验证 ,目前还未触及 {}|的问题
参照:https://github.com/sorrycc/roadhog/issues/482
in .roadhogrc.mock.js
in .roadhogrc