  
  For each page (response) that Django sends back from a view, it might provide
  two HTTP headers: the ``ETag`` header and the ``Last-Modified`` header. These
  headers are optional on HTTP responses. They can be set by your view function,
  or you can rely on the :class:`~django.middleware.common.CommonMiddleware`
  middleware to set the ``ETag`` header.
  
  When the client next requests the same resource, it might send along a header
  such as either `If-modified-since`_ or `If-unmodified-since`_, containing the
  date of the last modification time it was sent, or either `If-match`_ or
 
</s> remove Handles conditional GET operations. If the response has a ``ETag`` or
 </s> add Handles conditional GET operations. If the response doesn't have an ``ETag``
header, the middleware adds one if needed. If the response has a ``ETag`` or </s> remove     If-Modified-Since, the response is replaced by an HttpNotModified.
 </s> add     If-Modified-Since, the response is replaced by an HttpNotModified. An ETag
    header is added if needed.
or you can rely on the :class:`~django.middleware.http.ConditionalGetMiddleware`
  
  For each page (response) that Django sends back from a view, it might provide
  two HTTP headers: the ``ETag`` header and the ``Last-Modified`` header. These
  headers are optional on HTTP responses. They can be set by your view function,
or you can rely on the :class:`~django.middleware.http.ConditionalGetMiddleware`
  middleware to set the ``ETag`` header.
  
  When the client next requests the same resource, it might send along a header
  such as either `If-modified-since`_ or `If-unmodified-since`_, containing the
  date of the last modification time it was sent, or either `If-match`_ or
keep keep keep keep replace keep keep keep keep keep
 Fixed #26447 -- Deprecated settings.USE_ETAGS in favor of ConditionalGetMiddleware. 
docs/topics/conditional-view-processing.txt