gpt4 book ai didi

tomcat - Spring Cloud Zuul 反向代理在 URL 编码时不从 CouchDB 获取数据

转载 作者:行者123 更新时间:2023-11-28 22:26:43 26 4
gpt4 key购买 nike

(更新)

我使用 spring-cloud-starter-zuul 创建了一个 Spring 云反向代理通过我的代理转发所有 pouchDB-CouchDB 请求。并转发所有类似 http://10.16.33.221:8080/couchdb/** 的请求。这是我的 application.properties 文件

zuul.routes.couchdb.url=http://10.16.32.85:5984/

ribbon.eureka.enabled=false

server.port=8080

10.16.32.85:5984 是 CouchDB 地址。

pouchDB - CouchDB 同步请求转发时出现问题。我发现一些 URL 编码的 OptionsGet 请求是由 pouch DB 发送的,如下所示 (正斜杠 '/' 被编码为 %2F)

http://10.16.33.221:8080/couchdb/inspection/RailCar%2Fbdbc936f-2c33-46f8-b037-ffa329aa4886?revs=true&latest=true&open_revs=%5B%227-fc6370e4d1cecca0fcc103b0e2763e1e%22%5D&_nonce=1483422848386

http://10.16.33.221:8080 是我的代理,inspection 是数据库名称。

我发现由于安全问题,这些请求是由 apache tomcat 抛出的。并按照建议 here我添加了建议的配置以允许编码的 URL 到我的 Spring 应用程序。然后编码的 URL 来到我的应用程序,但在转发后没有得到响应。

举个例子,

当我发送以下请求时,

http://10.16.33.221:8080/couchdb/inspection/_changes?since=551

这给出了所需的结果。此请求通过我的 spring 应用程序(代理)发送到 CouchDB。这意味着我的代理工作正常。

http://10.16.33.221:8080/couchdb/inspection/RailCar%2Fbdbc936f-2c33-46f8-b037-ffa329aa4886?revs=true&latest=true&open_revs=%5B%227-fc6370e4d1cecca0fcc103b0e2763e1e%22%5D&_nonce=1483422848386

这给出了 404 not found 作为 HTTP 状态。该请求到达代理,但在将其转发到 CouchDB 后获取结果。

但是如果我像下面这样直接发送相同的 URL 到 CouchDB,

http://10.16.32.85:5984/inspection/RailCar%2fbdbc936f-2c33-46f8-b037-ffa329aa4886?revs=true&latest=true&open_revs=%5B%227-fc6370e4d1cecca0fcc103b0e2763e1e%22%5D&_nonce=1483422848386

它给出了要求的响应和 200 HTTP 状态。

但是如果我将带有解码正斜杠的相同 URL 直接发送到 CouchDB,如下所示

http://10.16.32.85:5984/inspection/RailCar/bdbc936f-2c33-46f8-b037-ffa329aa4886?revs=true&latest=true&open_revs=%5B%227-fc6370e4d1cecca0fcc103b0e2763e1e%22%5D&_nonce=1483422848386

它还会给出 404 not found 作为 HTTP 状态。现在我很困惑哪里出了问题以及我必须做什么。这个问题浪费了我整个星期。所以请给我任何克服这个问题的建议。

已更新-->我使用码头服务器来部署 Web 应用程序,码头不需要允许编码的正斜杠。所以我删除了那个配置。然后像这样编码 URL

http://10.16.33.221:8080/couchdb/inspection/RailCar%2Fbdbc936f-2c33-46f8-b037-ffa329aa4886?revs=true&latest=true&open_revs=%5B%227-fc6370e4d1cecca0fcc103b0e2763e1e%22%5D&_nonce=1483422848386

在没有对编码斜杠进行任何配置的情况下访问我的代理,但是在转发之后,它们也会给出 404 not found。

谢谢。

最佳答案

找到问题所在。 jetty 和 tomcat 解码传入 URL 的 servlet 路径并转发它们。但是,仍然没有解决这个问题的方法。必须使用过滤器或其他方式重新编码 servlet 路径。但是传入的 Http servlet 请求无法从代理重写。所以无法想象该怎么做:(

关于tomcat - Spring Cloud Zuul 反向代理在 URL 编码时不从 CouchDB 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41449910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com