JavaWeb服务在本地机器上保持编码,在开发时转换
我有一个奇怪的问题,我希望有人有一些经验,可以帮助我
我在我的计算机上安装了一个tomcat,当我需要的时候,我用它在本地运行东西,但之后我会将它发布到一个开发框中进行测试。但是,URL编码的行为有所不同
例如,HTTP动词如下所示(在postman中,删除了URL的其余部分)
DELETE .../AAASnsAATAALI%2F5AAK/20181114110451
在本地计算机上,我在localhost\u access\u日志中看到:
"DELETE ../AAASnsAATAALI%2F5AAK/20181114110451 HTTP/1.1" 400
(我期待400。我已经了解了org.apache.tomcat.util.buf.udeconder.ALLOW_ENCODED_SLASH=true,我需要设置它,这要感谢StackOverflow,当我这样做时,一切都很好)
但是,我在开发机器上的localhost\u access\u日志中看到了这一点:
"DELETE ../AAASnsAATAALI/5AAK/20181114110451 HTTP/1.1" 404 1008
当然,我得到的是404,因为某些东西正在将%2F转换为/导致我的URL路径出错
我不清楚我的机器和开发机器之间有什么不同。我不认为这可能是tomcat,因为我非常确定我只是有现成的安装(我比较了我的catalina.properties,它们是相同的)。这可能是IIS中的某些东西导致开发框出现这种情况吗?我对这件事挠头已经有一段时间了,所以我希望有人让这件事发生在他们身上
感谢您的指导
编辑:
我最近发现,如果我直接引用tomcat而不是使用提供的intranet URL进行服务调用,我会得到预期的400错误。因此,我觉得必须为内联网站点设置一个需要更改的设置。我现在正在经历它,但没有经验
# 1 楼答案
因此,如果有人遇到这种情况,我可以通过多次尝试和错误找到解决方案
首先,这是一个与IIS相关的问题。我没有足够的经验来回答特定的问题,但如果有任何问题出现,我可以尽我所能
我相信这可能是一场灾难。NET 4.5(可能是4.0)问题,我们在作出此响应时使用的是4.7。所以我听说他们在4.5版本中对URL的要求要严格得多。默认情况下,IIS将解码编码的URL
需要做的第一件事是在IIS管理器中安装URL重写模块(或者有必要的资金知道编辑站点的web.config的语法)。我们没有这个,但我能找到一个能戴上它的人。需要将新规则添加到此模块中。我已经包括了网络。对我有效的规则的配置结果:
基本上,这是说获取URL并返回未编码的URL
然而,这一切并没有结束。在输入该规则后尝试后,我收到以下错误:
在4.0中,URL有默认的无效字符
因此,为了允许包含%,您必须通过设置requestPathInvalidCharacters并删除%来覆盖此默认设置,这就是我现在所拥有的
一旦这样做了,我就能够得到我所期望的400个错误请求。为了解决这个问题,你把它放在你的catalina里。属性文件
这个解决方案对我有效。如果有人看到他们的问题,请让我知道,这样我可以解决他们。希望这个解决方案能对其他可能有问题的人起作用