2008-12-09 8 views
16

हाल ही में, मेरे कुछ नए वेब पेज (एक्सएचटीएमएल 1.1) अनुरोध हेडर Accept के रेगेक्स करने के लिए सेट हैं और सही HTTP प्रतिक्रिया शीर्षलेख भेजें यदि उपयोगकर्ता एजेंट एक्सएमएल (फ़ायरफ़ॉक्स और सफारी करता है) स्वीकार करता है।सामग्री के साथ पृष्ठों की सेवा करने से संबंधित समस्याएं क्या हैं: एप्लिकेशन/xhtml + xml

आईई (या कोई अन्य ब्राउज़र जो इसे स्वीकार नहीं करता है) केवल सादे text/html सामग्री प्रकार प्राप्त करेगा।

क्या Google बॉट (या कोई अन्य खोज बॉट) इस के साथ कोई समस्या होगी? क्या मेरे दृष्टिकोण पर कोई नकारात्मकता है जिस पर मैंने देखा है? क्या आपको लगता है कि इस हेडर स्निफ़र का प्रदर्शन पर अधिक असर होगा?

उत्तर

5

मैं application/xhtml+xml और text/html के बीच स्विच करने के लिए सामग्री बातचीत का उपयोग करता हूं जैसा कि आप खोज बॉट के साथ किसी भी समस्या को ध्यान में रखते हुए बताते हैं। कड़ाई से हालांकि, आपको स्वीकार करने वाले शीर्षलेख में q मानों को ध्यान में रखना चाहिए जो प्रत्येक सामग्री प्रकार के लिए उपयोगकर्ता एजेंट की प्राथमिकता को इंगित करता है। यदि कोई उपयोगकर्ता एजेंट text/html स्वीकार करना पसंद करता है लेकिन वैकल्पिक रूप से application/xhtml+xml स्वीकार करेगा, तो सबसे बड़ी सुरक्षा के लिए आपको पृष्ठ text/html के रूप में कार्य करना चाहिए।

6

एकमात्र असली समस्या यह है कि यदि ब्राउज़र में अमान्य कोड होता है, तो ब्राउज़र में XML/सीडीएल त्रुटियों को प्रदर्शित किया जाएगा, जबकि टेक्स्ट/एचटीएमएल में वे कम से कम कुछ देखने योग्य प्रदर्शित करेंगे।

एक्सएमएल भेजने का वास्तव में कोई लाभ नहीं है जब तक कि आप svg को एम्बेड नहीं करना चाहते हैं या पृष्ठ की एक्सएमएल प्रोसेसिंग कर रहे हैं।

+0

कोई पूछ सकता है, यदि आप अपने वेब पृष्ठों को एक्सएचटीएमएल के रूप में सेवा करने के लिए (उम्मीदवार) सचेत निर्णय ले रहे हैं, तो आप यह सुनिश्चित करने के प्रयास क्यों नहीं कर रहे हैं कि आपके वेब पेज एक्सएचटीएमएल-वैध हैं? (एक्सएमएल/एक्सएचटीएमएल संपादकों और सत्यापनकर्ताओं का उपयोग इसे पूरा करने के लिए मूल्यवान उपकरण हैं।) – DavidRR

12

सामग्री वार्ता के साथ एक समस्या (और अलग-अलग सामग्री/शीर्षकों को विभिन्न उपयोगकर्ता-एजेंटों की सेवा करने के साथ) प्रॉक्सी सर्वर है। निम्नलिखित को ध्यान में रखते हुए; मैं इस समय नेटस्केप में 4 दिनों में भाग गया और तब से सर्वर की तरफ से शर्मिंदा रहा हूं।

उपयोगकर्ता ए फ़ायरफ़ॉक्स के साथ आपका पृष्ठ डाउनलोड करता है, और एक एक्सएचटीएमएल/एक्सएमएल सामग्री-प्रकार प्राप्त करता है। उपयोगकर्ता के आईएसपी में उपयोगकर्ता और आपकी साइट के बीच एक प्रॉक्सी सर्वर है, इसलिए यह पृष्ठ अब कैश किया गया है।

उपयोगकर्ता बी, एक ही आईएसपी, इंटरनेट एक्सप्लोरर का उपयोग करके आपके पृष्ठ का अनुरोध करता है। अनुरोध प्रॉक्सी को पहले हिट करता है, प्रॉक्सी कहता है "अरे, मेरे पास वह पृष्ठ है, यहां यह है; एप्लिकेशन/xhtml + xml"। उपयोगकर्ता B आईई आवेदन/xhtml + xml के रूप में भेजा कुछ भी डाउनलोड के रूप में फ़ाइल डाउनलोड करने के लिए (कहा जाता है।

आप Vary Header का उपयोग करके इस विशेष समस्या के समाधान प्राप्त कर सकते हैं, इस 456 Berea Street लेख में वर्णित है। मैं यह भी है कि प्रॉक्सी मान सर्वर इन चीजों का पता लगाने के बारे में थोड़ा अधिक समझदार हो गया है।

यहां CF that is HTML/XHTML रेंगने लगते हैं। जब आप उपयोगकर्ता/एजेंटों के एक सेट में एप्लिकेशन/xhtml + xml की सेवा करने के लिए सामग्री बातचीत का उपयोग करते हैं, और टेक्स्ट/एचटीएमएल उपयोगकर्ता एजेंटों का एक और सेट, आप अपने सर्वर और आपके उपयोगकर्ताओं के बीच अच्छी तरह से व्यवहार करने के लिए सभी प्रॉक्सी पर भरोसा कर रहे हैं।

यहां तक ​​कि यदि दुनिया के सभी प्रॉक्सी सर्वर वेरी हेडर को पहचानने के लिए पर्याप्त स्मार्ट थे (वे नहीं हैं) तो आपको अभी भी दुनिया के कंप्यूटर जेनिटर के साथ संघर्ष करना होगा। दुनिया में बहुत सारे स्मार्ट, प्रतिभाशाली और समर्पित आईटी पेशेवर हैं। ऐसे बहुत से स्मार्ट लोग नहीं हैं जो अपने दिन दो बार इंस्टॉलर एप्लिकेशन पर क्लिक करते हैं और सोचते हैं कि "इंटरनेट" उनके मेनू में नीला ई है। एक गलत कॉन्फ़िगर प्रॉक्सी अभी भी अनुचित रूप से पृष्ठों और शीर्षकों को कैश कर सकती है, जिससे आप भाग्य से बाहर निकल सकते हैं।

+0

दिलचस्प एलन। मैं इस पर विचार करूंगा। शायद मैं सिर्फ 'एम टैग सूप भेज दूंगा। – alex

+0

इसके अलावा 'वेरी:' हेडर सभी प्रमुख ब्राउज़रों में संसाधन की कैशिंग अक्षम करता है (वे एकाधिक संस्करणों के कैशिंग का समर्थन नहीं करते हैं, इसलिए वे इसे सुरक्षित खेलते हैं और किसी भी संस्करण को कैश नहीं करते हैं)। – Kornel

2

समस्या यह है कि आपको HTML और XHTML दोनों के सबसेट में अपने मार्कअप को सीमित करने की आवश्यकता है।

  • आप, एक्सएचटीएमएल विशेषताएं (नामस्थान, सभी तत्वों पर स्वतः बंद होने वाले वाक्य रचना) का उपयोग नहीं कर सकते हैं क्योंकि वे HTML में टूट जाएगा (जैसे <script/>text/html पार्सर के लिए खुली हुई है और अगले </script> अप करने के लिए दस्तावेज़ मार डालेगा)।
  • आप, एक्सएमएल serializer उपयोग नहीं कर सकते क्योंकि यह text/html मोड को तोड़ सकते थे (उपयोग कर सकते हैं, XML- केवल पिछले बिंदु में वर्णित सुविधाओं, टैगनाम उपसर्गों (PHP डोम कभी कभी <default:h1> करता है) जोड़ सकते हैं। <script> HTML में CDATA, लेकिन एक्सएमएल serializer है आउटपुट <script>if (a &amp;&amp; b)</script>) हो सकता है।
  • आप एचटीएमएल के कॉम्पैक्ट सिंटैक्स (निहित टैग, वैकल्पिक उद्धरण) का उपयोग नहीं कर सकते हैं, क्योंकि यह एक्सएमएल के रूप में पार्स नहीं करेगा।
  • यह (सबसे टेम्पलेट इंजन सहित) उपयोग एचटीएमएल उपकरणों का उपयोग करने के कारण वे के बारे में अच्छे प्रकार से निर्मित (एक भी नहीं छोड़ा जाएगा &href या <br> में परवाह नहीं है पूरी तरह से एक्सएमएल टूट जाएगा, और अपनी साइट काम करने के लिए प्रकट कर जोखिम भरा है केवल आईई में!)

मैंने अपनी एक्सएमएल-केवल वेबसाइट की अनुक्रमणिका का परीक्षण किया है। यह अनुक्रमणित किया गया है भले ही मैंने application/xml एमआईएमई प्रकार का उपयोग किया है, लेकिन इसे एचटीएमएल के रूप में पार्स किया गया है (Google ने इंडेक्स टेक्स्ट नहीं दिया जो <[CDATA[ ]]> खंडों में था)।

+0

एक्सएमएल सीरियलाइजेशन टेक्स्ट एचटीएमएल मोड कैसे तोड़ देगा? मुझे लगता है कि आप इनपुट के बजाय आउटपुट का जिक्र कर रहे हैं? – Casebash

1

चूंकि IE xhtml को एप्लिकेशन/xhtml + xml के रूप में समर्थन नहीं देता है, इसलिए क्रॉस ब्राउज़र समर्थन प्राप्त करने का एकमात्र तरीका सामग्री वार्ता का उपयोग करना है। Web Devout के अनुसार, वाइल्डकार्ड के दुरुपयोग के कारण सामग्री वार्ता कठिन है जहां वेब ब्राउज़र अस्तित्व में हर प्रकार की सामग्री का समर्थन करने का दावा करते हैं! सफारी और कोन्कर xhtml का समर्थन करते हैं, लेकिन केवल वाइल्डकार्ड द्वारा यह समर्थन दर्शाते हैं, जबकि आईई इसका समर्थन नहीं करता है, फिर भी इसका समर्थन भी है।

HTTP स्वीकृति शीर्षलेख में डब्ल्यू 3 सी recommends only sending xhtml to browsers that specifically declare support और उन ब्राउज़रों को अनदेखा करना जो विशेष रूप से समर्थन घोषित नहीं करते हैं। ध्यान दें, हालांकि, हेडर हमेशा विश्वसनीय नहीं होते हैं और यह कैशिंग के साथ मुद्दों का कारण बनता है। भले ही आप यह काम कर सकें, दो समान बनाए रखने के लिए, लेकिन विभिन्न संस्करणों में दर्द होगा।

इन सभी मुद्दों को देखते हुए, मैं xhtml को मिस देने के पक्ष में हूं, जब आपके उपकरण और पुस्तकालय आपको निश्चित रूप से देते हैं।

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