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?
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).
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