【发布时间】:2011-11-30 07:37:03
【问题描述】:
假设我有一个脚本需要在服务器上记录一些内容。我有一个像http://myServer.com/recordLog 这样的端点,我可以用一些参数来实现它,它会记录下来。一些警告:
- 我可以控制服务器返回的内容
- 这将每天发生数百万次。
- 效率至关重要。
- 脚本可能是从另一台服务器和 iframe 中加载的,因此存在浏览器安全问题。
- 我根本不关心响应。就算出现通讯故障,我也不会做任何事情。
- 我不能做任何影响页面其余部分状态的事情。
我的第一个想法是进行 ajax 调用——这似乎是一种“现代”、“正确”的方式。但是,在某些情况下,这可能会引发跨域安全问题。
我的另一个想法是将 1x1 像素图像或空的<script> 加载到内存中。比如:
var i = new Image;
i.src = "http://myserver.com/recordLog?foo=bar&baz=buz"; // returns 1x1 gif
或:
// this is similar to ajax-p, I suppose
var s = document.createElement('script');
s.type= 'text/javascript';
s.src= "http://myserver.com/recordLog?foo=bar&baz=buz"; // returns empty text file
我很确定没有必要将图像或脚本放入 DOM。仅仅设置 src 就会导致浏览器发出请求。
这两个非常相似。一般标准似乎是使用像素,但我认为这是一个保留。我认为空脚本会稍微小一些。两者有什么优势?
还有其他想法/方法吗?任何我没有想到的隐藏问题(例如,可能无法按预期工作的古老浏览器)?
【问题讨论】:
-
您需要对记录器进行身份验证吗?即,您是否关心攻击者是否可以用伪造的日志消息填充您的日志?
-
什么跨域安全问题?你能详细说明一下吗?
标签: javascript ajax logging