mgonto / restangular

AngularJS service to handle Rest API Restful Resources properly and easily
MIT License
7.87k stars 840 forks source link

make etag a strong etag when used in if-None-Match #1480

Open moafak opened 6 years ago

moafak commented 6 years ago

Should restangular make the etag it receives a strong etag when it sends it as if-None-Match http header (i.e strip the W/ from received etag when it uses it as if-None-Match)

MDN says that

may be prefixed by W/ to indicate that the weak comparison algorithm should be used (This is useless with If-None-Match as it only uses that algorithm).

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match

for more context: https://stackoverflow.com/questions/47995118/nginx-doesnt-match-weak-etags

I'm trying to handle weak etags problem with nginx If I send a weak etag (with W/"<etag>"), nginx will not recognize the etag, and will send 200 OK http response But If I send it as strong etag (without W/"<etag>") then nginx will respond correctly with 304 Not Modified response

meastman commented 6 years ago

That would certainly seem like an nginx bug.

https://tools.ietf.org/html/rfc7232#section-3.2 "A recipient MUST use the weak comparison function when comparing entity-tags for If-None-Match"

https://tools.ietf.org/html/rfc7232#section-2.3.2 "Weak comparison: two entity-tags are equivalent if their opaque-tags match character-by-character, regardless of either or both being tagged as "weak"."

Also, it looks like this may have been fixed in nginx 1.7.3: http://hg.nginx.org/nginx/rev/af229f8cf987 "Entity tags: weak comparison for If-None-Match." https://github.com/nginx/nginx/compare/release-1.7.2...release-1.7.3