2008-09-24 27 views
8

Tengo las URL del formulario http://domain/image/⟨uuid⟩/42x42/some_name.png. El servidor web (nginx) está configurado para buscar un archivo /some/path/image/⟨uuid⟩/thumbnail_42x42.png, y si no existe, envía la URL al servidor (Django vía mod_wsgi) que luego genera la miniatura. A continuación, el servidor emite un redireccionamiento 302 exactamente a la misma URL que solicitó el cliente, con la idea de que, en esta segunda solicitud, el servidor notará el archivo en miniatura y lo enviará directamente.¿Es seguro redirigir a la misma URL?

La pregunta es, ¿funcionará esto con todos los navegadores? Hasta ahora, las pruebas no han mostrado problemas, pero ¿puedo estar seguro de que todos los agentes de usuarios interpretarán esto como se esperaba?

Actualización: Déjenme aclarar la intención. Actualmente esto funciona de la siguiente manera:

  1. El cliente solicita una miniatura de una imagen.
  2. El servidor ve que el archivo no existe, por lo que reenvía la solicitud al servidor.
  3. El backend crea la miniatura y devuelve 302.
  4. El backend libera todos los recursos, permitiendo que el servidor comparta el archivo recién generado con los clientes actuales y subsiguientes.

Tener el backend servir a la imagen recién creada es peor por dos razones:

  1. Dos formas de servir a los mismos datos deben ser creadas;
  2. El servidor es mucho mejor para servir contenido estático. ¿Qué sucede si el cliente tiene un vínculo extremadamente lento? El backend no es particularmente rápido ni eficiente con la memoria, y mantenerlo en la memoria mientras que alimentar con cuchara al cliente puede ser un desperdicio.

Así que mantengo el backend funcionando durante el tiempo mínimo.

Update²: Realmente apreciaría algunas referencias de RFC o las opiniones de alguien con experiencia en muchos navegadores. Todas esas respuestas afirmativas son agradables pero parecen un tanto infundadas.

Respuesta

1

Si no es así, el cliente está roto. La mayoría de los clientes seguirán los bucles de redireccionamiento hasta un valor máximo. Entonces sí, debería estar bien hasta que tu servidor no genere la miniatura por algún motivo.

en su lugar podría cambiar las direcciones URL para ser http://domain/djangoapp/generate_thumbnail y que va a regresar la miniatura y el tipo de contenido adecuado y así sucesivamente

0

Sí, está bien para volver a dirigir a la misma URI como que estaba en anteriormente.

Cuestiones relacionadas