问题标签 [http.sys]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
http - 来自 http.sys 的“无效主机名”响应
我们在 OwinHttpListener(幕后的 http.sys)上运行了 Web 服务。每当我们通过 IP 地址向应用程序发送请求时,它都会以“无效主机名”进行响应。
在对堆栈溢出和谷歌进行了大量搜索之后,我并没有真正接近解决方案。请求通过 http.sys,我可以在 HTTP 错误日志中看到它们。我可以登录有问题的服务器并在本地访问服务(使用 localhost 或 127.0.0.1),我可以使用服务器名称成功通过,唯一的失败条件是使用服务器 IP 地址。
我试过以下方法:
- 确保应用程序正在侦听所有接口 ( http://+:8080 )
- 确保 IIS 没有尝试使用该端口(它不是)
- 确保将 Windows 防火墙配置为允许该端口上的流量(它是)
http - http.sys 中的通配符注册与环回地址不匹配
我在http://127.0.0.1:2113/上托管了一项服务,并在 http.sys 中进行了以下 URL 注册
但是,由于某种原因,服务会引发异常
如果我还添加 URL 注册
到 http.sys,然后它的工作原理。如果我在http://localhost:2113/上托管服务,则会出现相同的情况
谁能解释一下?我已经阅读了 http.sys 中的通配符注册,据我所知,它也应该与这些地址匹配。也许我应该补充一点,我已经仔细检查了我在 2113 端口上没有任何其他注册。
http - HTTP.sys 是过滤器(下/上)还是功能驱动程序(PDO 的 FDO)?
我目前正在研究(仅出于个人目的)是否可以编写位于 HTTP.sys 下的过滤器驱动程序以拦截请求。
这个想法是调查是否可以覆盖 503 Service Unavailable 屏幕(因为显然,不可能覆盖或更改它)。
问题是我不确定 HTTP.sys 是如何实现的,它是否是位于某些网络驱动程序下的过滤器驱动程序,或者 HTTP.sys 是否被某些虚拟设备使用。
windows - 如何找到 TCP 连接到 HTTP.SYS 进程背后的确切进程
当我使用 netstat 时,我会收到这样的信息 - PID 4 表示 HTTP.SYS
所以使用netsh
我可以接收有关 HTTP 层上特定侦听器的信息
:
可以有多个进程在同一个端口上侦听,例如本例中的 PID 7948 和 3684。
有没有可能区分每个连接属于哪个进程到同一个端口,哪个在netstat
输出中列出?
在 IIS 服务器的情况下,可以通过 列出活动请求
appcmd.exe list requests
,但是其他进程呢?
是否有任何 API 调用来获取信息?
visual-studio - 从另一台机器访问 IIS Express
我想从另一台机器访问该站点,例如 192.168.1。11:10369
我找到了一个解决方案,即:http ://bendeat.com/access-iis-express-from-another-machine.html
如果我在Web Matrix
中运行该项目,它运行良好
但不适用于Visual Studio并显示错误错误请求.. http://prntscr.com/ifz2jq(但它作为http://localhost : 10369 /运行良好)
我应该怎么做..以便它可以通过 IP 地址从VS工作,因为它在 web 矩阵和 localhost/ 中运行良好
asp.net-core-2.0 - 使用 http.sys 网络服务器部署的自托管 Asp.Net Core WebAPi
我正在尝试部署自托管的 Asp.Net Core WebApi。我用 Http.sys 替换了默认的 Kestrel Web 服务器。我正在使用 Windows Server 2016 的虚拟机上进行部署。当我在本地(从虚拟机)请求 api 时,我可以在http://localhost:61152上毫无问题地访问它。问题是我无法从主机访问它。我在 Windows 防火墙中打开了端口 61152。在 program.cs 我有:
我使用 asp.net 核心 2.0。我浏览服务器的 IP,如下所示:http: //192.168.0.112 :61152/
此外,我在来宾机器上运行了 IIS,我可以看到默认的 IIS 页面。
您能否告诉我我做错了什么或指导我阅读如何解决此问题的文章。谢谢
iis - 处理 IIS 低级错误
我正在使用 IIS8 和基于 .net 框架 4.5 构建的 MVC.NET 网站,作为安全修复的一部分,我被告知拥有所有 403 状态代码的通用错误消息,我能够使用来自 web 的 httpErrors 标签来实现。配置文件使用“”条目。但是 http.sys 引发的一些错误仍然显示系统级错误而不是一般错误。例如,对 URL“ http://abc.xyz.com/login/../../../../../../../admin.txt ”执行 GET 请求将返回“HTTP错误 403。请求 URL 被禁止。” 错误,而它应该返回我的 httpErrors 标记中提到的通用错误消息。
令我惊讶的是,如果我停止网站(不是 IIS),我仍然收到相同的错误,它确实确认错误是在 IIS 的低级 API 上处理的,并且没有传递到应用程序层,因此 web.config 中的任何更改都是无助于解决此问题。
有人可以对如何解决这个问题有所了解吗?
谢谢阿杰·萨万特
asp.net-core - 使用 http.sys 和 Microsoft Edge 的 ASP.NET Core 站点的问题
我在启动和运行 ASP.NET Core 2.1 Web 应用程序时遇到了很多问题。我需要它在共享端口(80 或 443)上的 http.sys(WebListener)下运行。我还希望它自动从 http (80) 重定向到 https (443)。当然,我不想硬编码 http.sys 的侦听器地址 - 我需要从配置文件中提取这些地址,但现在它们是硬编码的。我用 保留了适当的 URL netsh
,但是当我运行应用程序时,我收到警告:
该应用程序启动,但我根本无法使用 Microsoft Edge 浏览它。任何其他网络浏览器都可以——只要我禁用 HTTPS。出于某种原因,应用程序正在转发到端口 5001,而不是 443。
azure - Service Fabric - 删除 ReverseProxy Server 标头“Microsoft-HTTPAPI/2.0”
我在 asp.net core 2.1/kestrel 上运行了一个无状态服务。该服务是通过 LB 和 SF Reverse Proxy 从外部保护和访问的。Service Fabric 版本是 6.3.187.9494。
我需要从响应中完全删除服务器标头,并且通过操作 KestrelServerOptions.AddServerHeader 在服务本身中执行此操作没有问题,但似乎ReverseProxy 添加了自己的服务标头,即 Microsoft-HTTPAPI/2.0。
所以这就是我检查的方式 - 我从它运行的节点向服务的端点发出请求,但我没有得到服务器标头。然后我做同样的事情,但通过反向代理,我回来了 - 服务器:Microsoft-HTTPAPI/2.0。
通读ApplicationGateway/Http 设置,我发现名为RemoveServiceResponseHeaders的属性-
将从服务响应中删除的以半冒号/逗号分隔的响应标头列表;在转发给客户之前。如果设置为空字符串;按原样传递服务返回的所有标头。即不要覆盖日期和服务器
我已经将那个设置为“日期;服务器”并更新了集群,但没有运气,因为我仍然得到那个服务器头。
有什么建议么?
c# - 使用 Entity Framework 对 ASP.NET Core 应用程序中的远程用户进行 Windows 身份验证
背景
我有一个在 Http.sys 中运行的 ASP.NET Core 应用程序来提供 Windows 身份验证。
我的应用程序的客户端使用 Windows 身份验证,并且在首次访问该站点时会提示用户输入他们的 Windows 登录凭据。一切都很好。
我正在使用由实体框架使用代码优先方法构建的 SQL Server 数据库(托管在与应用程序相同的服务器上)。在startup.cs
文件中,我正在运行一个dbContext.migrate()
以确保数据库是最新的,然后应用程序继续正常运行。
问题
当远程用户与站点交互并执行需要访问数据库的操作时,我希望在他们的用户名下执行该数据库事务。
例如,如果我在我的服务器上运行 Asp.net 核心应用程序User1
,然后从登录的用户计算机访问 webapp,因为User2
数据库交互仍在执行,User1
因为该用户是运行主应用程序的用户。
我希望有可能使数据库交互由User2
而不是User1
在这种情况下执行。主要是为了记录和分析的目的。
在检索实例时,dbContext
我向它提供了一个连接字符串,该字符串声明使用 SSPI 进行身份验证。有没有办法将远程用户的用户名包含到此连接中,以便他们以自己的身份连接到数据库?我可以轻松地从我的控制器中检索远程用户的凭据/用户名。我相信我可以使用一种叫做的东西,Impersonation
但我不确定实现它的最佳实践,或者它是否是推荐的解决方案。
任何帮助将不胜感激。
更新
感谢一些有用的反馈,我尝试实现以下功能:
我的连接字符串设置如下startup.cs
:
然后我在我的控制器/类中执行这样的操作:
变量被传递到函数中user
并且是类型WindowsIdentity
。
从 localhost 执行代码可以正常工作,但是当远程用户尝试时,它会返回以下错误:System.Data.SqlClient.SqlException: 'A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 0 - No such host is known.)
更新 2
我设法通过使用连接字符串的 IP 地址而不是服务器/机器名称来解决此错误。所以现在我的连接字符串如下所示:
@"Server=<IP address>\MSSQLSERVER;Database=ConfigDb;Trusted_Connection=True
现在我面临 SQL Server 声明的另一个问题No connection could be made because the target machine actively refused it
。我可以通过 SQL Management Studio 使用此用户连接到 SQL Server,但不能通过我的应用程序。
我在 EventViewer 中发现实际错误与 SSPI: 相关SSPI handshake failed with error code 0x8009030c, state 14 while establishing a connection with integrated security; the connection has been closed. Reason: AcceptSecurityContext failed. The operating system error code indicates the cause of failure. The logon attempt failed [CLIENT: <named pipe>]
。不太确定为什么这会失败。