अज्ञात फ़ाइल प्रकार MIME?


140

यदि अपलोड की गई फ़ाइल में कोई एक्सटेंशन नहीं है, तो क्या मुझे MIME प्रकार निर्दिष्ट करना होगा? दूसरे शब्दों में एक डिफ़ॉल्ट सामान्य MIME प्रकार है?

जवाबों:


184

आप application/octet-streamअज्ञात प्रकारों के लिए उपयोग कर सकते हैं ।

RFC 2046 राज्यों में धारा 4.5.1:

"ऑक्टेट-स्ट्रीम" उपप्रकार का उपयोग यह इंगित करने के लिए किया जाता है कि किसी बॉडी में मनमाना बाइनरी डेटा है।


3
दरअसल, RFC के अनुसार आपको अज्ञात डेटा के साथ किसी भी प्रकार की जानकारी नहीं भेजनी चाहिए। RFC-2046 केवल ज्ञात प्रकारों को परिभाषित करता है लेकिन RFC-7231 आपको बताता है कि अज्ञात प्रकारों को कैसे संभालना है।
संपो सरला - codidact.org

@SampoSarrala I ने RFC-7231 को थोड़ा अलग तरीके से पढ़ा: "यदि कोई सामग्री-प्रकार का हेडर फ़ील्ड मौजूद नहीं है, तो प्राप्तकर्ता MAY" एप्लिकेशन / ऑक्टेट-स्ट्रीम "([RFC2046, धारा 4.5.1) के मीडिया प्रकार को मान सकता है" इसके प्रकार को निर्धारित करने के लिए डेटा की जांच करें। " मैं व्याख्या करता हूं कि जैसा कि हमें या तो कोई सामग्री-प्रकार भेजना चाहिए या हम एक डिफ़ॉल्ट के रूप में एप्लिकेशन / ऑक्टेट-स्ट्रीम भेजने के लिए सुरक्षित हैं यदि हम नहीं चाहते हैं कि ग्राहक सामग्री परीक्षा के साथ अनुमान लगाने का खेल खेल रहे हैं।
जेपन

1
@ जेपीएन हां, यह सही है। जब भी अज्ञात हो तब सामग्री-प्रकार हेडर मौजूद नहीं होना चाहिए। कोई एप्लिकेशन / ऑक्टेट-स्ट्रीम भी भेज सकता है जो मूल रूप से क्लाइंट को बताता है कि " आप इसे अभी प्रदर्शित नहीं करना चाहते हैं, लेकिन आगे बढ़ें और इन बाइट्स को फाइल करने के लिए सहेजें "। यह वेब क्लाइंट को सेविंग फाइल ऑफर करता है। विकल्प 1 == इस फ़ाइल के बारे में कुछ भी नहीं जानते। विकल्प 2 == फ़ाइल सामग्री को माइम का उपयोग करके वर्णित नहीं किया जा सकता है या इसे केवल डिस्क पर सहेजा जाना चाहिए। व्यवहार में या तो विकल्प सही होगा। भ्रम से बचने के लिए मुझे बेहतर शब्दांकन चुनना चाहिए था।
सम्पो सरला - codidact.org

4
"मनमाना बाइनरी डेटा" "अज्ञात" नहीं है। एप्लिकेशन / ऑक्टेट-स्ट्रीम का उपयोग करके आप ब्राउज़र को बताते हैं कि सामग्री प्रकार ज्ञात है, पाठ नहीं है और न ही एक छवि है लेकिन मनमाना बाइनरी डेटा है और परिणामस्वरूप फ़ाइल और संभवतः निष्पादित किया जाना चाहिए। गलत होने के शीर्ष पर, यह एक सुरक्षा छेद है, विशेष रूप से मुश्किल से दिखाई देने वाले आधुनिक डाउनलोड प्रबंधकों को देखते हुए। सही उत्तर सामग्री-प्रकार हेडर नहीं है। यदि आप नहीं जानते कि यह किस प्रकार की फ़ाइल है, तो ब्राउज़र को यह पता चल सकता है ताकि यह अनुमान लगा सके, खासकर जब इसे उपयोग के संदर्भ में पता हो (छवि, दस्तावेज़, स्क्रिप्ट, ...)
FF_Dev

@FF_Dev मुझे यकीन है कि यह बकवास है। "मनमाना द्विआधारी डेटा" का अर्थ "निष्पादन योग्य" नहीं है; कोई कारण नहीं है कि एक ब्राउज़र (या डाउनलोड प्रबंधक) को मान लेना चाहिए कि कोई application/octet-streamफ़ाइल निष्पादन योग्य है। और अगर एक ब्राउज़र है जानबूझकर एक निष्पादन योग्य फ़ाइल डाउनलोड करने, यह उपयोगकर्ता के लिए पूछे बिना "संभवतः निष्पादित" नहीं है कि यह; केवल एक निष्पादन योग्य डाउनलोड करने का अर्थ यह नहीं है कि मैं इसे अभी निष्पादित करना चाहता हूं। अगर वास्तव में एक ब्राउज़र है जो application/octet-streamडाउनलोड पर फ़ाइलों को स्वचालित रूप से निष्पादित कर सकता है , तो हमें बताएं कि कौन सा, और व्यवहार को कैसे पुन: पेश करें। अभी मुझे आप पर विश्वास नहीं है।
मार्क अमेरी

38

RFC संसाधन:

हमें RFC-2046 (मीडिया प्रकार) के बजाय संदर्भ के रूप में RFC-7231 (HTTP / 1.1 शब्दार्थ और सामग्री) का उपयोग करना चाहिए क्योंकि प्रश्न स्पष्ट रूप से HTTP सामग्री-प्रकार के बारे में था।

इसके अलावा RFC-2046 स्पष्ट रूप से अज्ञात प्रकारों को परिभाषित नहीं करता है लेकिन RFC-7231 करता है।

संक्षिप्त जवाब:

अज्ञात डेटा के लिए MIME प्रकार न भेजें।
अधिक स्पष्ट होने के लिए: सामग्री-प्रकार हेडर का उपयोग बिल्कुल न करें।

संदर्भ:

RFC-7231
हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल (HTTP / 1.1): शब्दार्थ और सामग्री
3.1.1.5। सामग्री प्रकार

एक प्रेषक जो एक संदेश देता है जिसमें एक पेलोड बॉडी होती है SHOULD
उस संदेश में एक कंटेंट-टाइप हेडर फ़ील्ड जनरेट करता है जब तक कि
इच्छित मीडिया प्रकार का संलग्न प्रतिनिधित्व
प्रेषक के लिए अज्ञात न हो ।

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

फिर क्या अलग है?

आरएफसी -2046
4.5.1। ऑक्टेट-स्ट्रीम सबटाइप

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

और, जैसा कि पहले ही ऊपर कहा जा चुका है:

RFC-7231
3.1.1.5। सामग्री प्रकार

यदि कोई सामग्री-प्रकार हेडर फ़ील्ड मौजूद नहीं है, तो प्राप्तकर्ता MAY या तो एक मीडिया प्रकार का "एप्लिकेशन / ऑक्टेट-स्ट्रीम"
([RFC2046], धारा 4.5.1) मान सकता है या उसके प्रकार को निर्धारित करने के लिए डेटा की जांच कर सकता है।

निष्कर्ष:

यदि आप इसे "एप्लिकेशन / ऑक्टेट-स्ट्रीम" के रूप में परिभाषित करते हैं तो आप बता रहे हैं कि आप जानते हैं कि यह "एप्लिकेशन / ऑक्टेट-स्ट्रीम" है।

यदि आप इसे परिभाषित नहीं करते हैं, तो आप बता रहे हैं कि आपको नहीं पता कि यह क्या है और रिसीवर और रिसीवर को निर्णय छोड़ दें और फिर जांच कर सकता है कि क्या यह बतख की तरह चलता है और ...


1
यह उत्तर सत्य के योग्य है क्योंकि यह सत्य में ही है। इसके अतिरिक्त डिफ़ॉल्ट रूप से "एप्लिकेशन / ऑक्टेट-स्ट्रीम" का उपयोग करके अधिकांश ब्राउज़र ट्रिगर डाउनलोड करें जो एक सुरक्षा छेद है जो लगभग अदृश्य आधुनिक डाउनलोड प्रबंधकों पर विचार कर रहा है।
FF_Dev

1
यह HTTP के लिए सही है, लेकिन सवाल MIME के ​​बारे में सामान्य है, HTTP के बारे में नहीं। ईमेल में, उदाहरण के लिए, नियम पूरी तरह से अलग हैं। प्रस्तावित डुप्लिकेट stackoverflow.com/questions/12539058/…
ट्रिपल'

मैंने उसी कारण के लिए एक uptick दिया, हालांकि मैं FF_Dev से सहमत हूं। जब तक इरादा "एप्लिकेशन / ऑक्टेट-स्ट्रीम" न हो और डाउनलोड को ट्रिगर करने के लिए "एप्लिकेशन / अज्ञात" की आवश्यकता हो। यह अच्छा होगा यदि "कंटेंट-डिस्पोज़" सेट नहीं किया गया, तो ब्राउज़र फ़ाइल को डाउनलोड करने की कोशिश नहीं करेंगे, लेकिन उपयोग करने के लिए उनके फ़ाइल नाम को सेट किए बिना बहुत से वेब साइटें बेतरतीब ढंग से फ़ाइलों को डाउनलोड कर रही हैं। खासतौर पर बैंक।
justdan23

14

मैं पसंद करता हूं application/unknown, लेकिन परिणाम निश्चित रूप से वैसा ही होगाapplication/octet-stream


17
क्या कोई मानक है जो एप्लिकेशन / ऑक्टेट-स्ट्रीम के बजाय एप्लिकेशन / अज्ञात का उपयोग करने की अनुमति देता है?
हेंड्रिक ब्रम्मनमैन

3
धन्यवाद! आवेदन / अज्ञात महान काम कर रहा है, ऑक्टेट-स्ट्रीम मेरे सैंपल पीएनजी-फाइल में क्रोम में त्रुटि देता है!
fnkr

10
क्यों .png फ़ाइल के रूप में सेवा करें application/octet-streamया application/unknown? वहाँ एक कारण है कि वे का आविष्कार किया है image/png
ऐड़ीकापी २४'१४

10
@ जेनसन-बटन-ईवेंट का पहिया को फिर से मजबूत करने से कोई लेना-देना नहीं है। MIME प्रकार आपके इरादे को निर्दिष्ट करता है। यदि आप जानते हैं कि जो आप भेज रहे हैं वह एक png छवि माना जाता है, तो उस जानकारी को पास करें। यदि बाइट गलती से एक jpeg का प्रतिनिधित्व करते हैं, तो आपका आवेदन आपको चेतावनी दे सकता है कि यह एक मान्य png नहीं है, और आपके पास एक बग है। इसके अलावा, सभी एप्लिकेशन एक ब्राउज़र के रूप में मजबूत और दोष-सहिष्णु नहीं होते हैं। वे प्रोग्रामर की गलतियों को ठीक करने के लिए डिज़ाइन किए गए हैं, लेकिन यह कहीं भी नहीं है यह केवल उद्देश्य है। MIME प्रकारों का उपयोग करके एक ब्राउज़र एकमात्र अनुप्रयोग नहीं है।
एदिअकपी

2
आपका संदर्भ क्या है? अज्ञात प्रकार फ़ाइल की सामग्री या स्थिति के बारे में किसी भी जानकारी का योगदान नहीं कर रहा है, या भले ही यह द्विआधारी या पाठ आधारित है, यह उत्पादन कोड के लिए बहुत अस्पष्ट है, एक छोटी परियोजना के लिए ठीक हो सकता है, क्योंकि अगर फ़ाइल मेंमाइटप नहीं है ओएस में हैंडलर, यह अनिवार्य रूप से एक डाउनलोड करने योग्य बाइनरी है- और अज्ञात प्रकार विंडोज़ ओएस में एक ज्ञात हैंडल है, जिसे आप एक कार्रवाई निर्दिष्ट कर सकते हैं (उदाहरण के लिए नोटपैड के साथ अज्ञात फ़ाइलों को खोलना)। बुरा व्यवहार आप अज्ञात प्रकार के साथ संयुक्त उपयोग कर सकते हैं हालांकि इस /: किसी भी क्रियान्वित करने को छोड़ने के लिए
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.