本文提供了此 API 参考文档的补充说明。
使用此类 HttpListener ,可以创建一个简单的 HTTP 协议侦听器来响应 HTTP 请求。 侦听器在 HttpListener 对象的生存期内处于活动状态,并依赖其权限在应用程序中运行。
若要使用 HttpListener,请使用 HttpListener 构造函数创建类的新实例,并使用 Prefixes 属性获取对包含指定应处理的统一资源标识符(URI)前缀 HttpListener 的字符串的集合的访问权限。
URI 前缀字符串由方案(http 或 https)、主机、可选端口和可选路径组成。 完整的前缀字符串的一个示例是 http://www.contoso.com:8080/customerData/
。 前缀必须以正斜杠(“/”)结尾。
HttpListener与请求的 URI 最匹配的前缀的对象响应请求。 多个 HttpListener 对象无法添加相同的前缀; Win32Exception 如果 HttpListener 添加已使用的前缀,则会引发异常。
指定端口时,主机元素可以替换为“*”,以指示 HttpListener 如果请求的 URI 与任何其他前缀不匹配,则接受发送到端口的请求。 例如,若要在请求的 URI 未由任何 HttpListener处理时接收发送到端口 8080 的所有请求,前缀为 http://*:8080/。 同样,若要指定 HttpListener 接受发送到端口的所有请求,请将主机元素替换为“+”字符。 例如,https://+:8080。 “*”和“+”字符可以出现在包含路径的前缀中。
在由 HttpListener 对象管理的 URI 前缀中支持通配符子域。 若要指定通配符子域,请使用“*”字符作为 URI 前缀中主机名的一部分。 例如 ,http://*.foo.com/。 将此作为参数传递给Add方法。
警告
不应使用顶级通配符绑定(http://+:8080和)。 顶级通配符绑定可能会为应用带来安全漏洞。 此行为同时适用于强通配符和弱通配符。 使用显式主机名而不是通配符。 如果可控制整个父域(区别于易受攻击的 *.mysub.com
),则子域通配符绑定(例如,*.com
)不具有此安全风险。 有关详细信息,请参阅 rfc7230 section-5.4 。
若要开始侦听来自客户端的请求,请将 URI 前缀添加到集合并调用 Start 该方法。 HttpListener 提供用于处理客户端请求的同步模型和异步模型。 使用HttpListenerContext方法或其异步对应的GetContext和BeginGetContext方法返回的EndGetContext对象来访问请求及其关联的响应。
如果您的应用程序在等待客户端请求时需要阻塞,并且只想一次处理一个请求,那么同步模型是合适的。 使用同步模型调用 GetContext 该方法,该方法等待客户端发送请求。 此方法将在事件发生时返回一个 HttpListenerContext 对象以供处理。
在更复杂的异步模型中,应用程序在等待请求时不会阻止,并且每个请求都在其自己的执行线程中进行处理。 使用该方法 BeginGetContext 指定要为每个传入请求调用的应用程序定义方法。 在该方法中,调用 EndGetContext 该方法以获取请求、处理请求和响应。
在任一模型中,传入的请求都使用 HttpListenerContext.Request 属性进行访问,并由对象表示 HttpListenerRequest 。 同样,可以使用 HttpListenerContext.Response 属性访问响应,它们由 HttpListenerResponse 对象表示。 这些对象与HttpWebRequest和HttpWebResponse对象共享一些功能,但由于它们实现的是客户端行为,而不是服务器行为,因此这后者不能与HttpListener一起使用。
HttpListener 可以要求客户端身份验证。 可以指定用于身份验证的特定方案,或者指定一个决定要使用哪个方案的委托。 必须要求某种形式的身份验证才能获取有关客户端标识的信息。 有关其他信息,请参阅属性UserAuthenticationSchemes和AuthenticationSchemeSelectorDelegate属性。
注释
如果使用 https 创建 HttpListener ,则必须为该侦听器选择服务器证书。 否则,对此 HttpListener 的请求将失败,导致连接意外关闭。
注释
可以使用 Network Shell 配置服务器证书和其他侦听器选项(netsh.exe)。 有关更多详细信息 ,请参阅 Network Shell(Netsh )。 可执行文件开始随 Windows Server 2008 和 Windows Vista 一起交付。
注释
如果为客户端 HttpListener指定了多个身份验证方案,侦听器将按以下顺序对客户端进行质询: Negotiate
、 NTLM
、 Digest
,然后 Basic
。
HTTP.sys
该 HttpListener 类基于 HTTP.sys
该类构建,它是处理 Windows 所有 HTTP 流量的内核模式侦听器。
HTTP.sys
提供连接管理、带宽限制和 Web 服务器日志记录。
使用 HttpCfg.exe 工具添加 SSL 证书。