如何验证 HTTP 响应?

How can I validate an HTTP response?

我正在创建一个低级别的 HTTP 服务器,我想验证我的响应是否正确。

其中有些很好,但有些失败了。我已将一些响应保存为字节并在 HxD 中查看它们,它们 看起来 正确,但它们显然在某些方面不正确。

这是一个 HTTP 响应的开头,格式为十六进制:

48 54 54 50 2F 31 2E 31 20 32 30 30 20 4F 4B 0D 0A 43 4F 4E 54 45 4E 54 2D 54 59 50 45 3A 20 69 6D 61 67 65 2F 70 6E 67 0D 0A 4C 41 53 54 2D 4D 4F 44 49 46 49 45 44 3A 20 53 75 6E 2C 20 30 31 20 4D 61 79 20 32 30 32 32 20 32 32 3A 32 34 3A 32 34 20 47 4D 54 0D 0A 41 43 43 45 50 54 2D 52 41 4E 47 45 53 3A 20 62 79 74 65 73 0D 0A 45 54 41 47 3A 20 22 37 35 37 35 35 33 36 61 61 35 64 64 38 31 3A 30 22 0D 0A 53 45 52 56 45 52 3A 20 4D 69 63 72 6F 73 6F 66 74 2D 49 49 53 2F 31 30 2E 30 0D 0A 58 2D 50 4F 57 45 52 45 44 2D 42 59 3A 20 41 53 50 2E 4E 45 54 0D 0A 44 41 54 45 3A 20 57 65 64 2C 20 30 34 20 4D 61 79 20 32 30 32 32 20 30 39 3A 30 31 3A 34 38 20 47 4D 54 0D 0A 43 4F 4E 54 45 4E 54 2D 4C 45 4E 47 54 48 3A 20 39 38 37 35 37 0D 0A 43 6F 6E 6E 65 63 74 69 6F 6E 3A 20 63 6C 6F 73 65 0D 0A 0D 0A 0D 0A 89 50 4E 47

如何根据 RFC 2616 验证我创建的响应是否有效?

我在 .NET 中工作,但我不介意它是在线工具还是其他平台。

编辑:

我已经用这个特定示例解决了我的问题(3 个 crlfs 而不是 head 和 body 之间的 2 个),但我仍然想知道如何自动验证这些请求。

我最终使用 this nuget package 和以下代码实现了这一点:

    if (System.Diagnostics.Debugger.IsAttached)
    {
        using (var handler = new HttpParserDelegate())
        using (var parser = new HttpCombinedParser(handler))
        {
            parser.Execute(arr);
        }

        if (!handler.HttpRequestResponse.IsEndOfMessage)
        {
            System.Diagnostics.Debugger.Break();
            throw new InvalidOperationException($"An HTTP response was serialized but it is not a valid response");
        }
    }