我想在雅司利亞動態地(在建立迴應時)更改http標題「服務器:」值。我想: -更改雅可布迴應中的特定標題
[{status, 200},
{allheaders,
[{header,
["Server: ","ASP.NET Development Server/10.0.0.0"]
}]
},
{html,Body}
]
它返回 「服務器:」頭,而不是一個。但它適用於所有其他標題。
我想在雅司利亞動態地(在建立迴應時)更改http標題「服務器:」值。我想: -更改雅可布迴應中的特定標題
[{status, 200},
{allheaders,
[{header,
["Server: ","ASP.NET Development Server/10.0.0.0"]
}]
},
{html,Body}
]
它返回 「服務器:」頭,而不是一個。但它適用於所有其他標題。
對於雅司病的舊版本(雅司病 - 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
從2011年5月發佈的Yaws 1.90版開始,您可以設置全局配置變量server_signature
來自定義Server
HTTP響應標頭。截至撰寫本文時,我們還正在根據每個虛擬服務器的基礎製作server_signature
,以便您可以根據需要爲不同的虛擬服務器提供不同的Server
標頭。這項變更將在2012年2月初添加到yaws github repo,稍後將出現在Yaws 1.93中,只要我們決定發佈該更改。
謝謝,但我必須添加我自己的**「服務器:」**標題每次我不介意 – user1051086
OH是的,那是成本。但是,您可以對'yaws.erl'中的函數進行任何重新調整,以便始終放置所需的標題,而不是將所有代碼註釋掉。實際上,不是從函數返回'[]',而是讓它返回你的頭文件,這樣你就不需要一直把它放在代碼中 –