2011-11-17 19 views
5

我想在雅司利亞動態地(在建立迴應時)更改http標題「服務器:」值。我想: -更改雅可布迴應中的特定標題

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

它返回 「服務器:」頭,而不是一個。但它適用於所有其他標題。

回答

3

對於雅司病的舊版本(雅司病 - 1.90及以下)下面的答案工程


現在,默認情況下,任何標題中指定 [{header,"Server: MyOther Server Name"}],雅司將加強與您的服務器頭值之前標記它的名稱和版本,像這個: Server: Yaws 1.91, MyOther Server Name。當你 out/1功能你用頭值,服務器這樣結束會出現這種情況:

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

檢查你的瀏覽器,使用Firebug看到指定的響應頭如下:

 

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

現在解決方案

在yaws src中,有一個名爲yaws.erl的模塊。在此模塊中,檢查各地行:1332,你會發現這樣的功能:

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

這是附加在你的服務器頭指定的值頂部的偏航版本和服務器名稱的代碼段。我們需要改變它,行註釋掉,讓它返回empty list [ ]empty string ""看起來像這樣:

 
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 

最後一步
現在我們需要重新編譯這個模塊,並取代現有的雅司病.beam文件YAWS-{VSN}/ebin與我們在編譯這個新源後得到的新的.beam文件。然後將其重新加載到VM中。我希望你能在最後一步找到自己的路。拉這一關的一種方式是通過改變運行Erlang的外殼

 
1> cd("PATH/TO/YAWS/src"). 
PATH/TO/YAWS/src 
您的雅司病的當前工作目錄。然後,正如我們上面
 
2> c(yaws). 
{ok,yaws} 

提到改變yaws.erl源後執行這個(仍然在雅司病殼)

現在將生成的yaws.beam文件從src移動到ebin。覆蓋/從SRC

 
$ mv PATH/TO/YAWS/src/yaws.beam PATH/TO/YAWS/ebin/ 
於是一個替換EBIN現有yaws.beam文件,如果雅司正在運行,進入它的外殼重新加載代碼:

 
3> l(yaws). 


較新版本的雅司病(雅司病-1.91以上)


有你只是添加到您的 yaws.conf文件中的參數

server_signature = "MY SERVER SIGNATURE"

所以頭會與 Server: MY SERVER SIGNATURE

+1

謝謝,但我必須添加我自己的**「服務器:」**標題每次我不介意 – user1051086

+0

OH是的,那是成本。但是,您可以對'yaws.erl'中的函數進行任何重新調整,以便始終放置所需的標題,而不是將所有代碼註釋掉。實際上,不是從函數返回'[]',而是讓它返回你的頭文件,這樣你就不需要一直把它放在代碼中 –

2

從2011年5月發佈的Yaws 1.90版開始,您可以設置全局配置變量server_signature來自定義Server HTTP響應標頭。截至撰寫本文時,我們還正在根據每個虛擬服務器的基礎製作server_signature,以便您可以根據需要爲不同的虛擬服務器提供不同的Server標頭。這項變更將在2012年2月初添加到yaws github repo,稍後將出現在Yaws 1.93中,只要我們決定發佈該更改。

相關問題