Czy potrzebuję Content-Type: application / octet-stream do pobrania pliku?

Standard HTTP mówi:

Jeśli w odpowiedzi zostanie użyty nagłówek [Content-Disposition: attachment] z application / octet-stream content-type, implikowane sugerujemy, że agent użytkownika nie powinien wyświetlać odpowiedzi, ale bezpośrednio wprowadź `Zapisz odpowiedź jako...'dialog.

Przeczytałem to jako

Content-Type: application/octet-stream
Content-Disposition: attachment

Ale myślałem, że Content-Type będzie application/pdf, image/png, itd.

Czy mam Content-Type: application/octet-stream Jeśli chcę mieć przeglądarki aby pobrać plik?

Author: Paul Draper, 2013-12-11

1 answers

Nie.

Typ treści powinien być tym, czym jest znany, jeśli go znasz. application/octet-stream jest zdefiniowana jako" dowolne dane binarne "w RFC 2046, i jest tu definitywne nakładanie się na to, że jest odpowiednie dla podmiotów, których jedynym przeznaczeniem jest zapisanie na dysku, i od tego momentu być poza cokolwiek "webby". Albo spojrzeć na niego z innej strony; jedyną rzeczą, którą można bezpiecznie zrobić z application / octet-stream, to zapisać go do pliku i mieć nadzieję, że ktoś inny wie, co to jest za.

Możesz połączyć użycie Content-Disposition z innymi typami zawartości, takimi jak image/png lub nawet text/html, aby wskazać, że chcesz zapisać, a nie wyświetlić. Kiedyś było tak, że niektóre przeglądarki zignorowałyby to w przypadku text/html, ale myślę, że to było dawno temu w tym momencie (i idę spać wkrótce, więc nie zamierzam zacząć testować całej masy przeglądarek teraz; może później).

RFC 2616 wspomina również o możliwości rozszerzenia tokenów, a obecnie większość przeglądarki rozpoznają inline, co oznacza, że chcesz, aby encja była wyświetlana, jeśli to możliwe(to znaczy, jeśli jest to typ, który przeglądarka wie, jak ją wyświetlić, w przeciwnym razie nie ma wyboru). Jest to oczywiście domyślne zachowanie, ale oznacza to, że możesz dołączyć filename część nagłówka, której przeglądarki będą używać (być może z pewnym dostosowaniem, aby rozszerzenia plików pasowały do lokalnych norm systemowych dla danego typu treści, być może nie) jako sugestię, jeśli użytkownik spróbuje Zapisz.

Stąd:

Content-Type: application/octet-stream
Content-Disposition: attachment; filename="picture.png"

Oznacza "Nie wiem, co to do cholery jest. Proszę zapisać go jako plik, najlepiej o nazwie obraz.png".

Content-Type: image/png
Content-Disposition: attachment; filename="picture.png"

Oznacza " to jest obraz PNG. Proszę zapisać go jako plik, najlepiej o nazwie obraz.png".

Content-Type: image/png
Content-Disposition: inline; filename="picture.png"

Oznacza " to jest obraz PNG. Wyświetl go, chyba że nie wiesz, jak wyświetlać obrazy PNG. W przeciwnym razie, lub jeśli użytkownik zdecyduje się go zapisać, zalecamy zdjęcie nazwy.png dla pliku, który zapisujesz jako".

Z tych przeglądarki, które rozpoznają inline, Niektóre zawsze go używały, podczas gdy inne używały go, jeśli użytkownik wybrał "Zapisz link jako", ale nie, jeśli wybrał "Zapisz" podczas przeglądania (lub przynajmniej IE kiedyś tak było, mogło się to zmienić kilka lat temu).

 1068
Author: Jon Hanna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-11 02:27:11