Temel olarak, bu, web sitesine tarayıcıya bunu yapmasını söylemesi nedeniyle olur. Bazen, web sitesi geliştiricisinin bu davranışı istediğine karar vermesi nedeniyle, örneğin dosya paylaşım sitelerinde yaygındır. Diğer zamanlarda, kullandıkları yazılım için varsayılan bir seçenek olması nedeniyle (örneğin forum veya blog yazılımı). Bazen bunun nedeni site dev'in ne yaptıkları hakkında hiçbir fikrinin olmamasıdır.
Content-Disposition
Bunun nedeni genellikle sitenin Content-Disposition
yanıtta bir başlık göndermesidir . Özellikle, ya inline
da gönderebilir attachment
.
inline
Aksi belirtilmedikçe, varsayılan değerdir ve tarayıcının mümkün olması durumunda dosyayı tarayıcı penceresinde açacağı anlamına gelir.
attachment
dosyayı her zaman indirmek anlamına gelir, asla tarayıcının içinde açmaya çalışmayın.
Tarayıcınızın geliştirici araçlarını açarsanız, belirli bir bağlantının aşağıdaki yanıt başlıklarını gönderdiğini göreceksiniz:
Content-Disposition: attachment; filename="Schubert-Sonata-21-B-flat.pdf"
Content-Type: application/pdf
Bu, tarayıcıya dosyayı her zaman indirmesini ( attachment
) Schubert-Sonata-21-B-flat.pdf
ve URL'den çıkarmaktansa varsayılan dosya adını vermesini söyler . Ek olarak, tarayıcıya (doğru şekilde) bir application/pdf
dosya olduğunu söyler - ancak attachment
tarayıcı olduğundan indirmeye devam etmek yine de varsayılandır.
Satır içi işleme ayrıntıları
A Content-Disposition
satır içi (veya belirtilmemiş) olduğunda, tarayıcı dosyayı varsayılan gömülü görüntüleyicide açmaya çalışır. Tarayıcı ne dosya türü bilir, bu sadece çalışır ve tarayıcı türünü açan bilir.
Tip algılama
Dosya türü sunucu tarafından bir Content-Type
başlık ile belirtilebilir . Örneğin, en yaygın satır içi türleridir text/html
, application/javascript
ve text/css
modern bir web sitesinin üç ana bölümden oluşturan,. Gibi daha ezoterik türleri de olabilir application/pdf
.
Başka bir olasılık, sunucunun bir belirtmiş Content-Type
olmasıdır application/octet-stream
. Bu en genel türdür ve tarayıcıya dosyanın yalnızca rastgele veriler olduğunu söyler - bu noktada tarayıcının yapabileceği tek şey onu indirmek olduğunu (teoride - buna ulaşacağız).
A Content-Type
sunucu tarafından belirtilmediğinde (ve bazen de olsa), tarayıcı , dosyayı okuyarak ve kalıpları arayarak türü tahmin etmeye çalışmak için koklama olarak bilinen şeyi yapabilir .
Türü işleme
Belirlenmemiş inline
veya belirtilmemiş bir dosyaya sahip bir dosyayı aldıktan sonra , tarayıcının mümkünse tarayıcıda açmayı denemesi gerekir. Bunu yapmak için, dosya türüne bakar ve türü tanırsa açmaya çalışır. Çoğu tarayıcı text/
basit bir metin görüntüleyicide herhangi bir tür açacak , text/html
web sayfası olarak oluşturmaya çalışacak , özel bir sözdizimi vurgulanmış görüntüleyicide açabilirapplication/json
.
Tip application/octet-stream
özel olarak ele alındı. Rastgele bir bayt akışını ifade eden en genel tür olması gerektiği için, bu "tür" deki tüm dosyalara uygulanabilecek herhangi bir işleyici olması gerekmiyordu. Örneğin, Firefox'ta, bu varsayılan işleyicisi ayarlamak için bir yetersizlik olarak tezahür için application/octet-stream
.
Bazı web siteleri de standart olmayan türler kullanmıştır. application/force-download
Kullanıldığını gördüm - bu bir indirme olarak sona eriyor, çünkü tarayıcı bu türle başka ne yapabileceğini tanımıyor veya bilmiyor, ancak özel işlemlerden hoşlanmıyor application/octet-stream
.
Biraz tarih dersi
PDF'lerin nasıl işlendiğini görmek için, biraz web geçmişine girebiliriz. Geçmişte, tarayıcıların PDF'nin ne olduğu hakkında hiçbir fikri yoktu. Böylece açamadılar. Ancak PDF'lerin yerleşik PDF görüntüleyicileri bir şey olmadan çok önce tarayıcılarda açıldığını gördük, peki bu nasıl oldu?
Tarayıcı işlevini, bugünlerde sınırlı sayıda / eklenti ile yapabileceklerinizden çok daha fazla kontrolle genişletmek mümkün olmuştu. Bunlar en genel olarak eklentiler olarak biliniyordu . Internet Explorer’da ActiveX denetimleriydi; Mozilla Firefox’ta ve daha sonra Google Chrome’da NPAPI eklentileriydi. Bu eklentiler, başka bir programın yapabileceği her şeyi yapabilir ve ayrıca tarayıcı tarafından başka şekilde tanınamayacak belirli bir dosya türü için kendilerini işleyici olarak kaydedebilir. (Bu arada, bunun daha sonra büyük bir güvenlik riski olduğu bulundu ve bu güçlü eklentilere verilen destek yavaş yavaş düştü ...)
Eklenti günlerinde gidip Adobe Acrobat Reader'ı yükleyecektikten sonra application/pdf
MIME türünü kaydeden bir ActiveX veya NPAPI eklentisi yükler ve tarayıcıya eklentiyi kullanarak bu satır içi satırları açmasını söylersiniz.
Elbette, bu eklentilerin neden olduğu bir dizi güvenlik ve performans sorunundan sonra, büyük tarayıcı satıcıları çoğu eklentiyi desteklerken, kendi PDF görüntüleyicilerini de kullanmaya karar verdi. Hala gördüğümüz tek şey, işleyen Adobe Shockwave Flash application/x-shockwave-flash
.
Aslında bunun için bazı artık kontroller var, örneğin Firefox'ta Preview in Firefox
seçenek hala var:
Geçmişte, bu, bu türü kaydeden birden fazla eklenti arasında seçim yapılmasını sağlardı. Örneğin, Flash için kayıtlı türlerin listesi:
O günler ayrıca HTML5 ile birlikte gelen birçok medya desteğinden önceydi. Sadece PDF'ler değildi - tarayıcınız MP4 konteyneri veya H.264 videoyu nasıl kullanacağını, MP3 dosyasını nasıl çalacağını hiçbir fikrini bilmiyordu vb. hatta Windows Media Player veya web siteleri, Flash'ta yerleşik bir medya oynatıcısını yerleştirebilir.
Content-Type: application/octet-stream
ancak bu günlerde çok daha az yaygındır.