2017-04-05 34 views
4

在服务器上,是否可以识别由运行在浏览器中的Flash客户端发出的请求与由常规XMLHttpRequest发出的请求?如何识别Flash与JavaScript客户端发出的请求?

我注意到,请求使用闪光灯做,有这样的标题:

X-Requested-With:ShockwaveFlash/25.0.0.127 

这是一个标准的头,或者这是行为不同的浏览器\ Flash版本有什么不同?

+1

考虑到您可以在Flash中打开原始套接字的事实,可以随时复制“regular”xhr的用户代理/头并通过套接字发送。那么你将如何区分这些请求呢?即使存在差异,谁保证不同版本的不同浏览器会保持这种差异? –

+1

XMLHttpRequests应该有一个类似的头文件'X-Requested-With:XMLHttpRequest'。这些不能被依赖,因为它们可能被欺骗,但我认为Flash标头在通用客户端检测方面非常可靠。 – lofihelsinki

+0

@lofihelsinki我只需要能够区分闪光灯,以便听起来像它可以覆盖大多数情况。 – Lizozom

回答

1

您可以使用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