2011-11-17 18 views
5

Chciałbym zmienić wartość nagłówka http "Serwer:" dynamicznie (podczas budowania odpowiedzi) w odchyleniach. Próbowałem: -zmiana konkretnego nagłówka w odpowiedziach

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

powrócił dwa"Server:" nagłówki zamiast jednego. Ale zadziałało dla wszystkich innych nagłówków.

Odpowiedz

3

dla starszych wersji frambezja (yaws-1.90 i poniżej) poniżej odpowiedź działa


Teraz domyślnie każdy nagłówek określony jako [{header,"Server: MyOther Server Name"}], yaws wymusi i oznacz swoją nazwę i wersję przed wartością nagłówka serwera, jak to: Server: Yaws 1.91, MyOther Server Name. Dzieje się tak, gdy w funkcji out/1 skończyć z wartością nagłówka, serwer jak ten:

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

Sprawdzanie swoją przeglądarkę za pomocą Firebug widać nagłówki odpowiedzi określone w następujący sposób:

 

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

Teraz rozwiązanie:

W wersjach src znajduje się moduł o nazwie yaws.erl. W ramach tego modułu, sprawdź wokół linii: 1332 znajdziesz funkcję tak:

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

To jest kawałek kodu, który dołącza wersja frambezja i nazwę serwera na górze nagłówka serwera określonej wartości. Musimy to zmienić i ustosunkowania się linii i niech zwróci empty list [ ] lub empty string "" wyglądać tak:

 
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 

Ostatni krok
Teraz musimy ponownie skompilować ten moduł i zastąpić istniejące frambezja plik .beam w YAWS-{VSN}/ebin z nowym wynikowym plikiem .beam, który otrzymujemy po skompilowaniu tego nowego źródła. Następnie załaduj ponownie do VM. Mam nadzieję, że odnajdziesz swoją drogę w tym ostatnim kroku. Jednym ze sposobów ciągnąc ten off to zmieniając bieżący katalog roboczy swojego frambezja systemem erlang skorupę

 
1> cd("PATH/TO/YAWS/src"). 
PATH/TO/YAWS/src 
Następnie wykonać to (wciąż w yaws shell) po zmianie źródła yaws.erl jak już wspomniano powyżej
 
2> c(yaws). 
{ok,yaws} 

Teraz przenieś wygenerowany plik yaws.beam z src do ebin. Zastępowanie/zastąpić istniejący plik yaws.beam w ebin z jednym z src

 
$ mv PATH/TO/YAWS/src/yaws.beam PATH/TO/YAWS/ebin/ 
Tak więc, jeśli yaws pracuje, przeładować ten kod, wprowadzając w jego powłoki:

 
3> l(yaws). 


nowsze wersje frambezja (frambezja -1,91 i powyżej)


jest to parametr będzie po prostu dodać do pliku yaws.conf

server_signature = "MY SERVER SIGNATURE"

i tak nagłówki przyjdzie z Server: MY SERVER SIGNATURE

+1

dziękuję, ale muszę dodać swój własny ** "Serwer:" ** nagłówek za każdym razem, co nie przeszkadza mi – user1051086

+0

OH tak, to jest koszt tego. Ale cóż, możesz wprowadzić wszelkie poprawki do funkcji w 'yaws.erl', aby zawsze umieszczać żądany nagłówek zamiast komentować cały kod. Właściwie zamiast zwracania '[]' z funkcji, pozwól, aby zwrócił twój nagłówek, tak aby nie trzeba go było umieszczać w kodzie przez cały czas –

2

Od wersji 1.90 oprogramowania Yaws, wydanej w maju 2011 r., Można ustawić globalną zmienną konfiguracyjną server_signature, aby dostosować nagłówek odpowiedzi HTTP Server.Jesteśmy także, w trakcie pisania tego artykułu, w procesie nadpisywania server_signature na serwerze wirtualnym, dzięki czemu możesz w razie potrzeby serwować różne nagłówki Server z różnych serwerów wirtualnych. Ta zmiana zostanie dodana do yaws github repo na początku lutego 2012 roku, a później pojawi się w Yaws 1.93, kiedy zdecydujemy się ją wydać.