2012-03-12 6 views
9

मैं एक वेब एप्लिकेशन एपीआई लिख रहा हूं, जहां कोई यूआरएल एक्सेस करता है, तो यह टेक्स्ट डेटा देता है। मैंने सामग्री-प्रकार को "टेक्स्ट/सादा" पर सेट किया है, लेकिन जब मैं इसे क्रोम से एक्सेस करता हूं, तो यह उस फ़ाइल को डाउनलोड करता है जिसमें इसे प्रदर्शित करने के बजाय जानकारी होती है। जब मैं इसे IE के साथ एक्सेस करता हूं, तो यह ठीक से दिखाता है, और जब मैं फ़ायरफ़ॉक्स के साथ पहुंचता हूं, तो यह कहता है कि यह किसी एप्लिकेशन/ऑक्टेट-स्ट्रीम तक पहुंचने का प्रयास कर रहा है, और मुझसे पूछ रहा है कि क्या मैं फ़ाइल डाउनलोड करना चाहता हूं।सामग्री-प्रकार टेक्स्ट-सादा कारण फ़ाइल को डाउनलोड करने के लिए ब्राउज़र

मैं क्या TinyHTTPProxy का उपयोग कर वेब सर्वर द्वारा दिया जा रहा था दर्ज की गई है, और यह इस प्रकार है: यदि मैं सामग्री प्रकार के "एप्लिकेशन-json", तो यह सभी ब्राउज़रों पर प्रदर्शित करता है को बदलने

[2012-03-11 16:51:45.345] INFO  {TinyHTTPProxy Thread-4} HTTP/1.1 200 OK 
Content-Type: text/plain 
Transfer-Encoding: chunked 
Connection: close 
Date: Mon, 05 Mar 2012 09:49:54 GMT 
Server: localhost 


[2012-03-11 16:51:45.345] INFO  {TinyHTTPProxy Thread-4} 10b 
P,FIO,7,31.5900,0.,,0,100,0,0,30.7600,31.9600,100,1000,,,0.,16:03:14t,,0,31.5900 ,1.2,,,15,n,,,,,03/09/2012,,31.2200,,,,-0.37,-0.37,0.274456994,,,,,0,,2846732.85 ,14,4,,3989502,BSE-CSE-NYSE-PSE-NMS,,,,,0,,,0,1155872,N,,26,26,26,16:03:14,5-7-10-11-12-13-18-25-26-28-80,0 

। साथ ही, यदि मैं सामग्री-प्रकार को "टेक्स्ट/एचटीएमएल" में बदलता हूं, तो यह भी काम करता है, भले ही मैं एक HTML फ़ाइल नहीं लौटा रहा हूं।

क्या कोई स्पष्टीकरण है कि टेक्स्ट/सादा इस तरह से व्यवहार कर रहा है? मैंने यह सुनिश्चित करने के लिए जांच की है कि सभी डेटा वापस लौटाए जा रहे हैं वास्तव में ASCII है, और चूंकि मैं सामग्री-प्रकार को पाठ/सादा होने के लिए सेट कर रहा हूं, इसलिए मैं उलझन में हूं कि इसका उपयोग एप्लिकेशन/ऑक्टेट-स्ट्रीम के रूप में क्यों किया जा रहा है।

उत्तर

7

ऐसा लगता है कि आप Chrome Issue 106150 में चल रहे हैं। क्रोम स्पष्ट रूप से (कभी-कभी) सामग्री-प्रकार टेक्स्ट/सादा होने पर "स्नीफिंग" तर्क का उपयोग करने का निर्णय लेता है।

संभावित समाधानों:

  • पाठ यूनिकोड है, तो एक बीओएम शामिल हैं। यह स्नीफिंग तर्क बताएगा कि यह वास्तव में पाठ है।
  • फ़ाइल से "बाइनरी दिखने" बाइट हटाएं। बग रिपोर्ट से "0x00 और 0x1f के बीच कोई भी मान ईएससी, सीआर, एनपी, एनएल, एचटी के लिए को छोड़कर बाइनरी दिखता है।
  • ऐसा लगता है कि एक एक्सटेंशन का उपयोग करना जो स्पष्ट रूप से टेक्स्ट/सादा (जैसे .txt) होना चाहिए, वह स्नीफिंग को अक्षम कर सकता है।
+0

दिलचस्प, जानकारी के लिए धन्यवाद, मुझे एहसास नहीं हुआ कि ब्राउज़र कुछ और बुद्धिमान करने की कोशिश करने के लिए डेटा को स्नीफ करेगा। – steve8918

+0

इसके लिए धन्यवाद। मैं यह पता लगाने की कोशिश कर रहा था कि क्रोम एक यूटीएफ -8 टेक्स्ट/सादा फ़ाइल डाउनलोड करने का आग्रह कर रहा था, और यह पता चला कि इसमें 0x02 के दो उदाहरण थे। – dgw

+0

क्रोम बाइनरी दिखने वाले बाइट्स के लिए केवल पहले एक्स बाइट्स (संभवतः 1 केबी) को स्नीफ करेगा, जो इसे अप्रत्याशित होने का कारण बन सकता है - कभी-कभी मुझे पहले 1 केबी में बाइनरी दिखने वाले बाइट्स होते थे और कभी-कभी मैंने कुछ अन्वेषणकारी print_r कॉल करते समय नहीं किया। वर्तमान दिन समाधान के लिए @ trinth का उत्तर देखें। – thomasrutter

6

लॉरेंस की व्याख्या सही है। इस पोस्ट के समय केवल आईई और क्रोम माइम स्नीफिंग कर रहा है। अब आप केवल HTTP शीर्षलेख X-Content-Type-Options: nosniff सेट कर सकते हैं और यह चाल करेगा!

संबंधित मुद्दे

 संबंधित मुद्दे