According to http://code.google.com/speed/page-speed/docs/caching.html you should not set both Expires and Cache-Control: max-age.

I suggest you:
- also set Cache-control: public (see the article).
- get rid of the session cookie when the cvs file is first retrieved.

I think the cookie is the culprit.

Regards,
   Erik.


ZedroS Schwart wrote:
I finally managed to set the headers this way :
        WebResponse response = (WebResponse) getRequestCycle().getResponse();
        response.setDateHeader("Date", System.currentTimeMillis());
        response.setDateHeader("Expires", System.currentTimeMillis() +
CACHE_DURATION);
        response.setHeader("Cache-Control", "max-age=" +
CACHE_DURATION + ",  must-revalidate");
        response.setLastModifiedTime(Time.valueOf(new Date(90, 1,
1).getTime()));
        response.setContentType("text/csv");

I see them all in live http headers but... the browser keeps
requesting the file I send back :
http://localhost:8080/charts/data/dataId/AOX



GET /charts/data/dataId/AOX HTTP/1.1

Host: localhost:8080

User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.11)
Gecko/2009060308 Ubuntu/9.04 (jaunty) Firefox/3.0.11

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en,de;q=0.5

Accept-Encoding: gzip,deflate

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

Keep-Alive: 300

Connection: keep-alive

Cookie: JSESSIONID=vk0x2bf8xnpb



HTTP/1.x 200 OK

Last-Modified: Wed, 31 Jan 1990 23:00:00 GMT

Expires: Tue, 04 Aug 2009 09:53:23 GMT

Cache-Control: max-age=3600000,  must-revalidate

Content-Type: text/csv; charset=UTF-8

Content-Length: 5659

Date: Tue, 04 Aug 2009 08:53:23 GMT

Server: Jetty(6.1.16)


if anyone knows how to resolve that

++

On Wed, Jul 29, 2009 at 12:10 AM, ZedroS
Schwart<zedros.schwa...@gmail.com> wrote:
hi Juri

I did it the same way as you did and it worked fine. Even more : I
didn't even see lines in http header (???).

However, it doesn't fit my use case : I need to get the link to the
file to embed it in a javascript. Previously I did it this way :
       PageParameters parameters = new PageParameters();
       parameters.add(AMChartDataProviderPage.DATA_KEY, set.getDataId());
       return RequestCycle.get().urlFor(AMChartDataProviderPage.class,
parameters).toString();

however I don't know how to do it with what you provided...

++

On Tue, Jul 28, 2009 at 10:32 AM, Juri Prokofiev<proj...@gmail.com> wrote:
It works for me.

ResourceLink csvLink = new ResourceLink("csvLink", new
ResourceReference(AnnouncementCsvResource.ID), params);
add(csvLink);

public class AnnouncementCsvResource extends WebResource
{
   public static final String ID = "csv";
   @Override
   public IResourceStream getResourceStream()
   {
       return new CsvResourceStream();
   }

   @Override
   protected void setHeaders(WebResponse response)
   {
       super.setHeaders(response);
       response.setAttachmentHeader("announcements.csv");
       response.setHeader("Cache-Control", "no-cache");
   }

   private class CsvResourceStream extends AbstractStringResourceStream
   {
       @Override
       public String getContentType()
       {
           return "text/plain";
       }

       @Override
       protected Charset getCharset()
       {
           return Charset.forName("ISO-8859-1");
       }

       @Override
       protected String getString()
       {
           return "bla bla ";
       }
   }
}


On Tue, Jul 28, 2009 at 10:44 AM, ZedroS Schwart
<zedros.schwa...@gmail.com>wrote:

Thanks for this answer Juri.

I tried it (once again) and it didn't work : the setHeaders method
isn't called...

I use Live HTTP headers to check what goes through :
http://localhost:8080/charts/data/dataId/KBU



GET /charts/data/dataId/KBU HTTP/1.1

Host: localhost:8080

User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.11)
Gecko/2009060308 Ubuntu/9.04 (jaunty) Firefox/3.0.11

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en,de;q=0.5

Accept-Encoding: gzip,deflate

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

Keep-Alive: 300

Connection: keep-alive

Cookie: JSESSIONID=1gxaom5muzh66



HTTP/1.x 200 OK

Content-Type: text/csv; charset=UTF-8

Content-Length: 5726

Server: Jetty(6.1.16)


thanks again
zedros

On Tue, Jul 28, 2009 at 8:59 AM, Juri Prokofiev<proj...@gmail.com> wrote:
To set headers to a resource you need to extend setHeaders method from
WebResource. Example:
   @Override
   protected void setHeaders(WebResponse response)
   {
       super.setHeaders(response);
       response.setAttachmentHeader("announcements.csv");
       response.setHeader("Cache-Control", "no-cache");
   }

Check your headers. If Cache-Control is passed then resource should be
cached on user side.

On Tue, Jul 28, 2009 at 1:02 AM, ZedroS Schwart
<zedros.schwa...@gmail.com>wrote:

hi

We need to provide a flash application (www.amcharts.com if anyone is
interested) with some content through some files.

As the files are users specific (and determined with data from the
session), we went for some page delivering the content like this :
 public AMChartDataProviderPage(final PageParameters parameters)
   {
       Object object = parameters.get(DATA_KEY);
       if ((object == null) || !(object instanceof String) ||
"".equals(object))
       {
           throw new IllegalStateException("Expected parameter " +
DATA_KEY + " not provided or empty");
       }
       String dataId = (String) object;
       ByteArrayResource resourceStream;
       try
       {
           resourceStream = new ByteArrayResource("text/csv",
IOHelper.getResourceAsByteArray(dataId + ".csv"));
       }
       catch (IOException e)
       {
           throw ExceptionHelper.wrap(e);
       }
       getRequestCycle().setRequestTarget(new
ResourceStreamRequestTarget(resourceStream.getResourceStream()));
   }

However, I don't manage to get this resource to be cached on the user
browser side, despite the resource being cacheable. From what I've
seen, setHeaders() in WebResource is never called... Neither did I
manage to set them myself (on the page they're never called neither...
and the request cycle has no webresponse on which to define the
header).

Any clue ?

thanks in advance
zedros

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org


--
http://www.autoladu.ee  - kõik varuosad ühes kohas

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org


--
http://www.autoladu.ee  - kõik varuosad ühes kohas


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org


--

Erik van Oosten
http://day-to-day-stuff.blogspot.com/



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to