我有一个通过 XMLRPC 连接到 Django 服务器的 iOS 应用程序(协议并不重要)。身份验证使用标准 cookie 进行持久化,并由AFNetworking
via透明地处理NSURLConnection
。当请求未通过身份验证时, Django XMLRPC 库会返回403
错误,并且当发生这种情况时,应用程序会向用户显示登录页面。这种方法已经运行了几年。
一个连接到 WiFi 热点但未通过热点进行身份验证的用户最近出现了一个问题。他们加载了应用程序并显示了登录页面,这一定是403
从热点返回错误的结果。如果他们首先使用热点进行身份验证,那么一切正常。
我正在尝试找到一种解决方案来防止我的应用程序将此类403
错误解释为身份验证失败。我假设正在发生两件事之一:
- 热点重定向到返回
403
错误的 URL;或者 - 热点立即返回
403
错误。
第一种情况很容易通过阻止301
和302
重定向来管理。幸运的是,AFNetworking
这很容易。
第二种情况更困难,我看不出有什么办法知道403
起源。
有谁知道标头中是否还有其他内容可以检测 a 的来源403
,或者是否有在未登录热点时重定向请求的标准做法?
编辑
这是我的 Django 服务标头在 a 上的样子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=/