我有一个iOS应用程序通过XMLRPC连接到Django服务器(协议并不重要)。身份验证通过标准Cookie持续存在,并通过AFNetworking
通过NSURLConnection
进行透明处理。当请求未通过身份验证时,Django XMLRPC库会返回403
错误,如果发生这种情况,应用程序会向用户显示登录页面。这种方法在几年内运行良好。403无线热点错误
最近出现的问题是连接到WiFi热点但未通过热点认证的用户。他们加载了应用程序并显示登录页面,该页面一定是从热点返回的403
错误的结果。如果他们首先验证热点,那么一切正常。
我试图找到一种解决方案,以防止我的应用程序将此类403
错误解释为失败的身份验证。我假设有两件事情发生:
- 热点重定向到一个URL,返回
403
错误;或 - 该热点立即返回
403
错误。
第一种情况很容易通过阻止301
和302
重定向进行管理。幸运的是,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=/
您可以记录返回的标题以查看可用内容。你有权修改Web服务吗? – Wain 2013-04-28 07:23:00
我很遗憾所讨论的热点位于世界的另一边,所以我无法检查。我编辑我的问题,以显示我的web服务的头像是什么样的......没有什么用处。 – chris 2013-04-28 07:28:25
现在我想到了......我可以创建一些中间件来向HTTPRepsonse添加一些内容以识别响应的来源......看起来像是一种黑客。 – chris 2013-04-28 07:52:02