Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Last-Modified, If-Modified-Since 헤더에 대한 처리 #13

Open
eungjun-yi opened this issue Jan 13, 2013 · 6 comments
Open

Last-Modified, If-Modified-Since 헤더에 대한 처리 #13

eungjun-yi opened this issue Jan 13, 2013 · 6 comments

Comments

@eungjun-yi
Copy link
Member

캐싱(#1)에 대한 가장 기본적인 기능 구현으로, Last-Modified와 If-Modified-Since 헤더에 대한 처리를 구현합니다.

  1. 응답으로 리소스를 돌려줄 때, 해당 리소스의 갱신일을 Last-Modified 헤더에 담아 보내줍니다.
  2. 요청에 If-Modified-Since가 있을 때는, 리소스의 갱신일이 그와 같거나 작다면 304 Not Modified를 반환합니다.
@eungjun-yi eungjun-yi mentioned this issue Jan 13, 2013
4 tasks
eungjun-yi added a commit that referenced this issue Jan 13, 2013
@eungjun-yi
Copy link
Member Author

빠뜨린 파일이 있었네요. b2e814d 에서 추가했습니다.

@eungjun-yi
Copy link
Member Author

근데 이 스펙대로 구현하면, 아래와 같은 시나리오에서는 문제가 있을 것 같네요.

  1. 서버에서 리소스가 갱신됨
  2. 클라이언트가 리소스를 가져감
  3. 1초 이내에 서버에서 리소스가 다시 갱신됨
  4. 클라이언트가 리소스를 가져가려고 시도함
  5. 서버는 새로 갱신된 리소스가 반환해야 하나, 그렇지 않고 304 Not Modified를 반환함

@miracle0k
Copy link
Member

etag까지 병행해서 사용하면 1초안에 파일 변경되는 부분도 커버 가능할 듯합니다.

curl로 간단히 설명된 문서 : http://www.baeldung.com/2013/01/11/etags-for-rest-with-spring/

@eungjun-yi
Copy link
Member Author

@miracle0k 조언&자료 감사합니다. 말씀하신대로 etag를 쓰는 것이 해결책이겠네요.

2xx 응답때 etag를 보내주고, 이후 요청의 If-Modified-Since가 리소스의 Last-Modified와 같은 경우엔 If-None-Match 헤더를 읽어서 etag 비교를 하도록 해야겠습니다.

@miracle0k
Copy link
Member

@npcode etag를 어떻게 생성할것인지에 대해서는 문서에 따로 나와있지는 않네요. 다른 웹서버들은 etag 어떻게 생성하는지 알아보는것도 재미있을듯하네요. etag는 따로 이슈를 따면 좋을것 같습니다. ^^

@eungjun-yi
Copy link
Member Author

이것 반영해야함.

An origin server MUST NOT send a Last-Modified date which is later
than the server's time of message origination. In such cases, where
the resource's last modification would indicate some time in the
future, the server MUST replace that date with the message
origination date.

@eungjun-yi eungjun-yi reopened this Feb 7, 2013
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants