gpt4 book ai didi

url - 为什么Grails URL参数解码在服务器和本地服务器上的行为不同

转载 作者:行者123 更新时间:2023-12-02 13:54:09 25 4
gpt4 key购买 nike

假设我在grails URLMappings.groovy中有以下条目:

"/actionName/param1"(controller:'myController', action:'myAction')

当我调用 param1包括 +作为特殊字符的URL时,例如在我的本地环境和服务器环境中,URL都正确编码为 /actionName/my%2Bparam

在我的本地环境中-还使用“prod”作为环境参数-这已在 Controller 中正确解析为 my+param。但是,在我的“实际”生产环境(Amazon Web Service EC2实例)中,URL被解析为“我的参数”,这是错误的。

我不知道这可能是什么原因。两种环境都使用TomCat,并且如上所述,我什至在本地环境中使用生产环境设置,因此开发和生产之间的配置不能不同。

有谁知道我可以更深入地发现问题所在?

最佳答案

EC2实例是否在Tomcat之前运行Apache?我之前遇到过参数被两次解码的问题,一次是由Apache解码,另一次是由Tomcat解码。从内存来看,我认为我调整了Apache中ProxyPass指令的配置以进行更正。

编辑:

我发现以下说明与应用程序的源代码一起使用了:)

Apache httpd.conf的补充

AllowEncodedSlashes On 
ProxyTimeout 3600

我们还升级了Apache 2.2.12+,以使用启动shell脚本修复HEAD> GET rewrite错误。

我还向ProxyPass指令添加了“nocanon”选项,以停止/etc/httpd/conf.d/cluster.conf中的mod_proxy自动解码

我认为我必须在服务器上执行此操作,因为您无法使用GUI进行修改。我也有一条说明说,这会导致他们对查询字符串进行编码。也许我必须在我的应用程序中添加一个额外的解码来处理此问题(对不起,我无法确定!)

Tomcat启动参数
-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
-Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true

我认为这是为了让tomcat正确处理斜线

干杯

背风处

关于url - 为什么Grails URL参数解码在服务器和本地服务器上的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4015398/

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