发送跨域请求以记录数据

Send a cross-domain request to log data

本文关键字:记录 数据 请求      更新时间:2023-09-26

我正在一个广告平台上工作。当有人点击图像时,我想向服务器发送一个请求,以记录此操作。我有一个预先生成的url。如果我向这个url发送请求,它会记录数据。

我的问题是日志url在我的域上,而javascript是在客户端的域中执行的。在不修改日志php脚本的情况下(添加类似Access Control Allow Origin:*的内容),有没有办法将此请求发送到新域?

由于我只记录数据,服务器只发送回文本"OK"(这是我不需要的信息)。

您应该能够向任何域发送Ajax HTTP请求。我不知道问题出在哪里…是受同源政策限制的响应,而不是请求本身。如果域不匹配,则无法访问PHP脚本的响应,但服务器将正常处理请求,即使请求来自不同的域。

这是一个破解,但它很常用。单击将图像附加到DOM,src设置为日志URL。为了友好起见,日志URL的输出是1x1像素的图像。您必须通过GET字符串传递参数,但这是可行的。

在域(image或iframe)上创建任何具有源的动态DOM元素,并将日志数据附加到请求中。

var logData = function(data){
if(data === undefined){
    return;
}
var img=document.createElement("img");
img.setAttribute('src', 'http://another.domain?'+data);
img.setAttribute('height', '1px');
img.setAttribute('width', '1px');
document.body.appendChild(img);}

您的日志请求现在将显示在IIS日志

跨域脚本限制是在浏览器级别强制执行的,作为安全预防措施,因此没有简单的代码修复来解决这些问题。但是,您可以将JSONP(带填充的JSON)作为一个起点。

您可以创建一个隐藏的iframe,其中src属性设置为日志URL。这至少和上面列出的图像方法一样丑陋。