协议如何在路由器网络服务器和浏览器之间进行通信

How protocol is communicated between routers web-server and the browser

我正在开发一个应用程序,该应用程序将 HTTP 消息传入和传出路由器 Web 服务器。

我面临的问题是 HTTP basic authentication

RFC 7617 状态:
服务器可以使用 401 (Unauthorized) 状态码回复质询”

我从浏览器 HTTP 中看到的情况表明,并非每个路由器都是如此。例如,TPLINK TLWR840N 不会向我发送 401,我可以通过在 http 消息中以 base64{username:pass} 的形式简单地传输 http 请求以及正确的凭据来获取资源,如图所示下面。

GET //main/ddos.htm?_=1572950350469 HTTP/1.1
Host: 192.168.0.1
Accept: */*
Connection: keep-alive
Referer: http://192.168.0.1
Cookie: Authorization=Basic YeRtaW46YWRtaW5AMTIz

如果密码输入正确,它会给我请求的内容,否则它会将我重定向到登录页面(为什么这个路由器不遵循 401 协议?)。

我有另一个 TPLINK TL-WR841N 路由器,它不像前一个路由器那样采用 base64{username:pass} 形式的凭据(在 http 消息中),而是采用 base64 形式的凭据(用户):md5(密码)。我有两个关于这个路由器的问题(和一般的所有路由器

  1. 我想知道路由器如何将凭据协议传递给浏览器,以便我可以将其嵌入到我的应用程序中。我已经检查了 http 消息(在 Chrome/Firefox 中)但找不到正在通信协议的消息。

  2. 当我登录到 TPLINK TL-WR841N 路由器时,与以前的模型不同,网络浏览器在 URL 中包含一些 SessionID,例如URL 显示 www.192.168.0.1/SessionID/path/to/resource。我想知道这个 SessionID 是如何传递给浏览器的?

编写路由器维护应用程序的人,以及设计显卡 driver 安装程序屏幕的人(看着你,AMD),不遵守任何准则、最佳实践或协议。

但他们也不需要。他们编写了一个恰好使用 HTTP 的应用程序,但您没有义务使用所有 HTTP。他们写 frond-end 和 back-end,所以他们可以密切控制他们的服务器和他们的客户端。

客户端很可能是一对愚蠢的 HTML 页面,它们使用 JavaScript 执行一些请求。

如果他们决定 Web 界面使用字面说明 LetMeIn: true 的请求 header 向服务器进行身份验证,那么这也可以。

HTTP 不要求服务器在缺少 header 或承载 false 时 return 401,因此他们不必这样做。