सवाल क्रोम कभी-कभी इसे खोलने के बजाय पीडीएफ डाउनलोड क्यों करता है? [डुप्लिकेट]


जब मैं पीडीएफ फाइलों के कुछ पतों पर जाता हूं, तो क्रोम अपने अंतर्निहित पीडीएफ व्यूअर का उपयोग करके इसे खोलने के बजाय पीडीएफ डाउनलोड करता है। पृष्ठ तब खाली सफेद है।

मेरी क्रोम सेटिंग्स में कोई समस्या नहीं है: मैं अन्य पीडीएफ फाइलों के पते आज़माता हूं, और क्रोम अपेक्षित व्यवहार करता है (मैंने क्रोम के अंतर्निहित पीडीएफ व्यूअर का उपयोग करने के लिए सेट किया है)। लेकिन हर बार जब मैं एक ही समस्याग्रस्त पते का प्रयास करता हूं, तो क्रोम पीडीएफ डाउनलोड करता है और फिर एक खाली पृष्ठ प्रदर्शित करता है।

मैं विंडोज 10 और क्रोम का उपयोग कर रहा हूँ Version 63.0.3239.84 (Official Build) (64-bit)

इस बार मेरा विशिष्ट समस्याग्रस्त यूआरएल है यहाँ (एक Google खोज परिणाम)।


110
2017-12-17 07:00


मूल




जवाब:


असल में, ऐसा इसलिए होता है क्योंकि वेबसाइट ब्राउज़र को ऐसा करने के लिए कहती है। कभी-कभी, ऐसा इसलिए होता है क्योंकि वेबसाइट डेवलपर निर्णय लेता है कि वे इस व्यवहार को चाहते हैं, उदा। फ़ाइल साझा करने साइटों पर आम है। अन्य बार, ऐसा इसलिए होता है क्योंकि वे जो भी सॉफ़्टवेयर उपयोग कर रहे हैं (उदाहरण के लिए फ़ोरम या ब्लॉगिंग सॉफ़्टवेयर) के लिए यह एक डिफ़ॉल्ट विकल्प है। कभी-कभी ऐसा इसलिए होता है क्योंकि साइट देव को पता नहीं है कि वे क्या कर रहे हैं।


Content-Disposition

आमतौर पर यह साइट एक भेजती है Content-Disposition प्रतिक्रिया में हेडर। विशेष रूप से, यह या तो भेज सकता है inline या attachment

inline यदि डिफ़ॉल्ट रूप से निर्दिष्ट नहीं किया गया है तो डिफ़ॉल्ट है, और इसका अर्थ यह है कि ब्राउज़र ब्राउज़र विंडो के भीतर फ़ाइल खोल देगा यदि यह सक्षम है।

attachment हमेशा फ़ाइल डाउनलोड करने का मतलब है, कभी भी ब्राउज़र के अंदर इसे खोलने का प्रयास न करें।


यदि आप अपने ब्राउज़र के डेवलपर टूल खोलते हैं, तो आप देखेंगे कि विशेष लिंक निम्न प्रतिक्रिया शीर्षलेख भेजता है:

Content-Disposition: attachment; filename="Schubert-Sonata-21-B-flat.pdf"
Content-Type: application/pdf

यह ब्राउज़र को बताता है हमेशा डाउनलोड करें (attachment) फ़ाइल, और इसे डिफ़ॉल्ट फ़ाइल नाम देने के लिए Schubert-Sonata-21-B-flat.pdf यूआरएल से इसे घुमाने के बजाए। इसके अतिरिक्त, यह ब्राउज़र को बताता है (सही ढंग से) कि यह एक है application/pdf फ़ाइल - लेकिन चूंकि यह एक है attachment ब्राउज़र अभी भी डाउनलोड करने के लिए डिफ़ॉल्ट होगा।


इनलाइन हैंडलिंग विवरण

जब एक Content-Disposition इनलाइन (या अनिर्दिष्ट) है, ब्राउज़र डिफ़ॉल्ट एम्बेडेड दर्शक में फ़ाइल खोलने का प्रयास करेगा। यह केवल तभी काम करता है जब ब्राउज़र जानता है कि यह किस प्रकार का फ़ाइल है, तथा ब्राउजर जानता है कि उस प्रकार को कैसे खोलें।

पहचान का प्रकार टाइप करें

फ़ाइल प्रकार को सर्वर द्वारा निर्दिष्ट किया जा सकता है Content-Type हैडर। उदाहरण के लिए, सबसे आम इनलाइन प्रकार हैं text/html, application/javascript तथा text/css, एक आधुनिक वेबसाइट के तीन प्रमुख भागों को बनाते हैं। आप जैसे अधिक गूढ़ प्रकार भी हो सकते हैं application/pdf

एक और संभावना है कि सर्वर ने एक निर्दिष्ट किया है Content-Type का application/octet-stream। यह सबसे सामान्य प्रकार है, और यह ब्राउज़र को बताता है कि फ़ाइल केवल मनमानी डेटा है - जिस बिंदु पर ब्राउजर केवल एक चीज कर सकता है इसे डाउनलोड कर रहा है (सिद्धांत रूप में - हम उस पर पहुंचेंगे)।

जब एक Content-Typeसर्वर द्वारा निर्दिष्ट नहीं है (और कभी-कभी जब भी यह होता है), ब्राउजर जो कर सकता है उसे निष्पादित कर सकता है सूँघने फ़ाइल को पढ़ने और पैटर्न की तलाश करके प्रकार का अनुमान लगाने का प्रयास करें।

हैंडलिंग टाइप करें

एक फ़ाइल प्राप्त करने पर inline या अनिर्दिष्ट स्वभाव, ब्राउज़र को यदि संभव हो तो ब्राउज़र में इसे खोलने की कोशिश करनी होगी। ऐसा करने के लिए, यह फ़ाइल प्रकार को देखता है, और यदि यह प्रकार को पहचानता है तो यह इसे खोलने का प्रयास करेगा। अधिकांश ब्राउज़रों को कोई भी खुल जाएगा text/ एक साधारण पाठ दर्शक में टाइप करें, प्रस्तुत करने का प्रयास करेंगे text/html एक वेबपेज के रूप में, हो सकता है खुला application/json एक विशेष वाक्यविन्यास-हाइलाइट किए गए दर्शक में, आदि..

प्रारूप application/octet-stream विशेष रूप से संभाला गया था। चूंकि यह सबसे सामान्य प्रकार माना जाता है, बाइट्स की मनमानी धारा को दर्शाता है, ऐसा कोई भी हैंडलर नहीं होना चाहिए जो इस "प्रकार" की सभी फाइलों पर लागू हो। उदाहरण के लिए, फ़ायरफ़ॉक्स में, यह डिफ़ॉल्ट हैंडलर सेट करने में असमर्थता के रूप में प्रकट होता है के लिये application/octet-stream

कुछ वेबसाइटों ने गैर-मानक प्रकारों का भी उपयोग किया है। मैंने देखा है application/force-download प्रयुक्त - जो एक डाउनलोड के रूप में समाप्त होता है क्योंकि ब्राउज़र पहचानता नहीं है या जानता है कि इस प्रकार के साथ और क्या करना है, लेकिन विशेष हैंडलिंग का आनंद नहीं लेता है application/octet-stream कर देता है।


एक इतिहास सबक का थोड़ा सा

यह देखने के लिए कि पीडीएफ कैसे प्रबंधित किए जाते हैं, हम वेब इतिहास में थोड़ी सी जानकारी दे सकते हैं। देखें, अतीत में, ब्राउज़र को पता नहीं था कि पीडीएफ क्या है। तो वे इसे खोल नहीं सके। लेकिन हमने देखा है कि लंबे समय से पीडीएफ दर्शक एक चीज थे, ब्राउज़र में पीडीएफ खोले जा रहे थे, तो यह कैसे काम करता था?

इन दिनों सीमित एक्सटेंशन / एडॉन्स के साथ आप क्या कर सकते हैं उससे कहीं अधिक नियंत्रण के साथ ब्राउज़र कार्यक्षमता को विस्तारित करना संभव था। वे सबसे आम तौर पर के रूप में जाना जाता था प्लग-इन। इंटरनेट एक्सप्लोरर में, वे ActiveX नियंत्रण थे; मोज़िला फ़ायरफ़ॉक्स और बाद में Google क्रोम में वे एनपीएपीआई प्लगइन्स थे। ये प्लगइन्स किसी भी अन्य प्रोग्राम को करने में सक्षम थे, और अतिरिक्त रूप से एक विशिष्ट फ़ाइल प्रकार के लिए एक हैंडलर के रूप में खुद को पंजीकृत कर सकते हैं जो ब्राउज़र द्वारा अन्यथा पहचाना जा सकता है। (संयोग से, बाद में यह एक शक्तिशाली सुरक्षा जोखिम पाया गया था और इन शक्तिशाली प्लगइन के लिए समर्थन धीरे-धीरे गिरा दिया गया था ...)

प्लगइन के दिनों में, आप एडोब एक्रोबैट रीडर को इंस्टॉल और इंस्टॉल करेंगे, जो तब एक ActiveX या NPAPI प्लगइन स्थापित करेगा जो पंजीकृत करेगा application/pdf MIME प्रकार और प्लगइन का उपयोग करके उन प्रकारों को इनलाइन खोलने के लिए ब्राउज़र को बताएं।

बेशक, इन प्लगइन्स के कारण कई सुरक्षा और प्रदर्शन मुद्दों के बाद, प्रमुख ब्राउज़र विक्रेताओं ने अधिकांश प्लगइन के लिए समर्थन समाप्त करते समय अपने स्वयं के पीडीएफ दर्शकों को शामिल करने का निर्णय लिया। एकमात्र जिसे हम अभी भी देखते हैं वह एडोब शॉकवेव फ्लैश है, जो हैंडल करता है application/x-shockwave-flash

वास्तव में इसके लिए अभी भी कुछ बचे हुए नियंत्रण हैं, उदा। फ़ायरफ़ॉक्स में Preview in Firefox विकल्प अभी भी मौजूद है:

Screenshot of option

अतीत में, इस प्रकार पंजीकृत कई प्लगइन के बीच पसंद की अनुमति होगी। उदाहरण के लिए, फ्लैश के लिए पंजीकृत प्रकारों की सूची:

Screenshot of registered types

वे दिन एचटीएमएल 5 के साथ आए मीडिया समर्थन के बहुत से पहले थे। यह सिर्फ पीडीएफ नहीं था - आपके ब्राउजर को यह नहीं पता होगा कि एमपी 4 कंटेनर या एच .264 वीडियो को कैसे संभालना है, कोई विचार नहीं कि एमपी 3 फाइल कैसे खेलें, इत्यादि। आपको मीडिया प्लेयर जैसे वीएलसी द्वारा प्रदान किए गए प्लगइन दिखाई देंगे या यहां तक ​​कि विंडोज मीडिया प्लेयर, या वेबसाइट फ्लैश में निर्मित मीडिया प्लेयर को एम्बेड करेंगे।


139
2017-12-17 07:04



अवसर पर यह भी होता है जब सर्वर सेट करता है Content-Type: application/octet-stream लेकिन यह इन दिनों बहुत कम आम है। - Michael Hampton
कारण "इनलाइन" और "अनुलग्नक" मानों का उपयोग क्यों किया जाता है क्योंकि सामग्री-विस्थापन मूल रूप से MIME ईमेल के लिए निर्दिष्ट किया गया था, जहां वे मान बहुत अधिक उपयुक्त हैं :) - hobbs
@ हॉब्स: पुन: प्रयोज्य तकनीक में डोमेन-विशिष्ट शब्दावली में लगभग एक केस अध्ययन जब कुछ और सार तत्व ^ ^ ^ - Lightness Races in Orbit


मुझे एक स्पष्टीकरण मिला। एक के मुताबिक जवाब मैंने पाया, ऐसा प्रतीत होता है कि यदि एमआईएम सामग्री प्रकार सेट नहीं है तो क्रोम एक पीडीएफ डाउनलोड करेगा application/pdf बल्कि एक "गलत या सामान्य एमआईएम प्रकार", application/octet-stream

और भी, "अधिकांश वेब सर्वर डिफ़ॉल्ट का उपयोग करते हुए अज्ञात प्रकार के संसाधन भेजते हैं application/octet-stream माइम प्रकार। सुरक्षा कारणों से, अधिकांश ब्राउज़र ऐसे संसाधनों के लिए कस्टम डिफ़ॉल्ट कार्रवाई सेट करने की अनुमति नहीं देते हैं, जिससे उपयोगकर्ता इसे डिस्क पर संग्रहीत करने के लिए मजबूर कर देता है। "


23
2017-12-17 07:05



वास्तव में - यह तर्क सामग्री स्वभाव को ओवरराइड करता है और इस प्रकार याद रखना महत्वपूर्ण है। - Lightness Races in Orbit
@LightnessRacesinOrbit यह इतना नहीं है ओवरराइड स्वभाव के रूप में यह ब्राउज़र को एक प्रकार देता है जो डिस्क पर सहेजने के अलावा कुछ भी नहीं कर सकता (स्नीफिंग को छोड़कर)। अनुमोदित, दृश्य प्रभाव वही है। - Bob
@ बॉब: ठीक है हाँ यह एक उचित व्याख्या है - Lightness Races in Orbit


यह के कारण है एचटीटीपी Content-Disposition हैडर यह निर्दिष्ट करना कि फ़ाइल एक है आसक्ति। यह ब्राउज़र को सीधे इसे खोलने के बजाय फ़ाइल डाउनलोड करने के लिए निर्देश देता है।

एक क्रोम ऐड-ऑन है जो इस व्यवहार को ओवरराइड कर सकता है। निम्न छवि फ़ायरफ़ॉक्स डेवलपर टूल से है:

HTTP request as seen in the Firefox development tools


20
2017-12-17 07:05



क्या मैं पूछ सकता हूं कि एक समान फ़ायरफ़ॉक्स ऐड-ऑन भी है? - davyjones
@ डेविजोन आप कर सकते हैं। ताकि आपको यह पूछने की ज़रूरत न हो कि फ़ायरफ़ॉक्स ऐड-ऑन है या नहीं, यहाँ एक है। - wizzwizz4
वह प्लगइन अब काम नहीं कर रहा है - Paul Slocum