2008-12-17 16 views
52

मैं एक आरामदायक डिजाइन में देख रहा हूं और HTTP विधियों (POST, GET, ...) और HTTP हेडर जितना संभव हो उपयोग करना चाहता हूं। मुझे पहले ही पता चला है कि HTTP विधियों PUT और DELETE ब्राउज़र से समर्थित नहीं हैं।क्या मैं ब्राउज़र द्वारा भेजे गए HTTP अनुरोध के शीर्षलेख बदल सकता हूं?

अब मैं एक ही संसाधन के विभिन्न प्रतिनिधित्व प्राप्त करने के लिए देख रहा हूं और अनुरोध के Accept शीर्षलेख को बदलकर ऐसा करना चाहता हूं। इस Accept शीर्षलेख के आधार पर, सर्वर एक ही संसाधन पर एक अलग दृश्य प्रस्तुत कर सकता है।

समस्या यह है कि मुझे इस हेडर को बदलने के लिए अपने ब्राउज़र को बताने का कोई तरीका नहीं मिला।

<a..> टैग एक type attribute, एक माइम प्रकार हो सकता है, एक अच्छे उम्मीदवार की तरह दिखाई देता है, लेकिन (Firefox में यह network.http.accept.default कुंजी के साथ about:config में बदला जा सकता है) शीर्षक अभी भी ब्राउज़र डिफ़ॉल्ट था।

+0

मैं आपको सुनता हूं। कुछ हेडर हार्डकोड करना और आपके ब्राउज़र टैब में बस अपने कोड का परीक्षण करने के लिए यूआरएल पर जाएं। मैं क्रोम पोस्टमैन ऐप जैसे पूर्ण-अलग इंटरफ़ेस नहीं चाहता हूं। –

+0

यह एक्सटेंशन मेरे लिए काफी अच्छी तरह से काम करता है: https://chrome.google.com/webstore/detail/modify-headers-for-google/innpjfdalfhpcoinfnehdnbkglpmogdi?hl=hi-US –

उत्तर

9

मैं इसे जिस तरह से आप यह करने के लिए कोशिश कर रहे हैं में यह करने के लिए संभव है नहीं लगता।

स्वीकृत डेटा प्रारूप का संकेत आम तौर पर संसाधन नाम में एक्सटेंशन जोड़कर किया जाता है। तो, अगर आपके पास संसाधन

/resources/resource 

और GET /resources/resource की तरह अपने HTML प्रतिनिधित्व संकेत मिलता है कि आप अपने एक्सएमएल प्रतिनिधित्व के बजाय चाहते हैं देता है,, तो आपको निम्न पैटर्न का उपयोग कर सकते हैं:

/resources/resource.xml 

आप स्वीकार किए जाते हैं क्या करना है सर्वर पक्ष पर सामग्री प्रकार निर्धारण जादू, फिर।

या जेम्स सुझाव के रूप में जावास्क्रिप्ट का उपयोग करें।

+0

-1 शोन्ज़िला उत्तर – mb14

1

कुछ जावास्क्रिप्ट का उपयोग करें!

 
xmlhttp=new XMLHttpRequest(); 
xmlhttp.open('PUT',http://www.mydomain.org/documents/standards/browsers/supportlist) 
xmlhttp.send("page content goes here"); 
+0

तेज़ उत्तर के लिए धन्यवाद लेकिन सवाल इस बारे में है HTTP अनुरोध में डिफ़ॉल्ट हेडर भेजना। विशेष रूप से स्वीकार करें हेडर। – JeroenWyseur

+0

एक तरफ ध्यान दें, विनिर्देश (http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060405/#dfn-open) पुट और डिलीट के बारे में कुछ भी नहीं कहता है, संपादकीय नोट देखें। इसके अलावा, उस मामले में कोई सबमिट नहीं है जो अजेक्सिफाइड यूजर इंटरफेस अच्छा है लेकिन अन्यथा नहीं। – JeroenWyseur

35

मैं यूआरआई में अनुरोधित प्रतिनिधित्व को एम्बेड करने के मिलान के सुझाव से आंशिक रूप से असहमत हूं।

तो किसी भी तरह संभव हो, यूआरआई केवल संबोधित करते हुए संसाधनों के लिए इस्तेमाल किया जा चाहिए और नहीं सुरंग HTTP विधियों/क्रियाओं के लिए। अंत में, विशिष्ट व्यवसाय कार्रवाई (संपादित करें, ताला, आदि) यदि बनाने यूआरआई में एम्बेड किया जा सकता है (बाद का) या अद्यतन (डाल) अकेले उद्देश्य पूरा नहीं है:

 
POST http://shonzilla.com/orders/08/165;edit 

एक विशेष अनुरोध के मामले में यूआरआई में प्रतिनिधित्व आपको अपने यूआरआई डिज़ाइन को अंततः इसे कमजोर बनाने, एक ही स्थान (यानी यूआरआई) में दो अलग-अलग आरईएसटी अवधारणाओं को मिलाकर और सर्वर-साइड पर सामान्य रूप से अनुरोधों को संसाधित करने में कठिन बनाना होगा। मिलान क्या सुझाव दे रहा है और कई भी ऐसा ही कर रहे हैं। फ़्लिकर, बिल्कुल यही है।

इसके बजाय, एक अधिक RESTful दृष्टिकोण Accept HTTP हेडर जो सामग्री बातचीत के लिए प्रयोग किया जाता है जहां क्लाइंट सर्वर जो सामग्री प्रकार इसे संभाल कर सकते हैं/प्रक्रिया और सर्वर की कोशिश करता करने के लिए कहता उपयोग करके वरीय प्रतिनिधित्व एन्कोड करने के लिए एक अलग जगह का उपयोग कर होगा ग्राहक के अनुरोध को पूरा करने के लिए। यह दृष्टिकोण HTTP 1.1 standard का एक हिस्सा है, सॉफ्टवेयर अनुपालन और वेब ब्राउज़र द्वारा समर्थित है।

 
GET /orders/08/165.xml HTTP/1.1 
or 
GET /orders/08/165&format=xml HTTP/1.1 
इस के लिए

:

इसकी तुलना

 
GET /orders/08/165 HTTP/1.1 
Accept: application/xml 

एक वेब ब्राउज़र आप XMLHttpRequest वस्तु की setRequestHeader विधि का उपयोग कर किसी भी सामग्री प्रकार का अनुरोध कर सकते से। उदाहरण के लिए:

 
function getOrder(year, yearlyOrderId, contentType) { 
var client = new XMLHttpRequest(); 
client.open("GET", "/order/" + year + "/" + yearlyOrderId); 
client.setRequestHeader("Accept", contentType); 
client.send(orderDetails); 
} 

यह निष्कर्ष निकालने के लिए: पता है, यानी एक संसाधन के URI अपने प्रतिनिधित्व के स्वतंत्र होना चाहिए और XMLHttpRequest.setRequestHeader विधि आप Accept HTTP शीर्ष लेख का उपयोग कर किसी भी प्रतिनिधित्व अनुरोध करने के लिए अनुमति देता है।

चीयर्स!
Shonzilla

+3

देखें एक नुकसान यह है कि 'एक्सएमएल' संसाधन कहने के लिए सीधे (हाइपर) लिंक असंभव है। कुछ अनुप्रयोगों के लिए इसकी आवश्यकता हो सकती है। उदाहरण के लिए ओपनसीपीयू में, ग्राफिक्स को 'पीएनजी', पीडीएफ' या 'एसवीजी' प्रारूप में पुनर्प्राप्त किया जा सकता है। हालांकि, एचटीएमएल पेज में 'पीएनजी' छवि को एम्बेड करना असंभव होगा यदि पुनर्प्राप्ति के लिए' स्वीकार करें 'हेडर की आवश्यकता है। – Jeroen

+2

@ जेरोएन: यदि ब्राउज़र पीएनजी से बेहतर एसवीजी का समर्थन करता है तो उसे पीएनजी से अधिक भारित एसवीजी के साथ एक स्वीकार्य हेडर भेजना चाहिए और एसवीजी के साथ प्रतिक्रिया देना चाहिए। उन ब्राउज़रों के लिए जो एसवीजी का समर्थन नहीं करते हैं, उनके स्वीकृति हेडर में एप्लिकेशन/svg + xml नहीं होगा, इसलिए सर्वर पीएनजी वापस भेज देगा। अगर किसी कारण से आप पीएनजी संस्करण को पीडीएफ/एसवीजी संस्करण (जैसे वेक्टर-ट्रेस वाली तस्वीर) की तुलना में अधिक निष्ठा मानते हैं, तो सर्वर को पीएनजी संस्करण के लिए उच्च वजन निर्धारित करना चाहिए ताकि ब्राउजर सभी का समर्थन करने पर इसे वापस कर दिया जाए तीन समान रूप से। इस तरह सामग्री बातचीत को काम करना चाहिए। –

+0

इस प्रतिक्रिया ने मुझे लगभग आश्वस्त किया लेकिन बाद में मैंने इसी विषय पर [यह प्रतिक्रिया] (http://programmers.stackexchange.com/a/251555/216886) देखा और मैं बाद वाले लोगों से सहमत हूं। कई (या बहुमत) मामलों में प्रारूप जानकारी वास्तव में संसाधन पहचान का एक हिस्सा है और विभिन्न ग्राहकों के बीच ऐसे यूआरआई साझा करने के बाद अप्रत्याशित परिणामों से बचने के लिए यूआरआई में शामिल हो सकती है (या चाहिए)। यह इन मामलों को स्वीकार करता है हेडर को द्वितीयक भूमिका निभानी चाहिए। इन मामलों में अंतर करना महत्वपूर्ण है। –

10

मैं बिल्कुल वही बात (RESTful वेब सेवा) काम करना चाहते थे, और मैं इस फ़ायरफ़ॉक्स ऐड-ऑन, आप स्वीकार करते हैं हेडर (वास्तव में, किसी भी अनुरोध हेडर) अनुरोधों के लिए संशोधित कर सकते हैं जो पर ठोकर खाई। यह पूरी तरह से काम करता है।

https://addons.mozilla.org/en-US/firefox/addon/967/

+0

धन्यवाद, यह वही है जो मुझे चाहिए था। – lathomas64

+0

क्रिस, क्या होगा यदि एक्सटेंशन में कोई बग है, या एक्सटेंशन ब्राउज़र संस्करण के साथ काम नहीं करता है या डेवलपर्स ने एक्सटेंशन को अपडेट करना बंद कर दिया है? मैं यह सबसे अधिक होने के लिए देख रहा हूं, अगर सभी फ़ायरफ़ॉक्स एक्सटेंशन नहीं हैं जो आपको अनुरोध शीर्षलेख जोड़ने/संशोधित करने देते हैं। ऑन्स आसान हो सकते हैं और आपको उत्पादक बना सकते हैं, लेकिन एक्सटेंशन के साथ समस्या होने पर काम नहीं करेंगे। – testerjoe2

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