title: What makes conditional GETs "conditional" if the resource is obtained in the initial request?
body: <p><strong>Breaking down what makes a conditional GET:</strong></p>
  
  <p>In <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html" rel="nofollow">RFC 2616</a> it states that the GET method change to a "conditional GET" if the request message includes an <code>If-*</code> (<code>If-Modified-Since</code>, <code>If-Unmodified-Since</code>, <code>If-Match</code>, <code>If-None-Match</code>, or <code>If-Range</code>) header field. </p>
  
  <p>It then states:</p>
  
  <blockquote>
    <p>A conditional GET method requests that the entity be transferred <strong>ONLY</strong> under the circumstances described by the conditional header field(s).</p>
  </blockquote>
  
  <p>From my understanding this is saying it will only return the data being requested if the <em>condition</em> is met with the "<code>If-*</code>" in any new subsequent requests. For example, if a GET request returns a response with a <code>Etag</code> header then the next request must include the <code>If-None-Match</code> with the <code>ETag</code> value to transfer the client back the requested resource.</p>
  
  <p>However, If a client has to send an initial request before getting the returned "<code>ETag</code>" header (to return with <code>If-None-Match</code>) then they already have the requested resource. Thus, any future requests that return the <code>If-None-Match</code> header with the <code>ETag</code> value only dictate the return of the requested value, returning <strong>200 OK</strong> (if the client does not return the <code>If-None-Match</code>and  <code>ETag</code> value from initial request) or <strong>304 Not Modified</strong> (if they do), where this helps the client and server by caching the resource. </p>
  
  <p><strong>My Question:</strong></p>
  
  <p>Why does it state the <em>entity</em> (the resource from a request) will "<em>be transferred <strong>ONLY</em></strong>" if the <code>If-*</code> condition is met (like in my example where the client returns the <code>ETag</code> value with an<code>If-None-Match</code> in order to cache the requested resource) if the resource or "<em>entity</em>" is being returned with or without a "<code>If-*</code>" being returned? It doesn't return a resource "<strong><em>only</strong> under the circumstances described by the conditional header</em>" because it returns the resource despiteless returning <strong>200 OK</strong> or <strong>304 Not Modified</strong> depending on if a "<code>If-*</code>" header is returned. What am I misunderstanding about this?</p>
  
  <p><strong>Full conditional GET reference from <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html" rel="nofollow">RFC 2616</a>:</strong></p>
  
  <blockquote>
    <p>The semantics of the GET method change to a "conditional GET" if the request message includes an If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match, or If-Range header field. A conditional GET method requests that the entity be transferred only under the circumstances described by the conditional header field(s). The conditional GET method is intended to reduce unnecessary network usage by allowing cached entities to be refreshed without requiring multiple requests or transferring data already held by the client.</p>
  </blockquote>