【问题标题】:403 Error with WiFi HotspotsWiFi热点出现403错误
【发布时间】:2013-05-01 03:08:21
【问题描述】:

我有一个通过 XMLRPC 连接到 Django 服务器的 iOS 应用程序(协议并不重要)。身份验证使用标准 cookie 进行持久化,并由AFNetworking 通过NSURLConnection 透明地处理。当请求未通过身份验证时,Django XMLRPC 库会返回 403 错误,并且当发生这种情况时,应用程序会向用户显示登录页面。这种方法已经运行了几年。

最近出现了一个问题,用户连接到 WiFi 热点但未通过热点进行身份验证。他们加载了应用程序并显示了登录页面,这一定是从热点返回的403 错误的结果。如果他们首先通过热点进行身份验证,那么一切正常。

我正在尝试找到一种解决方案,以防止我的应用将此类 403 错误解释为身份验证失败。我假设正在发生以下两种情况之一:

  • 热点重定向到返回403错误的URL;或
  • 热点立即返回403 错误。

第一种情况很容易通过阻止 301302 重定向来管理。幸运的是,AFNetworking 让这一切变得简单。

第二种情况更困难,我无法知道403 的来源。

有谁知道标头中是否还有其他内容可以检测403 的来源,或者是否存在在未登录热点时重定向请求的标准做法?

编辑

这是我的 Django 服务标头在 403 上的样子:

HTTP/1.1 403 FORBIDDEN
Server: nginx
Date: Sun, 28 Apr 2013 07:21:34 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
Vary: Cookie
Set-Cookie: sessionid=5a5ce154d1229e40c3773e8f6999a32d; expires=Sun, 18-Aug-2013 07:21:34 GMT; httponly; Max-Age=9676800; Path=/

【问题讨论】:

  • 您可以记录返回的标头以查看可用的标头。您有权修改网络服务吗?
  • 我很遗憾有问题的热点位于世界的另一端,所以我无法检查。我编辑了我的问题以显示我的网络服务的标题是什么样的......那里没有什么用处。
  • 现在我想起来了...我可以创建一些中间件来添加一些东西到HTTPRepsonse 以识别响应的来源...看起来像一个黑客。
  • 不是答案,但想知道如果需要身份验证,为什么服务器会发送 403(禁止)。 IMO,它应该是 401(未经授权)。 403 通常意味着,服务器在任何情况下都会拒绝响应,客户端应该放弃询问这些请求。
  • @CouchDeveloper 有效问题!它在我正在使用的 XMLRPC 库的实现中。如果出现任何问题,它被编程为返回 HttpResponseForbidden()。可能不正确...

标签: ios wifi nsurlconnection afnetworking http-status-code-403


【解决方案1】:

我能找到的最简单的解决方案是在我的 Django 服务器的响应中添加一个自定义标头,并在客户端验证标头以确保它来自服务器而不是热点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 2020-07-10
    • 1970-01-01
    • 2011-10-26
    相关资源
    最近更新 更多