atom feed7 messages in org.apache.tomcat.usersRE: Apache + mod_jk (ajp13) + Tomcat:...
FromSent OnAttachments
Michele MilaniDec 10, 2001 9:23 am 
Michele MilaniDec 11, 2001 2:44 am 
Michele MilaniDec 11, 2001 4:15 am 
Justin RowlesDec 11, 2001 4:22 am 
Michele MilaniDec 11, 2001 4:34 am 
Craig R. McClanahanDec 11, 2001 9:46 am 
Justin RowlesDec 12, 2001 3:08 am 
Subject:RE: Apache + mod_jk (ajp13) + Tomcat: no "Expires" header in the response
From:Michele Milani (mich@cefriel.it)
Date:Dec 11, 2001 2:44:33 am
List:org.apache.tomcat.users

-----Original Message----- From: Ralph Einfeldt [mailto:ralp@uptime-isc.de] Sent: martedì 11 dicembre 2001 07:54 To: Tomcat Users List Subject: AW: Apache + mod_jk (ajp13) + Tomcat: no "Expires" header in the response

Is mod_expire enabled on the linux box ?

Yes, it is. I also add to httpd.conf these two lines:

ExpiresActive On ExpiresByType text/html "access"

Apache sets "Expires" header for HTML pages under DocumentRoot (i.e. /var/www/html/ or C:/Program Files/Apache Group/Apache/htdocs).

AFAIK apache won't set the expires header unless you use mod_expire.

You're right.

To enable expiring you have to do it on your own: <% response.setHeader("Cache-Control","no-cache"); //HTTP 1.1 response.setHeader("Pragma","no-cache"); //HTTP 1.0 response.setDateHeader("Expires", 0); //prevents caching at the proxy server %>

This only works for HTML code generated by the servlet, not for static HTML pages that reside under $TOMCAT_HOME/webapps/test. Anyway, in both cases, Apache returns always the same date! And it not the creation/modification date/time of any file under $TOMCAT_HOME/webapps/test... can it be Tomcat startup time?

Here it is an excerpt of the Ethereal output: compare the sequence of headers obtained with Apache + Tomcat under Linux and under Windows.

I didn't install Red Hat and Apache (another guy did the job), I only installed Tomcat, maybe some configuration parameter needs to be set... is it possible?

[Linux]

[From the browser I request /test/servlet/DateServlet]

C->Slinux GET /test/servlet/DateServlet HTTP/1.1 Slinux->C HTTP/1.1 200 OK Date: Tue, 11 Dec 2001 09:56:37 GMT Server: Apache/1.3.20 (Unix) (Red-Hat/Linux) mod_jk/1.1.0 mod_ssl/2.8.4 OpenSSL/0.9.6b DAV/1.0.2 PHP/4.0.6 mod_perl/1.24_01 Cache-Control: no-cache Expires: Mon, 10 Dec 2001 16:41:53 GMT

[After 3 seconds the browser refreshs requesting /test/date.html]

C->Slinux GET /test/date.html HTTP/1.1 Slinux->C HTTP/1.1 200 OK Date: Tue, 11 Dec 2001 09:56:40 GMT Server: Apache/1.3.20 (Unix) (Red-Hat/Linux) mod_jk/1.1.0 mod_ssl/2.8.4 OpenSSL/0.9.6b DAV/1.0.2 PHP/4.0.6 mod_perl/1.24_01 Last-Modified: Mon, 10 Dec 2001 16:41:53 GMT

[I click on the "Update" link]

C->Slinux GET /test/servlet/DateServlet HTTP/1.1 Slinux->C HTTP/1.1 200 OK Date: Tue, 11 Dec 2001 09:56:41 GMT Server: Apache/1.3.20 (Unix) (Red-Hat/Linux) mod_jk/1.1.0 mod_ssl/2.8.4 OpenSSL/0.9.6b DAV/1.0.2 PHP/4.0.6 mod_perl/1.24_01 Cache-Control: no-cache Expires: Mon, 10 Dec 2001 16:41:53 GMT

[After 3 seconds the browser refreshs requesting /test/date.html]

C->Slinux GET /test/date.html HTTP/1.1 Slinux->C HTTP/1.1 200 OK Date: Tue, 11 Dec 2001 09:56:44 GMT Server: Apache/1.3.20 (Unix) (Red-Hat/Linux) mod_jk/1.1.0 mod_ssl/2.8.4 OpenSSL/0.9.6b DAV/1.0.2 PHP/4.0.6 mod_perl/1.24_01 Last-Modified: Mon, 10 Dec 2001 16:41:53 GMT

[Windows]

[From the browser I request /test/servlet/DateServlet]

C->Swin GET /test/servlet/DateServlet HTTP/1.1 Swin->C HTTP/1.1 200 OK Date: Mon, 10 Dec 2001 16:59:32 GMT Server: Apache/1.3.20 (Win32) mod_jk/1.1.0

[After 3 seconds the browser refreshs requesting /test/date.html]

C->Swin GET /test/date.html HTTP/1.1 Swin->C HTTP/1.1 200 OK Date: Mon, 10 Dec 2001 16:59:35 GMT Server: Apache/1.3.20 (Win32) mod_jk/1.1.0 Last-Modified: Mon, 10 Dec 2001 16:59:32 GMT

[I click on the "Update" link]

C->Swin GET /test/servlet/DateServlet HTTP/1.1 Swin->C HTTP/1.1 200 OK Date: Mon, 10 Dec 2001 16:59:37 GMT Server: Apache/1.3.20 (Win32) mod_jk/1.1.0

[After 3 seconds the browser refreshs requesting /test/date.html]

C->Swin GET /test/date.html HTTP/1.1 Swin->C HTTP/1.1 200 OK Date: Mon, 10 Dec 2001 16:59:40 GMT Server: Apache/1.3.20 (Win32) mod_jk/1.1.0 Last-Modified: Mon, 10 Dec 2001 16:59:37 GMT

-----Ursprüngliche Nachricht----- Von: Michele Milani [mailto:mich@cefriel.it] Gesendet: Montag, 10. Dezember 2001 18:23 An: 'tomc@jakarta.apache.org' Betreff: RE: Apache + mod_jk (ajp13) + Tomcat: no "Expires" header in the response

This stuff is getting *really* funny! I run it under Windows and it worked. I compared HTTP headers, the problem is that:

- Apache (under Windows or Linux) does not set "Expires" header for HTML pages restituted by Tomcat - Apache _under Linux_ sets a wrong (i.e. old, not updated) "Last-Modified" header, so that the browser loads a local cached copy of the page

The time set by Apache into the "Last-Modified" header is not the time of creation/modification of any other file of my webapps/test directory, so I really can't understand how Apache sets it.

Any hint?

Cheers, Michele

-----Original Message----- From: Michele Milani Sent: lunedì 10 dicembre 2001 12:14 To: 'tomc@jakarta.apache.org' Subject: Apache + mod_jk (ajp13) + Tomcat: no "Expires" header in the response

Dear guys,

I searched the archive and the Usenet without success.

I'm using a box with:

- Linux Red Hat 7.2 - Apache 1.3.20 - mod_jk (ajp13) - Tomcat 3.3

I developed a web application that let you browse through some static HTML pages and let you update the content of these HTML page, inserting some data in a form.

The update of the static pages is done by a servlet that rewrite the HTML file. The problem is that I can't get the last updated HTML page in my browser.

I thought it was a problem realted to caching, so I forced Apache to set the "Expires" header writing in the httpd.conf:

#ExpiresActive On #ExpiresByType text/html "access"

but this solution didn't help.

I turned on a protocol analyzer (Etheral) to try and understand what the problem was and I realized that Apache does not set the "Expires" header when the HTML page comes from Tomcat.

I think my application is not so strange: I want to save the new data inserted by the user so that the next time she requests the page she gets the last version of it.

I wrote another very simple application to explain my problem better, simply copy the following files under $TOMCAT_HOME/webapps/ and compile the servlet:

=============== test/index.html =============== <html> <head> </head> <body> <a href="servlet/DateServlet">Test</a><br> </body> </html>

===================================== test/WEB-INF/classes/DateServlet.java ===================================== import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*;

public class DateServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { try { Date now = new Date();

PrintWriter dateWriter = new PrintWriter(new FileWriter("../webapps/test/date.html"), true); dateWriter.println(now); dateWriter.println("<br>"); dateWriter.println("<a href=\"servlet/DateServlet\">Update</a>"); dateWriter.close();

response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(now); out.println("<meta http-equiv='refresh' content='3; url=\"/test/date.html\"'></meta>");

} catch(Exception ex) { PrintWriter errorWriter = new PrintWriter(new FileWriter("../webapps/bib/error.txt"), true); ex.printStackTrace(errorWriter); errorWriter.close(); } }

}

Did anyone else experiment such problems?

Cheers, Michele

<mailto:tomc@jakarta.apache.org>

For additional commands: <mailto:tomc@jakarta.apache.org> Troubles with the list: <mailto:tomc@jakarta.apache.org>