изменение конкретного заголовка в ответе челюсти - PullRequest
5 голосов
/ 17 ноября 2011

Я хотел бы изменить значение http-header "Server:" динамически (при построении ответа) в оборотах.Я попытался: -

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

вернул два "Сервер:" заголовки вместо одного.Но это работало для всех других заголовков.

Ответы [ 2 ]

3 голосов
/ 17 ноября 2011

Для более старых версий челюстей (yaws-1.90 и ниже) работает приведенный ниже ответ


Теперь, по умолчанию, любой заголовок, указанный как [{header,"Server: MyOther Server Name"}], черви будет применять и помечать его имя и версию до значения заголовка вашего сервера, например: Server: Yaws 1.91, MyOther Server Name. Это происходит, когда в вашей функции out/1 вы заканчиваете значением заголовка, например, сервером:
out(_A)-> <br>    [{header,"Server: ASP.NET Server"},<br>     {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

Теперь решение :

В рычагах 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].

Это фрагмент кода, который добавляет версию yaws и имя сервера поверх указанного в заголовке сервера значения. Нам нужно изменить его, закомментировать строки и дать ему вернуть 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

Последний шаг
Теперь нам нужно перекомпилировать этот модуль и заменить существующий файл yaws.beam в YAWS-{VSN}/ebin новым результирующим файлом .beam, который мы получим после компиляции этого нового источника. Затем перезагрузите его в ВМ. Я надеюсь, что вы сможете найти свой путь в этом последнем шаге. Одним из способов справиться с этим является изменение текущего рабочего каталога ваших червей, использующего оболочку erlang

1> cd("PATH/TO/YAWS/src").
PATH/TO/YAWS/src
Затем выполните это (все еще в оболочке yaws) после изменения источника yaws.erl, как мы упоминали выше
2> c(yaws).
{ok,yaws}

Теперь переместите сгенерированный файл yaws.beam из src в ebin. Перезаписать / заменить существующий файл yaws.beam в ebin файлом из src

$ mv PATH/TO/YAWS/src/yaws.beam PATH/TO/YAWS/ebin/
Итак, если yaws работает, перезагрузите этот код, введя в его оболочку:
3> l(yaws).


Для более новых версий рысканий (yaws-1.91 и выше)


Есть параметр, который вы просто добавите в свой yaws.conf файл

server_signature = "MY SERVER SIGNATURE"

И поэтому заголовки будут поставляться с Server: MY SERVER SIGNATURE
2 голосов
/ 02 февраля 2012

Начиная с версии 1.90 Yaws, выпущенной в мае 2011 года, вы можете установить глобальную переменную конфигурации server_signature, чтобы настроить заголовок ответа Server HTTP.На момент написания этой статьи мы также делаем процесс переопределения server_signature для каждого виртуального сервера таким образом, чтобы вы могли обслуживать различные заголовки Server с разных виртуальных серверов, если хотите.Это изменение будет добавлено к репозиторию yaws github в начале февраля 2012 года и позже появится в Yaws 1.93, когда мы решим выпустить его.

...