我注意到,当Android-OS设备上的用户访问我的网站时,每个页面上不断发生两个请求。第一个是普通浏览器,第二个是来自“Dalvik”的浏览器。例子:

“GET/HTTP/1.1” 200 2126“-”“Mozilla/5.0(Linux; Android 5.0.2; SAMSUNG SM-G925F/G925FXXU1AOD8 Build/LRX22G)AppleWebKit/537.36(KHTML,例如Gecko)SamsungBrowser/3.0 Chrome/38.0。 2125.102移动Safari/537.36“1229 2802

“GET/HTTP/1.1” 200 2117“-”“Dalvik/2.1.0(Linux; U; Android 5.0.2; SM-G925F Build/LRX22G)” 546 8729

据我了解,第一个请求来自实际的浏览器,另一个请求来自运行该浏览器的虚拟机(Dalvik)。问题在于Dalvik请求没有使用相同的Cookie和/或POST数据,这会触发服务器端错误。例如,当用户注册帐户时。普通浏览器通过POST数据发送数据,但是Dalvik请求只是对操作网址执行GET操作。同样,如果用户登录,Dalvik将在基于权限的页面上尝试GET,这可能会将其重定向到其他地方,因为没有 session 。

用户没有遇到任何实际问题(据我所知),但是,我们在错误日志记录中注意到了这些尝试。所以我的问题是:如果浏览器代理指示“Dalvik/..*”,我可以安全地阻止所有访问尝试吗?对使用者有不利影响吗?考虑到与Dalvik相关的请求实际上并未重新发布真实数据或进行 session ,因此似乎不太可能。但是,希望有更多使用Android经验的人可以提供一些反馈,例如,我是否应该发出特定的HTTP header /状态代码,例如“401未经授权”或“400错误的请求”?

任何帮助,将不胜感激。

最佳答案

每当浏览器/WebView无法呈现特定的服务器响应(可能是PDF,流服务器等),然后触发操作系统打开另一个应用程序的 Intent 时,就会发生这种情况。 VM(Dalvik)负责处理此路由,在此过程中,可以将文件下载到设备,以便另一个应用程序可以访问它(通常,应用程序不能访问彼此的文件,但是另一个应用程序需要该文件来呈现它)。
至关重要的是,它会在启动 Intent 之前先下载文件,然后文件最终下载两次:一次由浏览器确定它不知道如何处理,一次由Dalvik使其可以将file:// URL传递给应用程序您可能会启动也可能不会启动。

关于android - 我可以安全地阻止Dalvik浏览器代理请求吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38223027/

10-12 03:11