erlang - que - cambiando un encabezado específico en el pian responde
metaetiqueta wix (2)
Me gustaría cambiar dinámicamente el valor http-header "Server:" (mientras construyo la respuesta) en yaws. Lo intenté:-
[{status, 200},
{allheaders,
[{header,
["Server: ","ASP.NET Development Server/10.0.0.0"]
}]
},
{html,Body}
]
devolvió dos encabezados "Servidor:" en lugar de uno. Pero funcionó para todos los demás encabezados.
A partir de la versión 1.90 de Yaws, lanzada en mayo de 2011, puede establecer la variable de configuración global server_signature
para personalizar el encabezado de respuesta HTTP del Server
. Al momento de escribir esto, también estamos en el proceso de anular server_signature
-able por servidor virtual, para que pueda servir diferentes encabezados de Server
desde diferentes servidores virtuales si lo desea. Este cambio se agregará al repo de github de pian a principios de febrero de 2012 y aparecerá más adelante en Yaws 1.93, cada vez que decidamos lanzarlo.
Para versiones anteriores de pian (yaws-1.90 y siguientes) la respuesta a continuación funciona
Ahora, de forma predeterminada, cualquier encabezado especificado como[{header,"Server: MyOther Server Name"}]
, yaws aplicará y etiquetará su nombre y versión antes del valor del encabezado del servidor, así: Server: Yaws 1.91, MyOther Server Name
. Esto ocurre cuando en su función out/1
termina con un valor de encabezado, un servidor como este: out(_A)->
[{header,"Server: ASP.NET Server"},
{html,"<p>I love klacke and yaws ! </p>"}].
Al revisar su navegador, usando Firebug, verá los encabezados de respuesta especificados de la siguiente manera:
Date Thu, 17 Nov 2011 07:59:17 GMT Content-Length 22 Content-Type text/html Server Yaws 1.91, ASP.NET Server
Ahora la solución :
En el src
pian, hay un módulo llamado yaws.erl
. En este módulo, compruebe alrededor de la línea: 1332
, encontrará una función como esta:
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].
Esta es la pieza de código que agrega la versión de guiñada y el nombre del servidor en la parte superior del valor especificado del encabezado del servidor. Necesitamos cambiarlo y comentar las líneas y dejar que devuelva una empty list [ ]
o empty string ""
para que se vea así:
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
Último paso
Ahora tenemos que volver a compilar este módulo y reemplazar el archivo existente yaws.beam en YAWS-{VSN}/ebin
con el nuevo archivo .beam resultante que obtenemos después de compilar esta nueva fuente. Luego, vuelva a cargarlo en la máquina virtual. Espero que encuentres tu camino en este último paso. Una forma de solucionar esto es cambiando el directorio de trabajo actual de su pian que ejecuta erlang shell
1> cd("PATH/TO/YAWS/src"). PATH/TO/YAWS/src Luego, ejecuta esto (aún en el caparazón de pian) después de cambiar la fuente del pian.erl como hemos mencionado anteriormente
2> c(yaws). {ok,yaws}
Ahora mueva el archivo yaws.beam generado de src a ebin. Sobrescribir / reemplazar el archivo yaws.beam existente en ebin con el de src
$ mv PATH/TO/YAWS/src/yaws.beam PATH/TO/YAWS/ebin/ Entonces, si la pian se está ejecutando, vuelva a cargar ese código ingresando en su caparazón:
3> l(yaws).
Para versiones más nuevas de pian (yaws-1.91 y superiores)
yaws.conf
server_signature = "MY SERVER SIGNATURE"
Y entonces los encabezados vendrán con
Server: MY SERVER SIGNATURE