Open t-mart opened 2 months ago
Hi @t-mart
Quick response. I think we can implement it as a middleware like the ETag Middleware.
@yusukebe, that would make it the most "pluggable", yes.
However, with a general request/response (not a filesystem mapping like serveStatic), I'm not sure how the server would (statelessly) know how to set the Last-Modified
header correctly.
@t-mart
However, with a general request/response (not a filesystem mapping like serveStatic), I'm not sure how the server would (statelessly) know how to set the
Last-Modified
header correctly.
Indeed. As you mentioned, adding this feature to serveStatic
might be better. And it's a little bit of code.
Clients can make requests with an
If-Modified-Since
header to indicate that they only want a data-ful response (200) if the file has changed since the date value in that header. If the file has not changed since that date, the server can respond with a 304 and empty body.Clients set the value of the
If-Modified-Since
from an earlier response'sLast-Modified
header, which Hono would need to provide.src/serve-static.ts
:serveStatic
doesn't seem to implement this, but seems very close to being able to. We already pull the file's stats for various size headers and theDate
header.It seems like we'd need to do two things:
Add another header for
Last-Modified
. Something perhaps like:Add logic to read a
If-Modified-Since
header and return 304 in the appropriate case.To maintain backwards-compatibility, a new optional property could be added to the
ServeStaticOptions
object, which is the parameter toserveStatic
, to gate this behavior. For now, I guess it could be a boolean, named something likelastModified
(I'm not sure what would be a good name here).