ad

Apache重写抛弃setInputfilter deflate config指令-英雄云拓展知识分享

匿名投稿 333 2024-01-22

我有以下(简化)文件夹/文件结构:

/.htaccess

/test.php

/api/web/index.php

Apache重写抛弃setInputfilter deflate config指令-英雄云拓展知识分享

和Apache配置中的以下指令:

<IfModule mod_deflate.c>

<IfModule mod_filter.c>

SetInputFilter DEFLATE

</IfModule>

</IfModule>

我正在发送带有GZPOUPTIP船体的邮政要求,并带有适当的标题:

POST /test.php HTTP/1.1

Host: 192.168.1.248

Authorization: Bearer ed717c077e4bf81201196011adb457731b24e19d

Content-Type: application/json

Content-Encoding: gzip

我有以下配置 .htaccess 文件:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^api/(.*) api/web/index.php/$1 [NC,L]

问题是,如果我发布到 /test.php,一切都按预设工作,身体被放气,我可以正确地访问解剖的内容。

但是,如果我发布了重定向的内容(/api//api/v1/project) 这 index.php 脚本不会使身体解紧缩。

我认为这一定与 RewriteRule 指令疏忽 SetInputFilter 指令,但是,如何避免这类情况?

我试图添加 SetInputFilter 直接在.htaccess中的指令,而无需解决问题(可能不是在正确的位置吗?)。

您知道如何解决这个问题吗?

看答案

确切,有一个问题。我要研究的第一件事是记录有关模块的痕迹(rewrite, filterdeflate).

mod_rewrite日志 还可以,那里没甚么可疑的。为了确保一切都很好,我查看了它的最后版本 源代码。再说一次,对编码/解码(也不是HTTP要求/响应标头),没有任何可疑的问题。

所以我开始认为问题可能来自 filterdeflate 模块,即便它也可能来自其他地方。为了确认/使我的想法肯定,我查看了那些模块日志。很快,我能够看到两个测试用例之间的区分:有或没有 mod_rewrite 触及。

mod_rewrite不触及

mod_deflate.c(1421): [client 127.0.0.1:53000] AH01393: Zlib: Inflated 35 to 41 : URL /test.php

mod_filter.c(188): [client 127.0.0.1:53000] Content-Type condition for 'deflate' matched

我以此为参考来比较下面的下一个案例

触及mod_rewrite

mod_filter.c(188): [client 127.0.0.1:53002] Content-Type condition for 'deflate' matched

有趣的。事实上,看起来像 mod_deflate 是问题。我怀疑它的行动是 正确的时刻。这就是为何在这类情况下,您在这里看不到行动的缘由。

解决方案

到至今为止为止,一切都很好。所以呢 ?好吧,在已知的Apache列表中快捷搜索关键字 mod_deflate too late,偶然给了我 我正在寻觅甚么。这张票叫 mod_deflate调剂标题“太晚”,以下说明:

当使用mod_deflate膨胀时,它必须调剂要求标头(举例来看,它需要删除“内容长度”标头并调剂“内容编码”标头)。

就当前的情况而言,MOD_DEFLATE在读取要求主体时会调剂标题。但这为时已晚。举例来看,如果内容生成器模块在浏览要求主体之前需要查看要求标题,则内容生成器模块“看到”旧的(未修改)标头。

MOD_DEFLATE应在初期阶段调剂标题,例如在Fixup Hook(ap_hook_fixups)中。

尤里卡 呢这正是我们面对的问题。现在,好消息是要克服这个问题。坏消息:还没有在可用版本中进行审查/接受/合并。

你有选择:

  1. 利用此补钉并重新编译您的服务器。它应当起作用,由于一切都是有道理的。 但谨慎点...这可能会引入其他毛病/孔(即便在审查/接受时,有时就是这类情况)
  2. 等待将其包括在可用版本中(或许很长时间,斟酌到票证日期)。届时,将自定义内涵放气与PHP一起使用。

更新

刚刚尝试利用补钉并重新编译 mod_deflate。看起来它在正确的轨道上:它吃了 Content-Encoding 标题。反正, Content-Length 依然在那里。结果:还没有解紧缩。因此,这种情况下,依然有事情要做和适应,但是问题肯定在那个领域。

更新2(工作)

我终究想法使它起作用。这是我利用于apache的补钉(httpd version 2.4.34):

diff --git a/modules/filters/mod_deflate.c b/modules/filters/mod_deflate.c

index 1428460..cc8c0cb 100644

--- a/modules/filters/mod_deflate.c

+++ b/modules/filters/mod_deflate.c

@@ ⑴099,10 +1099,10 @@ static apr_status_t deflate_in_filter(ap_filter_t *f,

if (!ctx) {

/* only work on main request/no subrequests */

- if (!ap_is_initial_req(r)) {

+ /*if (!ap_is_initial_req(r)) {

ap_remove_input_filter(f);

return ap_get_brigade(f->next, bb, mode, block, readbytes);

- }

+ }*/

/* We can't operate on Content-Ranges */

if (apr_table_get(r->headers_in, "Content-Range") != NULL) {

事实上,我做了 mod_deflate 也要处理子要求。我不肯定它不会破坏其他模块,但它适用于您的用例(更概念证明)。不管如何,我在上面提到的票上提出了补钉。这是结果的屏幕截图:


🚀🌟 点击注册 免费试用超级应用平台-英雄云企业级hpapaas 🌟🚀 😃👉🌐

免责声明:

本网址(www.yingxiongyun.com)发布的材料主要源于独立创作和网友匿名投稿。此处提供的所有信息仅供参考之用。我们致力于提供准确且可信的信息,但不对材料的完整性或真实性作出任何保证。用户应自行验证相关信息的正确性,并对其决策承担全部责任。对于由于信息的错误、不准确或遗漏所造成的任何损失,本网址不承担任何法律责任。本网站所展示的所有内容,如文字、图像、标志、音频、视频、软件和程序等的版权均属于原创作者。如果任何组织或个人认为网站内容可能侵犯其知识产权,或包含不准确之处,请即刻联系我们进行相应处理。

标签:php apache
上一篇:如何在材料-UI对话框中使用withersponsivefullscreen-英雄云拓展知识分享
下一篇:在matplotlib中绘制2进制时间表-英雄云拓展知识分享
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×