क्या मुझे फ़ाइल डाउनलोड के लिए सामग्री-प्रकार: एप्लिकेशन / ऑक्टेट-स्ट्रीम की आवश्यकता है?


414

HTTP मानक का कहना है:

यदि यह शीर्ष लेख [सामग्री-विवाद: संलग्नक] का उपयोग अनुप्रयोग / ऑक्टेट-स्ट्रीम सामग्री-प्रकार के साथ प्रतिक्रिया में किया जाता है, तो निहित सुझाव यह है कि उपयोगकर्ता एजेंट को प्रतिक्रिया प्रदर्शित नहीं करना चाहिए, लेकिन सीधे एक `के रूप में प्रतिक्रिया सहेजें .. । ’संवाद।

मैंने वह पढ़ा

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

लेकिन मैंने सोचा था कि होता Content-Typeहोगा application/pdf, image/pngआदि

Content-Type: application/octet-streamयदि मुझे ब्राउज़र डाउनलोड करने के लिए चाहिए तो क्या मुझे होना चाहिए ?

जवाबों:


959

नहीं।

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

आप Content-Dispositionअन्य सामग्री-प्रकारों के उपयोग को जोड़ सकते हैं , जैसे कि image/pngया यहां तक ​​कि text/htmlयह इंगित करने के लिए कि आप प्रदर्शन के बजाय बचत करना चाहते हैं। यह मामला हुआ करता था कि कुछ ब्राउज़रों के मामले में इसे अनदेखा कर देंगेtext/html लेकिन मुझे लगता है कि यह इस बिंदु पर कुछ समय पहले था (और मैं जल्द ही बिस्तर पर जाऊंगा, इसलिए मैं एक पूरे समूह का परीक्षण शुरू नहीं करने जा रहा हूँ ब्राउज़र अभी; शायद बाद में)।

RFC 2616 में एक्सटेंशन टोकन की संभावना का भी उल्लेख किया गया है, और इन दिनों अधिकांश ब्राउज़र inlineका अर्थ है कि आप चाहते हैं कि यदि संभव हो तो इकाई प्रदर्शित की जाए (यदि यह एक प्रकार का ब्राउज़र है जो प्रदर्शित करना जानता है, अन्यथा इसे मामले में कोई विकल्प नहीं मिला है) । यह निश्चित रूप से वैसे भी डिफ़ॉल्ट व्यवहार है, लेकिन इसका मतलब है कि आप filenameहेडर के हिस्से को शामिल कर सकते हैं , जो ब्राउज़र का उपयोग करेगा (शायद कुछ समायोजन के साथ, फ़ाइल-एक्सटेंशन प्रश्न में सामग्री-प्रकार के लिए स्थानीय सिस्टम मानदंडों से मेल खाते हैं, शायद नहीं) सुझाव के रूप में अगर उपयोगकर्ता को बचाने की कोशिश करता है।

इसलिये:

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

इसका अर्थ है "मुझे नहीं पता कि यह क्या है। कृपया इसे एक फ़ाइल के रूप में सहेजें, अधिमानतः चित्र। png"।

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

इसका अर्थ है "यह एक PNG छवि है। कृपया इसे फ़ाइल के रूप में सहेजें, अधिमानतः नाम चित्र। png"।

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

इसका मतलब है "यह एक PNG छवि है। कृपया इसे तब तक प्रदर्शित करें जब तक कि आप PNG छवियों को प्रदर्शित करने का तरीका नहीं जानते। अन्यथा, या यदि उपयोगकर्ता इसे बचाने का विकल्प चुनता है, तो हम आपको उस फ़ाइल के लिए नाम चित्र की अनुशंसा करते हैं, जिसे आप इसे सहेजते हैं।"

उन ब्राउज़रों में से जो inlineकुछ को पहचानते हैं, वे हमेशा इसका उपयोग करते हैं, जबकि अन्य इसका उपयोग करेंगे यदि उपयोगकर्ता ने "लिंक के रूप में सहेजें" का चयन किया था, लेकिन यह देखने के लिए कि क्या वे "सहेजना" नहीं चुनते थे (या कम से कम IE ऐसा ही हुआ करता था, यह कुछ साल पहले बदल सकता है)।


30
यह एक महान जवाब था, और यह वास्तव में अच्छा होगा यदि चीजें इस तरह से काम करती हैं। लेकिन दुर्भाग्य से सभी ब्राउज़र अधिकतर टूट जाते हैं। उदाहरण के लिए, Google Chrome "सामग्री-विवाद: अनुलग्नक", भले ही "एप्लिकेशन / ऑक्टेट-स्ट्रीम" सामग्री-प्रकार के साथ शामिल न हो, आपके लिए "फ़ाइल सहेजें" विंडो नहीं खोलेगा। । और फिर उन्होंने एक संदेश छापते हुए कहा कि आप पर हमला हो सकता है ... इसका कोई तरीका नहीं है कि मुझे एक फ़ाइल को बचाने दें। यदि आप किसी फ़ाइल को सहेजना चाहते हैं तो भी आपको xdg-open को कॉन्फ़िगर करना होगा। मैं इससे थक चुका हूँ।
dividebyzero

1
@dividebyzero ऐसी समस्या नहीं है जो मैंने कभी क्रोम के साथ की है। क्या आप जो कर रहे हैं उसमें कुछ और असामान्य है?
जॉन हैना

1
एक फ़ाइल को डिफ़ॉल्ट रूप से अपलोड करना गलत होगा और शायद इसका परिणाम कुछ अटैक डिटेक्शन हो सकता है, बजाय इसके कि फ़ाइल सामग्री को उपलब्ध कराने के लिए गिरना।
जॉन हैना

7
@ अगर ग्राहक इसे सहेजना चाहता है, तो इससे कोई फर्क नहीं पड़ता कि हेडर क्या भेजे गए हैं (आप अपने ब्राउज़र में किसी भी चीज़ पर "सेव" या "लिंक को सेव कर सकते हैं"), जैसा कि हेडर जानकारी है, नियम नहीं तो ऐसा नहीं attachmentहो सकता है माना जाता है "सबसे अच्छा यह प्रदर्शित करने के लिए नहीं" के inlineरूप में "सबसे अच्छा यह अपने आप को प्रदर्शित करने के लिए यदि आप कर सकते हैं"। किसी भी तरह से, अधिकांश ब्राउज़र फ़ाइल के सुझाए गए नाम के रूप में फ़ाइल नाम का उपयोग करेंगे, लेकिन उपयोगकर्ता हमेशा इसे ओवरराइड कर सकते हैं।
जॉन हैना

1
@Tresdin धन्यवाद मैं थोड़ा गैर-विवादास्पद हूं कि यह इतना लोकप्रिय है, मेरे कुछ अन्य लोगों के सापेक्ष मैं बेहतर मानता हूं, लेकिन मुझे लगता है कि यह लोगों के मुद्दों का जवाब देने के मौके पर पहुंच गया होगा।
जॉन हैना
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.