문제
개인 프로젝트를 위해 C# HTTP 서버를 작성하려고합니다. 반환 된 서버 헤더를 Microsoft-HTTPAPI/2.0에서 다른 것으로 변경할 수있는 방법이 궁금합니다.
public class HttpWebServer
{
private HttpListener Listener;
public void Start()
{
Listener = new HttpListener();
Listener.Prefixes.Add("http://*:5555/");
Listener.Start();
Listener.BeginGetContext(ProcessRequest, Listener);
Console.WriteLine("Connection Started");
}
public void Stop()
{
Listener.Stop();
}
private void ProcessRequest(IAsyncResult result)
{
HttpListener listener = (HttpListener)result.AsyncState;
HttpListenerContext context = listener.EndGetContext(result);
string responseString = "<html>Hello World</html>";
byte[] buffer = Encoding.UTF8.GetBytes(responseString);
context.Response.ContentLength64 = buffer.Length;
System.IO.Stream output = context.Response.OutputStream;
output.Write(buffer, 0, buffer.Length);
output.Close();
Listener.BeginGetContext(ProcessRequest, Listener);
}
}
해결책
httplistener 클래스는 기본 API를 캡슐화하고 httpsendhttpresponse 함수, 링크에 명시된 바와 같이, 항상 서버 헤더 정보에 대한 터무니없는 텍스트가 추가됩니다.
httplistener를 처음부터 코딩하지 않는 한이 문제를 해결하는 방법은 없습니다.
다른 팁
나는 조금 늦었다는 것을 알고 있지만 최근에 똑같은 일을하려고 노력하고 있었고 실수로 작동하는 해결책을 발견했지만 반향이 있는지 확실하지 않습니다.
Response.Headers.Add("Server", "\r\n\r\n");
시도했지만 개인 서버 Microsoft-HTTPAPI/2.0과 함께 돌아옵니다.
나는 또한 성공, 설정, 제거, 추가, Addheader도 사용했습니다.
private void ProcessRequest(IAsyncResult result)
{
HttpListener listener = (HttpListener)result.AsyncState;
HttpListenerContext context = listener.EndGetContext(result);
string responseString = "<html>Hello World</html>";
byte[] buffer = Encoding.UTF8.GetBytes(responseString);
context.Response.ContentLength64 = buffer.Length;
//One
context.Response.AddHeader("Server", "My Personal Server");
//Two
context.Response.Headers.Remove(HttpResponseHeader.Server);
context.Response.Headers.Add(HttpResponseHeader.Server, "My Personal Server");
//Three
context.Response.Headers.Set(HttpResponseHeader.Server, "My Personal Server");
System.IO.Stream output = context.Response.OutputStream;
output.Write(buffer, 0, buffer.Length);
output.Close();
Listener.BeginGetContext(ProcessRequest, Listener);
}
감사합니다 엘리야
제휴하지 않습니다 StackOverflow