如何为特定目录启用gzip压缩并告诉浏览器缓存其内容?

问题描述

我使用的是嵌入式ORTY / 9.4.28.v20200408,APEX 20.1,Database 18c XE,Google Chrome版本84.0.4147.135(官方版本)(64位),Opera版本:70.0.3728.106的Oracle ORDS 20.2 和Windows 7 Ultimate。

在APEX中,有一个目录包含APEX的静态文件-CSS和Javascript文件以及图像文件。根据此处的Oracle文档https://docs.oracle.com/en/database/oracle/application-express/19.2/htmig/performance-optimization-tasks.html#GUID-668ED330-AFDC-4A43-AA11-D67FCCA58DA1

,我需要为该目录​​启用gzip并告诉浏览器至少缓存12个小时,以便提高APEX开发环境和我的APEX应用程序的性能

我在ORDS配置目录的“ standalone”文件夹下创建了一个名为“ etc”的文件夹。那是我应该放置所有Jetty的Xml配置文件文件夹。然后创建一个名为“ jetty.xml”的文件,其中包含以下内容,以实现Jetty文档中有关发送Cache-Control标头的内容https://www.eclipse.org/jetty/documentation/current/header-filter.html

    <?xml version="1.0"?>  
    <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN"   
    "http://www.eclipse.org/jetty/configure.dtd">  
    <filter>  
       <filter-name>HeaderFilter</filter-name>  
       <filter-class>org.eclipse.jetty.servlets.HeaderFilter</filter-class>  
       <init-param>  
         <param-name>headerConfig</param-name>  
         <param-value>  
          "add Cache-Control: max-age=43200"  
         </param-value>  
       <init-param>  
         <param-name>includedpaths</param-name>  
         <param-value>  
          "D:\ords\images"  
         </param-value>  
       </init-param>  
     </filter>  

但是当我通过具有以下内容的批处理文件运行ORDS时

    cd D:\Original\Oracle_ORDS_Editions\ords-20.2.0.178.1804
    d:
    java -jar ords.war standalone

cmd窗口打开,然后自动消失。 我需要知道代码为什么失败,仍然需要为该目录​​启用gzip。谢谢。

解决方法

HeaderFilter与传统上通过Web应用程序存档(WAR文件)部署的Web应用程序一起使用。

已记录的HeaderFilter配置是针对战争内部WEB-INF/web.xml servlet描述符的,该描述符特定于所部署的Web应用程序(通常在WAR文件中找到)。

任意创建etc目录和jetty.xml文件从来都不是Jetty的相关配置形式。

etc目录和jetty.xml概念仅在使用独立Jetty技术(例如在jetty-home或更旧的jetty-distribution档案中看到的内容)才有意义。 。更具体地说,start.jar归档文件中的jetty-home是查找和使用etc目录或jetty.xml文件的唯一文件。

jetty.xml知道的start.jar永远不会通过手动创建或编辑来管理。实际上,它是jetty-home归档文件随附的通常是只读文件,并且就地使用。 etc目录位于jetty-home归档文件中,也可以在Jetty独立版本的应用程序特定配置(称为${jetty.base}目录中看到)。

您提到“ jetty / 9.4.28.v20200408嵌入式”,这通常意味着它没有使用独立的Jetty概念。在嵌入式Jetty场景中,Jetty服务器的配置通常在父项目(在您的情况下为Oracle ORDS)的配置技术内完成。您将需要知道Jetty服务器的配置方式,并在父项目为您提供的任何配置的限制内工作。