2008-09-24 5 views
8

Ich habe URLs des Formulars http://domain/image/⟨uuid⟩/42x42/some_name.png. Der Webserver (nginx) ist so konfiguriert, dass er nach einer Datei /some/path/image/⟨uuid⟩/thumbnail_42x42.png sucht, und wenn diese nicht existiert, sendet er die URL an das Backend (Django via mod_wsgi), das dann das Thumbnail erzeugt. Dann gibt das Backend eine 302-Umleitung an exakt dieselbe URL aus, die vom Client angefordert wurde, mit der Idee, dass der Server bei dieser zweiten Anforderung die Thumbnail-Datei bemerkt und sie direkt sendet.Ist es sicher, auf dieselbe URL umzuleiten?

Die Frage ist, wird dies mit allen Browsern funktionieren? Bisher hat das Testen keine Probleme gezeigt, aber kann ich sicher sein, dass alle Benutzeragenten dies so interpretieren, wie es beabsichtigt ist?

Update: Lassen Sie mich die Absicht klären. Derzeit funktioniert das wie folgt:

  1. Der Client fordert eine Miniaturansicht eines Bildes an.
  2. Der Server sieht, dass die Datei nicht existiert, also leitet sie die Anfrage an das Backend weiter.
  3. Das Back-End erstellt das Thumbnail und gibt 302 zurück.
  4. Das Back-End gibt alle Ressourcen frei, sodass der Server die neu generierte Datei für aktuelle und nachfolgende Clients freigeben kann.

Nachdem das Backend dient das neu erstellte Bild schlechter aus zwei Gründen:

  1. Zwei Möglichkeiten, um die gleichen Daten dienen geschaffen werden muss;
  2. Der Server ist viel besser in der Bereitstellung statischer Inhalte. Was passiert, wenn der Client eine extrem langsame Verbindung hat? Das Backend ist weder besonders schnell noch speichereffizient, und es kann verschwenderisch sein, es zu speichern, während der Löffel mit dem Client gefüllt wird.

Also halte ich das Backend für die minimale Zeitmenge.

Update²: Ich würde wirklich einige RFC Referenzen oder Meinungen von jemandem mit Erfahrung mit vielen Browsern schätzen. Alle diese bejahenden Antworten sind angenehm, aber sie sehen etwas grundlos aus.

Antwort

1

Wenn nicht, ist der Client defekt. Die meisten Clients folgen Redirect-Schleifen bis zu einem maximalen Wert. Also ja, es sollte in Ordnung sein, bis Ihr Backend das Thumbnail aus irgendeinem Grund nicht erzeugt.

Sie könnten stattdessen URLs ändern http://domain/djangoapp/generate_thumbnail zu sein, und das wird die Vorschau und den richtigen Content-Type zurückzukehren und so weiter

0

Ja, es ist in Ordnung, auf den gleichen URI erneut direkt wie Sie vorher waren.