2011-11-17 14 views
5

मैं http-header "सर्वर:" गतिशील रूप से (प्रतिक्रिया का निर्माण करते समय) को बदलना चाहता हूं। मैंने कोशिश की: -yaws में एक विशिष्ट शीर्षलेख को बदलना

[{status, 200}, 
{allheaders, 
     [{header, 
      ["Server: ","ASP.NET Development Server/10.0.0.0"] 
     }] 
}, 
{html,Body} 
] 

यह दो"सर्वर:" लौटे हेडर के बजाय एक। लेकिन यह सभी अन्य शीर्षकों के लिए काम किया।

उत्तर

3

याज के पुराने संस्करणों के लिए (याज-1.90 और नीचे) नीचे इस सवाल का जवाब


काम करता है अब, डिफ़ॉल्ट रूप से, किसी भी शीर्ष लेख [{header,"Server: MyOther Server Name"}] के रूप में निर्दिष्ट, याज लागू करने और अपने सर्वर हेडर मूल्य से पहले उसका नाम और संस्करण टैग करेगा, जैसे यह: Server: Yaws 1.91, MyOther Server Name। यह तब होता है जब आपके out/1 समारोह में आप एक हैडर मूल्य, इस तरह सर्वर के साथ समाप्त:

 
out(_A)->
[{header,"Server: ASP.NET Server"},
{html,"<p>I love klacke and yaws ! </p>"}].

आपके ब्राउज़र जाँच हो रही है, का उपयोग कर Firebug आपके द्वारा निर्दिष्ट प्रतिक्रिया हेडर दिखाई इस प्रकार है:

 

Date   Thu, 17 Nov 2011 07:59:17 GMT 
Content-Length 22 
Content-Type text/html 
Server   Yaws 1.91, ASP.NET Server 

अब समाधान:

yaws src में, yaws.erl नामक एक मॉड्यूल है। इस मॉड्यूल में, रेखा के आसपास की जाँच करें: 1332, तो आप इस तरह एक समारोह मिलेगा:

 
make_server_header() -> 
    HasDav = ?sc_has_dav(get(sc)), 
    ["Server: ", (get(gc))#gconf.yaws, "\r\n" | 
    if HasDav == true -> 
      ["DAV: 1\r\n"]; 
     true -> 
      [] 
    end]. 

इस कोड का टुकड़ा है कि आपके सर्वर हेडर निर्धारित मूल्य के शीर्ष पर याज संस्करण और सर्वर नाम जोड़ देती है। हम इसे बदल सकते हैं और लाइनों बाहर टिप्पणी और यह एक empty list [ ] या empty string "" लौट इस तरह देखने के लिए जाने की जरूरत है:

 
make_server_header() -> 
    %%HasDav = ?sc_has_dav(get(sc)), 
    %%["Server: ", (get(gc))#gconf.yaws, "\r\n" | 
    %% if HasDav == true -> 
    %%   ["DAV: 1\r\n"]; 
    %% true -> 
    %%   [] 
    %% end]. 
    []. %% force it to just return empty 

अंतिम चरण
अब हम इस मॉड्यूल को फिर से संकलन और मौजूदा याज प्रतिस्थापित करने की आवश्यकता YAWS-{VSN}/ebin में .beam फ़ाइल नई परिणामी .beam फ़ाइल के साथ हम इस नए स्रोत को संकलित करने के बाद प्राप्त करते हैं। फिर इसे वीएम में पुनः लोड करें। मुझे उम्मीद है कि आप इस अंतिम चरण में अपना रास्ता खोज सकते हैं। इस बंद खींच करने का एक तरीका तो erlang खोल

 
1> cd("PATH/TO/YAWS/src"). 
PATH/TO/YAWS/src 
चल अपने याज की वर्तमान कार्यशील निर्देशिका बदलकर है, इस पर अमल (अब भी में याज शेल) yaws.erl के स्रोत को बदलने के रूप में हम
 
2> c(yaws). 
{ok,yaws} 

ऊपर उल्लेख किया है के बाद

अब उत्पन्न yaws.beam फ़ाइल को src से ebin तक ले जाएं। ओवरराइट करें/src से

 
$ mv PATH/TO/YAWS/src/yaws.beam PATH/TO/YAWS/ebin/ 
तो एक साथ Ebin में मौजूदा yaws.beam फ़ाइल को बदलने, अगर याज चल रहा है, इसके खोल में दर्ज करके उस कोड को फिर से लोड:

 
3> l(yaws). 


याज के नए संस्करण के लिए (याज -1.91 और ऊपर)


वहाँ एक पैरामीटर आप बस अपने yaws.conf फाइल करने के लिए जोड़ देगा

server_signature = "MY SERVER SIGNATURE"

और इसलिए हेडर के साथ आ जाएगा है Server: MY SERVER SIGNATURE

+1

धन्यवाद, लेकिन मुझे अपना खुद का ** "सर्वर:" ** हेडर जोड़ना होगा जब मुझे – user1051086

+0

ओएच हाँ नहीं लगता है, तो इसकी लागत है। लेकिन अच्छी तरह से, आप सभी कोड को टिप्पणी करने के बजाय हमेशा इच्छित हेडर डालने के लिए 'yaws.erl' में फ़ंक्शन में कोई भी पुनः समायोजन कर सकते हैं। असल में फ़ंक्शन से '[]' लौटने की बजाय, इसे अपने हेडर को वापस करने दें ताकि आपको इसे हर समय अपने कोड में रखने की आवश्यकता न हो –

2

मई 2011 में जारी किए गए यास के संस्करण 1.90 के अनुसार, आप Server HTTP प्रतिक्रिया शीर्षलेख को अनुकूलित करने के लिए वैश्विक कॉन्फ़िगरेशन चर server_signature सेट कर सकते हैं।हम इस लेखन के अनुसार, server_signature प्रति-वर्चुअल-सर्वर आधार पर ओवरराइड करने की प्रक्रिया में भी हैं, इसलिए यदि आप चाहें तो विभिन्न वर्चुअल सर्वर से अलग Server शीर्षलेखों की सेवा कर सकते हैं। यह परिवर्तन 0 फरवरी 2012 की शुरुआत में yaws github repo में जोड़ा जाएगा और बाद में जब भी हम इसे जारी करने का निर्णय लेते हैं, तब Yaws 1.93 में दिखाई देंगे।

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