如何识别Flash与JavaScript客户端发出的请求?
问题描述:
在服务器上,是否可以识别由运行在浏览器中的Flash客户端发出的请求与由常规XMLHttpRequest发出的请求?如何识别Flash与JavaScript客户端发出的请求?
我注意到,请求使用闪光灯做,有这样的标题:
X-Requested-With:ShockwaveFlash/25.0.0.127
这是一个标准的头,或者这是行为不同的浏览器\ Flash版本有什么不同?
答
您可以使用HTTP标头Referer
来检查请求是否由Flash或JavaScript进行。如果请求是由Flash创建的,那么Referer
将是.swf对象的URL。因此,如果Referer
URL包含.swf
资源,则该请求必须来自Flash。
根据ActionScript 3.0 document,Referer
是一个受限制的标题,不能由最终用户定义。在JavaScript方面,除非JS程序员入侵,否则很难看到Referer
为.../xxx.swf
的HTTP请求。
对于X-Requested-With
,它不是一个标准的HTTP头,也不可信任。即使在URLRequest API中,X-Requested-With
也不受限制,可由最终用户定义,请参阅doc。
考虑到您可以在Flash中打开原始套接字的事实,可以随时复制“regular”xhr的用户代理/头并通过套接字发送。那么你将如何区分这些请求呢?即使存在差异,谁保证不同版本的不同浏览器会保持这种差异? –
XMLHttpRequests应该有一个类似的头文件'X-Requested-With:XMLHttpRequest'。这些不能被依赖,因为它们可能被欺骗,但我认为Flash标头在通用客户端检测方面非常可靠。 – lofihelsinki
@lofihelsinki我只需要能够区分闪光灯,以便听起来像它可以覆盖大多数情况。 – Lizozom