2011-11-17 22 views
5

yanıt verir. Denedim: - yaws'daki belirli bir başlığın değiştirilmesi

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

iki "Sunucu:" döndü başlıkları yerine biri. Ama diğer tüm başlıklar için çalıştı. yaws eski sürümleri için

cevap

3

(yaws-1.90 altında ve) cevabı aşağıda varsayılan olarak, Şimdi


çalışır herhangi başlık [{header,"Server: MyOther Server Name"}] olarak belirtilen, gibi uygulamak ve sunucu başlık değerinden önce adı ve sürümü olarak etiketler yaws bu: Server: Yaws 1.91, MyOther Server Name. Şimdi

 

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

:

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

tarayıcınızı kontrol etme aşağıdaki gibi Kundakçı belirttiğiniz Tepki başlıklarını görebilirsiniz kullanarak: En out/1 işlevinde böyle bir başlık değeri, sunucu ile sona oluşur:

src yaws'da, yaws.erl adı verilen bir modül vardır. Bu modülde, çizgi etrafında kontrol edin: 1332, böyle bir işlevi bulacaksınız:

 
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]. 

Bu sunucu başlığında belirtilen değer üstüne yaws sürümü ve sunucu adını ekler kod parçasıdır. Biz bunu değiştirmek ve satırlar açıklama ve şuna benzer bir empty list [ ] veya empty string "" dönelim gerekir:

 
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 

Son adım
Şimdi bu modülü yeniden derlemek ve mevcut yaws değiştirmeniz gerekiyor .beam dosyasını YAWS-{VSN}/ebin numaralı dosyada, bu yeni kaynağı derledikten sonra elde ettiğimiz yeni .beam dosyası ile. Sonra sanal makineye tekrar yükleyin. Umarım bu son adımda yolunuzu bulabilirsin. Bu çekerek bir yolu Sonra erlang kabuğu

 
1> cd("PATH/TO/YAWS/src"). 
PATH/TO/YAWS/src 
çalıştıran yaws, geçerli çalışma dizini değiştirerek, biz
 
2> c(yaws). 
{ok,yaws} 

yukarıda da değindiğimiz üzere yaws.erl kaynağını değiştirdikten sonra (yaws kabuk hala değil) bu yürütmek

Şimdi oluşturulan yaws.beam dosyasını src'den ebin'e taşıyın. (Yaws yaws daha yeni sürümleri için

 
3> l(yaws). 


:

 
$ mv PATH/TO/YAWS/src/yaws.beam PATH/TO/YAWS/ebin/ 
Yani src gelen biriyle Ebin varolan yaws.beam dosyasını değiştirmek/Üzerine Yaz yaws çalışıyorsa, onun kabuğunda girerek bu kodu yeniden -1,91 ve üzeri)
Eğer sadece yaws.conf dosyaya ekleyecek bir parametre

server_signature = "MY SERVER SIGNATURE"

ve böylece başlıkları ile gelecek yoktur Server: MY SERVER SIGNATURE

+1

Teşekkürler, ama kendim eklemek zorundayım ** "Sunucu:" ** üstbilgisini her zaman önemsemiyorum – user1051086

+0

OH evet, bunun maliyeti. Ancak, tüm kodları yorumlamak yerine istediğiniz başlığı istediğiniz yere koymak için yaws.erl işlevindeki herhangi bir yeniden düzenlemeyi yapabilirsiniz. Aslında işlevden '[]' döndürmek yerine, kodunuzu her zaman kodunuza koymanıza gerek kalmadan başlığınızı döndürmesine izin verin. –

2

Yaws'ın 1.90 sürümünden itibaren, Mayıs 2011'de yayımlanan Server HTTP yanıt başlığını özelleştirmek için genel yapılandırma değişkeni server_signature'u ayarlayabilirsiniz.Ayrıca, bu yazıdan yola çıkarak, her sanal sunucu bazında server_signature geçersiz kılma yapabilmemiz için farklı sanal sunuculardan farklı Server başlıklarına hizmet verebilirsiniz. Bu değişiklik, Şubat 2012'nin başlarında yaws github repo'a eklenecek ve daha sonra bunu serbest bırakmaya karar verdiğimizde Yaws 1.93'te görünecektir.