小编Gun*_*her的帖子

Apache httpd 2.4反向代理不压缩

使用Apache httpd 2.2,可以设置反向代理并使用mod_deflate压缩代理内容,以表达Accept-Encoding: gzip标题.

此配置足以使其工作:

    LoadModule deflate_module modules/mod_deflate.so
    LoadModule filter_module modules/mod_filter.so
    SetOutputFilter DEFLATE

    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
    ProxyRequests Off
    ProxyPass        /tomcat http://localhost:8880/
    ProxyPassReverse /tomcat http://localhost:8880/
    ProxyPass        /other  http://localhost:8001/
    ProxyPassReverse /other  http://localhost:8001/
Run Code Online (Sandbox Code Playgroud)

现在升级到2.4(Windows上为2.4.29)后,接受相同的配置,它确实压缩了DocumentRoot提供的静态内容.但是,当通过ProxyPass检索时,相同的内容将以未压缩的形式返回.

我知道我可以配置Tomcat来进行压缩,但是还有另一个服务器忽略了Accept-Encoding头.

如何设置反向代理,并压缩代理内容?

编辑:

以下是返回的标头,证明代理内容未被2.4服务器压缩:

----- Retrieving uncompressed from DocumentRoot ---------------------------------

C:\Temp>curl -I http://localhost/test.txt 
HTTP/1.1 200 OK
Date: Tue, 09 Jan 2018 17:11:59 GMT
Server: Apache/2.4.29 (Win64) OpenSSL/1.1.0g
Last-Modified: Fri, 05 Jan 2018 12:58:40 GMT
ETag: "75441-5620701eb471c"
Accept-Ranges: bytes
Content-Length: 480321
Vary: Accept-Encoding
Content-Type: text/plain …
Run Code Online (Sandbox Code Playgroud)

apache mod-deflate mod-proxy

10
推荐指数
1
解决办法
2431
查看次数

DateTimeFormatter 解析 - 时区名称和夏令时重叠时间

为了提高某些遗留代码的性能,我正在考虑用 java.time.format.DateTimeFormatter 替换 java.text.SimpleDateFormat。

执行的任务之一是解析使用 java.util.Date.toString 序列化的日期/时间值。使用 SimpleDateFormat,可以将它们转回原始时间戳(忽略小数秒),但是在尝试使用 DateTimeFormatter 执行相同操作时,我遇到了问题。

使用任一格式进行格式化时,我的本地时区会显示为 CET 或 CEST,具体取决于夏令时是否对要格式化的时间有效。然而,在解析时,DateTimeFormatter 似乎对 CET 和 CEST 的处理方式相同。

这会产生夏令时结束时发生重叠的问题。格式化时,02:00:00 创建两次,时间间隔一小时,但使用 CEST 和 CET 时区名称 - 这很好。但在解析时,这种差异无法收回。

这是一个例子:

long msecPerHour = 3600000L;
long cet_dst_2016 = 1477778400000L;
DateTimeFormatter formatter =
    DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH);
ZoneId timezone = ZoneId.of("Europe/Berlin");
for (int hours = 0; hours < 6; ++hours) {
    long time = cet_dst_2016 + msecPerHour * hours;
    String formatted = formatter.format(Instant.ofEpochMilli(time).atZone(timezone));
    long parsedTime = Instant.from(formatter.parse(formatted)).toEpochMilli();
    System.out.println(formatted + ", diff: …
Run Code Online (Sandbox Code Playgroud)

java java-time

4
推荐指数
1
解决办法
1565
查看次数

标签 统计

apache ×1

java ×1

java-time ×1

mod-deflate ×1

mod-proxy ×1