2009-11-09 11 views
25

Considere siguiente escenario:almacenamiento en caché de proxy con el descanso autenticado solicita

  • tengo REST URL/artículos que devuelve la lista de artículos
  • usuario proporcione sus credenciales usando Autorización de cabecera HTTP en cada solicitud
  • artículos pueden variar de usuario a usuario según sus privilegios

¿Es posible usar el proxy de almacenamiento en caché, como Squid, para este escenario? Proxy verá solo URL/artículos por lo que puede devolver una lista de artículos solo válidos para el primer usuario que genera la caché. Otros usuarios que solicitan URL/artículos pueden ver artículos a los que no tienen acceso, lo cual no es deseable, por supuesto.

¿Debo hacer rodar mi propio caché o algún software proxy de caché se puede configurar para basar su caché en el encabezado HTTP de autorización?

Respuesta

29

Una posibilidad de probar es usar el encabezado de respuesta Vary: Authorization para indicar a las memorias caché descendentes que tengan cuidado con el almacenamiento en caché variando los documentos almacenados en caché según el encabezado Authorization de la solicitud.

Ya puede estar usando este encabezado si usa response-compression. El usuario generalmente solicita un recurso con el encabezado Accept-Encoding: gzip, deflate; si el servidor está configurado para admitir la compresión, entonces la respuesta puede venir con los encabezados Content-Encoding: gzip y Vary: Accept-Encoding ya.

+1

Sí, cabecera Vary debe hacer el truco. Gracias. – Peter

+1

¡Genial! ¿Una súplica desvergonzada para un voto positivo, entonces? – yfeldblum

+0

¿Esto es incluso un problema si usa HTTPS? (que debe usarse si usa el encabezado Autenticación básica o Autorización) – wal

9

Por la sección 1.1 HTTP/RFC 14.8 (http://tools.ietf.org/html/rfc2616#section-14.8):

When a shared cache (see section 13.7) receives a request 
    containing an Authorization field, it MUST NOT return the 
    corresponding response as a reply to any other request, unless one 
    of the following specific exceptions holds: 

    1. If the response includes the "s-maxage" cache-control 
    directive, the cache MAY use that response in replying to a 
    subsequent request. But (if the specified maximum age has 
    passed) a proxy cache MUST first revalidate it with the origin 
    server, using the request-headers from the new request to allow 
    the origin server to authenticate the new request. (This is the 
    defined behavior for s-maxage.) If the response includes "s- 
    maxage=0", the proxy MUST always revalidate it before re-using 
    it. 

    2. If the response includes the "must-revalidate" cache-control 
    directive, the cache MAY use that response in replying to a 
    subsequent request. But if the response is stale, all caches 
    MUST first revalidate it with the origin server, using the 
    request-headers from the new request to allow the origin server 
    to authenticate the new request. 

    3. If the response includes the "public" cache-control directive, 
    it MAY be returned in reply to any subsequent request. 
+1

Creo que el interlocutor usa el indicador 'public' en el encabezado' cache-control'. Tu publicación no responde la pregunta, pero es útil. – dizel3d

Cuestiones relacionadas