Pregunta

Tengo 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 backend (Django a través de mod_wsgi) que luego genera la miniatura.Luego, el backend emite una redirección 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.

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 usuario interpretarán esto según lo previsto?

Actualizar: Déjame 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, lo que permite que el servidor comparta el archivo recién generado con los clientes actuales y posteriores.

Hacer que el backend sirva la imagen recién creada es peor por dos razones:

  1. Se deben crear dos formas de servir los mismos datos;
  2. El servidor es mucho mejor a la hora de servir contenido estático.¿Qué pasa si el cliente tiene un enlace extremadamente lento?El backend no es particularmente rápido ni eficiente en memoria, y mantenerlo en la memoria mientras se alimenta al cliente con cuchara puede ser un desperdicio.

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

Actualización²: Realmente agradecería algunas referencias de RFC u opiniones de alguien con experiencia con muchos navegadores.Todas esas respuestas afirmativas son agradables pero parecen algo infundadas.

¿Fue útil?

Solución

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

En su lugar, podrías cambiar las URL para que sean http://dominio/djangoapp/generate_thumbnail y eso devolverá la miniatura y el tipo de contenido adecuado, etc.

Otros consejos

Sí, está bien redirigir al mismo URI que tenía anteriormente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top