tag que para metaetiqueta encabezado ejemplos código codigo agregar erlang http-headers yaws http-response-codes

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)

Hay un parámetro que agregará a su archivo yaws.conf

server_signature = "MY SERVER SIGNATURE"

Y entonces los encabezados vendrán con Server: MY SERVER SIGNATURE