强制门户出现需要啥响应?
Posted
技术标签:
【中文标题】强制门户出现需要啥响应?【英文标题】:What response is required for captive portal to appear?强制门户出现需要什么响应? 【发布时间】:2019-04-09 12:45:59 【问题描述】:我正在尝试在小型嵌入式设备上实现强制门户。
据我所知,我只需要捕获智能手机对特殊 url 的请求并发送包含强制门户页面的响应。为了不维护所有可能的 URL 列表,我设置了一个 DNS,它将所有主机解析为我的设备 IP。
现在,当我将 android 设备连接到我的网络时,我收到了对 /generate_204
的请求并发送重定向响应。以下是 curl 命令的请求和响应示例:
curl -v http://google.com/generate_204
* Trying 192.168.1.1...
* Connected to google.com (192.168.1.1) port 80 (#0)
> GET /generate_204 HTTP/1.1
> Host: google.com
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 302 Found
< Content-Type: text/html
< Content-Length: 0
< Location: /
<
* Connection #0 to host google.com left intact
使用 Postman/Chrome 我被重定向到 192.168.1.1/ 并加载了所需的页面。但是我测试了 4 台安卓设备,只有一台向我展示了一个弹出窗口。 ios也有同样的问题。我收到了对/hotspot-detect.html
的请求,返回了与上面相同的响应,但什么也没发生。我在这里错过了什么?
谢谢!
【问题讨论】:
嗨 - 知道如何在 Android 中进行身份验证后关闭自定义强制页面吗?或者如何从我的自定义强制页面强制连接检查?我尝试了 window.location 重定向,但有时它会卡住 200 响应而不是 204。你遇到过这个问题吗? 【参考方案1】:据我了解,如果您返回的不是强制特定门户测试站点返回的内容(即,如果是请求的 URI,则返回 http://google.com/generate_204 或如果是请求的 URI,则返回 http://captive.apple.com//hotspot-detect.html),那么你返回的就会显示出来,也就是所谓的闪屏。返回这些 URL 所返回的内容应该会抑制启动屏幕并让设备误以为它已连接到 Internet。
【讨论】:
Thabjs 为您解答!我的理解完全一样。正如您从我的帖子中看到的那样,我为 /generate_204 请求发送重定向响应。但是启动画面没有出现。 对,不要发送 /generate_204 的重定向响应。只需使用常规的 200 状态文本或 html 页面进行响应,使其显示为启动屏幕。 我会检查的。但是我总是发现答案应该包含重定向。甚至 Wiki 都这么说:en.wikipedia.org/wiki/Captive_portal。请参阅Implementation
部分。
我找到了解决办法,你可以看看我的回答。【参考方案2】:
我找到了答案。重定向响应中的位置标头必须看起来不同。特别是:
Location: http://192.168.1.1/
这解决了问题。
【讨论】:
@LavaSlider 是的,所有请求都使用 DNS 重定向。但是问题出在Location
标头格式中。它必须包含重定向指向的主机的域名或 IP 地址。它是与 DNS 重定向无关的 HTTP 功能。以上是关于强制门户出现需要啥响应?的主要内容,如果未能解决你的问题,请参考以下文章