Ant-design-pro: API 请求 roadhogrc proxy 与 java rest 集成遇见的invalid character问题

Created on 27 Dec 2017  ·  17Comments  ·  Source: ant-design/ant-design-pro

使用了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

Most helpful comment

@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
    }
  }

All 17 comments

为什么你的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,仍然如预期工作

玄学了...

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Yoping picture Yoping  ·  3Comments

zhongjiewu picture zhongjiewu  ·  3Comments

suifan picture suifan  ·  3Comments

zhuanglong picture zhuanglong  ·  3Comments

happier2 picture happier2  ·  3Comments