如果用户未通过If-None-Match,如何验证ETag是否有效?

时间:2015-06-03 01:09:43

标签: java rest jira etag

我第一次听到'ETag'。根据我能够通过我所使用的系统确定的内容,系统使用eTags来验证提交的项目在提交更改之前是否未被更改。如果另一个用户修改了该项,则系统响应ETag无效。用户正在使用为项目创建的REST服务,并且在几年内未被更改。我正在开发一个基于JIRA的Java应用程序,它有REST服务插件。

现在至于关于ETag做什么,我在这里不知所措。 我们对系统的安全扫描将标头ETag标记为注入代码的风险。也许我过分思考了这一点,但是,

  1. ETag是由应用程序中的某些代码创建和设置的,还是由Tomcat服务器创建的?
  2. 我是否接受ETag的值并将其与某些东西进行比较 确保它有效吗?
  3. 如何验证该值的值 ETag有效吗?
  4. 如果请求提供了If-None-Match,验证甚至会发生在哪里?
  5. 如何保护注射免受注射?
  6. 我一直在这个论坛上阅读有关ETag的事情的帖子,但是我不知道我从步骤1到最后一步的ETag做了什么/怎么做。

    真的可以使用一个引用来说明我是如何编写代码的。

    列出资源我发现:

1 个答案:

答案 0 :(得分:1)

  

ETag是由应用程序中的某些代码创建和设置的,还是由Tomcat服务器创建的?

如果服务器是Tomcat,请求是Tomcat服务器上的静态文件,是的,它是由Tomcat创建的。如果服务器是apache httpd,请求是静态文件,是的。 Tomcat和apache httpd的ETag计算算法不同。 ETag计算没有标准规范。

如果请求是非静态文件,则可以/可以将Etag添加到响应HTTP标头。

  

我是否要将ETag的值与其进行比较以确保其有效?

对于客户端,您可以将ETag值与其他HTTP响应(通常是相同的URL)进行比较。

对于服务器端,您可以将If-Non-Match与应该作为ETag值响应的内容进行比较。如果值匹配,则应响应HTTP 304。

  

如何验证ETag的值是否有效?

通常服务器验证Etag。您可以为每个请求计算ETag值。但更常见的是ETag值缓存在服务器上。

  

如果请求提供了If-None-Match,那么验证甚至会发生在哪里?

这取决于服务器的实现。

  

如何保护注射免受注射?

ETag值本身不会注入任何东西。但它可以用于像Cookie这样的HTTP请求跟踪。请参阅this article