2011-11-17 42 views
5

Tôi muốn thay đổi http-header "Máy chủ:" giá trị động (trong khi xây dựng phản hồi) bằng yaws. Tôi cố gắng: -thay đổi tiêu đề cụ thể trong yaws phản hồi

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

nó trở hai"Server:" tiêu đề thay vì một. Nhưng nó làm việc cho tất cả các tiêu đề khác.

Trả lời

3

Đối với các phiên bản cũ của bịnh ghẻ hờm (bịnh ghẻ hờm-1.90 và dưới) câu trả lời dưới đây làm việc


Bây giờ, theo mặc định, bất cứ tiêu đề quy định như [{header,"Server: MyOther Server Name"}], bịnh ghẻ hờm sẽ thi hành và thẻ tên và phiên bản của nó trước khi giá trị tiêu đề máy chủ của bạn, giống như điều này: Server: Yaws 1.91, MyOther Server Name. Điều này xảy ra khi chức năng out/1 của bạn, bạn kết thúc với một giá trị tiêu đề, máy chủ như thế này:

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

Kiểm tra trình duyệt của bạn, sử dụng Firebug bạn thấy các tiêu đề đáp ứng quy định như sau:

 

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

Bây giờ giải pháp:

Trong yaws src, có một mô-đun được gọi là yaws.erl. Trong mô-đun này, kiểm tra xung quanh dòng: 1332, bạn sẽ tìm thấy một chức năng như thế này:

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

Đây là đoạn mã mà gắn thêm phiên bản bịnh ghẻ hờm và tên máy chủ trên tiêu đề máy chủ của bạn giá trị quy định. Chúng ta cần phải thay đổi nó và nhận xét ra các dòng và để cho nó trả về một empty list [ ] hoặc empty string "" trông như thế này:

 
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 

bước cuối
Bây giờ chúng ta cần phải tái biên dịch module này và thay thế các bịnh ghẻ hờm hiện .beam tập tin trong YAWS-{VSN}/ebin với tập tin kết quả mới .beam chúng tôi nhận được sau khi biên dịch nguồn mới này. Sau đó tải lại nó trong VM. Tôi hy vọng bạn có thể tìm thấy con đường của bạn trong bước cuối cùng này. Một cách để kéo này off là bằng cách thay đổi thư mục làm việc hiện tại của bịnh ghẻ hờm của bạn chạy erlang vỏ

 
1> cd("PATH/TO/YAWS/src"). 
PATH/TO/YAWS/src 
Sau đó, thực hiện điều này (vẫn còn trong bịnh ghẻ hờm shell) sau khi thay đổi nguồn gốc của yaws.erl như chúng ta đã đề cập ở trên
 
2> c(yaws). 
{ok,yaws} 

Bây giờ hãy di chuyển tệp yaws.beam đã tạo từ src sang ebin. Ghi đè/thay thế các tập tin yaws.beam hiện trong ebin với một từ src

 
$ mv PATH/TO/YAWS/src/yaws.beam PATH/TO/YAWS/ebin/ 
Vì vậy, nếu bịnh ghẻ hờm đang chạy, nạp mã bằng cách nhập vào vỏ của nó:

 
3> l(yaws). 


Đối với các phiên bản mới hơn của bịnh ghẻ hờm (bịnh ghẻ hờm -1,91 trở lên)


có một tham số, bạn sẽ chỉ cần thêm vào tập tin yaws.conf bạn

server_signature = "MY SERVER SIGNATURE"

và như vậy các tiêu đề sẽ đi kèm với Server: MY SERVER SIGNATURE

+1

cảm ơn, nhưng tôi phải thêm tiêu đề ** "Máy chủ:" ** của riêng mình mọi lúc mà tôi không quan tâm – user1051086

+0

Có, đó là chi phí của điều đó. Tuy nhiên, bạn có thể thực hiện bất kỳ điều chỉnh lại nào đối với hàm trong 'yaws.erl' để luôn đặt tiêu đề bạn muốn thay vì nhận xét tất cả các mã. Trên thực tế thay vì trả về '[]' từ hàm, hãy để nó trả về tiêu đề của bạn để bạn không cần phải đặt nó trong mã của bạn mọi lúc –

2

Kể từ phiên bản 1.90 của Yaws, được phát hành vào tháng 5 năm 2011, bạn có thể đặt biến cấu hình toàn cầu server_signature để tùy chỉnh tiêu đề phản hồi HTTP Server.Chúng tôi cũng có văn bản này, trong quá trình tạo server_signature ghi đè có thể trên cơ sở mỗi máy chủ ảo, vì vậy bạn có thể phân phối các tiêu đề khác nhau Server từ các máy chủ ảo khác nhau nếu bạn muốn. Thay đổi này sẽ được thêm vào số yaws github repo vào đầu tháng 2 năm 2012 và sau đó sẽ xuất hiện trong Yaws 1.93, bất cứ khi nào chúng tôi quyết định phát hành điều đó.

Các vấn đề liên quan