2011-11-17 8 views
5

Vorrei cambiare l'intestazione http "Server:" valore in modo dinamico (durante la creazione della risposta) in imbardata. Ho provato: -La modifica di una specifica intestazione in mordi risponde

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

è tornato due"Server:" intestazioni invece di uno. Ma ha funzionato per tutte le altre intestazioni.

risposta

3

per le versioni precedenti di framboesia (framboesia-1,90 e al di sotto) la risposta qui sotto funziona


Ora, per impostazione predefinita, qualsiasi intestazione specificato come [{header,"Server: MyOther Server Name"}], yaws applicherà e targhetta suo nome e la versione prima del tuo valore dell'intestazione del server, come questo: Server: Yaws 1.91, MyOther Server Name. Ciò si verifica quando nella funzione out/1 si finisce con un valore di intestazione, del server in questo modo:

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

Controllo del browser, utilizzando Firebug si vede le intestazioni di risposta specificato come segue:

 

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

Ora la soluzione:

In yaws src, c'è un modulo chiamato yaws.erl. In questo modulo, controllare attorno alla riga: 1332, troverete una funzione come questa:

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

Questo è il pezzo di codice che aggiunge la versione yaws e il nome del server in cima alla vostra intestazione del server valore specificato. Abbiamo bisogno di cambiare e commentare le righe e lasciarlo restituire un empty list [ ] o empty string "" per assomigliare a questo:

 
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 

Ultimo passo
Ora abbiamo bisogno di ri-compilare questo modulo e sostituire le yaws esistenti .beam file in YAWS-{VSN}/ebin con il nuovo file .beam risultante che otteniamo dopo aver compilato questa nuova fonte. Quindi ricaricarlo nella VM. Spero che tu possa trovare la tua strada in questo ultimo passo. Un modo di tirare fuori questo è di cambiare la directory di lavoro corrente dei yaws esecuzione di shell Erlang

 
1> cd("PATH/TO/YAWS/src"). 
PATH/TO/YAWS/src 
Poi, eseguire questo (ancora nei yaws Shell) dopo aver cambiato la fonte del yaws.erl come abbiamo accennato in precedenza
 
2> c(yaws). 
{ok,yaws} 

Ora sposta il file yaws.beam generato da src a ebin. Sovrascrivere/sostituire il file esistente nella yaws.beam Ebin con quello da src

 
$ mv PATH/TO/YAWS/src/yaws.beam PATH/TO/YAWS/ebin/ 
Quindi, se framboèsia è in esecuzione, ricaricare il codice inserendo nel suo guscio:

 
3> l(yaws). 


Per le versioni più recenti di yaws (framboesia -1,91 e sopra)


c'è un parametro che sarà solo aggiungere al vostro file di yaws.conf

server_signature = "MY SERVER SIGNATURE"

e così le intestazioni sarà disponibile con Server: MY SERVER SIGNATURE

+1

grazie, ma devo aggiungere il mio ** "Server:" ** header ogni volta che non mi dispiace – user1051086

+0

OH sì, questo è il costo di quello. Ma bene, puoi apportare delle modifiche alla funzione in 'yaws.erl' per inserire sempre l'intestazione che vuoi invece di commentare tutto il codice. In realtà invece di restituire '[]' dalla funzione, lascia che restituisca l'intestazione in modo che non sia necessario inserirlo nel codice per tutto il tempo –

2

A partire dalla versione 1.90 di Yaws, rilasciata a maggio 2011, è possibile impostare la variabile di configurazione globale server_signature per personalizzare l'intestazione della risposta HTTP Server.Inoltre, al momento della stesura di questo documento, siamo in grado di eseguire l'override di server_signature su base per-virtual-server, in modo che tu possa servire diverse intestazioni Server da diversi server virtuali, se lo desideri. Questa modifica verrà aggiunta allo yaws github repo all'inizio di febbraio 2012 e verrà successivamente visualizzata in Yaws 1.93, ogni volta che decidiamo di rilasciarlo.

Problemi correlati