GithubHelp home page GithubHelp logo

Comments (11)

sgratzl avatar sgratzl commented on August 15, 2024

could be done in the .htaccess or via setting the header in the PHP file.

e.g. https://www.askapache.com/hacking/speed-site-caching-cache-control/

from delphi-epidata.

capnrefsmmat avatar capnrefsmmat commented on August 15, 2024

Just added that to #171. It should also improve responsiveness when switching back and forth between signals on the map.

from delphi-epidata.

capnrefsmmat avatar capnrefsmmat commented on August 15, 2024

I wasn't able to enable caching yet; I think ExpiresByType requires AllowOverride to be set in the Apache config. Someone needs to look into what settings are required and test them out on staging.

from delphi-epidata.

sgratzl avatar sgratzl commented on August 15, 2024

what is the status here? if you don't have access to the webserver setting the value via PHP would be an option as in

header('Cache-Control: public, max-age=86400');

or so

from delphi-epidata.

capnrefsmmat avatar capnrefsmmat commented on August 15, 2024

I think that's feasible. To do it through Apache would require coordinating some configuration changes with Brian, testing those on staging, and so on, but header() is much easier.

I guess the question is how long we'd like to cache responses. Probably no more than a few hours, since signals update daily and someone who comes just before the update shouldn't have to wait 24 hours to get it?

from delphi-epidata.

sgratzl avatar sgratzl commented on August 15, 2024

you roughly know when you put in new data each day. So you could just set the Expires header to that date: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires

from delphi-epidata.

capnrefsmmat avatar capnrefsmmat commented on August 15, 2024

Each signal pipeline delivers data on a different schedule, though, so we'd have to build that into the code -- some kind of configuration file specifying expected delivery times for each pipeline. And then we'd have to think about what happens when a pipeline is late and how the headers should work.

I think a simple first pass would just use a default short expiry, and we can go from there.

from delphi-epidata.

krivard avatar krivard commented on August 15, 2024

from delphi-epidata.

krivard avatar krivard commented on August 15, 2024

There's probably a way to do this in Flask, but it looks like we don't yet? Here's what I get:

$ curl -sLI "https://api.covidcast.cmu.edu/epidata/covidcast/?signal=jhu-csse:confirmed-incidence-num&geo_type=nation&geo_value=us&time_type=day&time_value=20230101"
HTTP/2 200 
date: Thu, 02 Feb 2023 18:26:48 GMT
content-type: application/json
content-length: 92
set-cookie: AWSALBTG=qacugPKQMWrsVqjUA8+5ECCJYZAGov2eBXdEFfLrsS9tVe74n2H2gu0UVvp6MX9YTUWz+707UXh6v4txX4efQ5yh/OvgOTaq51vKy0QHVoY+7qoVjk2BhVXpsdJaDody+4ay5bZgxS/L+U98Iha0RtGISny+LDZhpKMObub+2TnVTu+B8H8=; Expires=Thu, 09 Feb 2023 18:26:47 GMT; Path=/
set-cookie: AWSALBTGCORS=qacugPKQMWrsVqjUA8+5ECCJYZAGov2eBXdEFfLrsS9tVe74n2H2gu0UVvp6MX9YTUWz+707UXh6v4txX4efQ5yh/OvgOTaq51vKy0QHVoY+7qoVjk2BhVXpsdJaDody+4ay5bZgxS/L+U98Iha0RtGISny+LDZhpKMObub+2TnVTu+B8H8=; Expires=Thu, 09 Feb 2023 18:26:47 GMT; Path=/; SameSite=None; Secure
server: nginx/1.22.1
vary: Accept-Encoding
access-control-allow-origin: *
access-control-allow-methods: GET, POST, OPTIONS
access-control-allow-headers: DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range
access-control-expose-headers: Content-Length,Content-Range

ie we say it's okay for a request to include a Cache-Control header but we don't send one in the response.

from delphi-epidata.

melange396 avatar melange396 commented on August 15, 2024

related: caching headers for metadata

from delphi-epidata.

melange396 avatar melange396 commented on August 15, 2024

related: discussion of caching options and pros/cons thereof

from delphi-epidata.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.