【问题标题】:How to know if site is being accessed with AJAX request如何知道网站是否被 AJAX 请求访问
【发布时间】:2012-04-15 17:36:33
【问题描述】:

所以,我有一个用于我的顶级站点的 API,我将它提供给我的用户放在他们的页面上。

API:

<script type="text/javascript">

 var id = 21;

 $(document).ready(function(){
      $.getJSON("http://topsite.com/index.php?page=vote", { id: id, hasVoted: 'unknown' }, function(data) {
           if(data == 2) {
                window.location.replace("http://topsite.com/index.php?page=vote&id=" + id);
           }
      });
 });

所以,基本上我想要做的是避免我的客户将此代码放在他们的网站上:

<script type="text/javascript">$.getJSON("http://topsite.com/index.php?page=vote&id=21");</script>

因为我希望用户被重定向到我的网站,这样我就可以从广告中赚取一些钱,甚至向他们展示一些信息。

所以,我想知道是否有任何方法可以知道何时使用 ajax 请求访问网站,或者如果设置了 hasVoted 参数,是否有方法禁用 AJAX 请求。

感谢任何帮助,谢谢!

编辑:从带有“hasVoted”参数的站点重定向到其他页面时,我将发送自定义标头。

编辑问题:我将如何继续发送带有位置的自定义标头?还是我离这儿很远?

【问题讨论】:

    标签: php jquery ajax api jsonp


    【解决方案1】:

    非正式地,许多 AJAX 库添加了一个名为 X-Requested-With 的自定义 HTTP 标头并将值设置为 XMLHttpRequest。您可以检查该标头并查看它是否设置为该值,在这种情况下,一个很好的假设是它是一个 AJAX 请求。

    但是,没有标准,如果你直接构建一个 XMLHttpRequest(即,实现你自己的 AJAX 代码),那么没有真正的方法来判断。

    【讨论】:

    • 我实际上正在考虑在设置“hasVoted”参数时发送自定义 HTTP 标头。然后在另一个页面上检查它是否已设置,这行得通吗?
    • 那行得通。已经为其他目的完成了(如果请求由特定的 ajax 请求发出,则发送不同的模板)
    • 但请注意,即使这也是伪造的.. 如果有人查看 hasVoted 请求或查看标题.. 然后他可以添加它。我认为如果有人真的想伪造身份来获取您的数据,您将很难避免它。
    • 我明白了。好吧,我宁愿让任何想要这样做的人都很难。顺便说一句,我将如何继续发送带有位置的自定义标头?还是我离这儿很远?问题已添加到主帖。
    • 可能(或不)感兴趣:stackoverflow.com/questions/3759575/…
    【解决方案2】:

    首先,ajax 请求不会像那样跨域工作。该代码不适用于除 topsite.com 及其子域之外的任何网站。

    但是,没有什么可以阻止任何人通过服务器端脚本解析内容。并且没有可能完全阻止人们下载它(你可以让它变得困难,但只要它是公开的,人们就可以下载它)

    【讨论】:

    • @Manuel, jsfiddle.net/HSWTJ 它向我抛出一个错误,说由于跨域策略问题而无法访问该域。
    • topsite.com 是一个虚拟域,而不是我的网站,因为我不需要发布该域。
    • 它甚至没有提出请求......实际的域是无关紧要的。 domainx.com 无法对 domainy.com 进行 ajax 调用。正如我、Eli 和 NiftyDude 所指出的,它被所有现代浏览器使用的同源策略锁定。
    • 请启发我,然后有 50 多个网站正在使用该 API,并且一切都运行良好。
    • 其实这50个站点都包含一个脚本,但是并没有让用户的浏览器发出http请求,不是吗?
    【解决方案3】:

    也许通过检查用户代理?

    【讨论】:

    • 如果你做类似的事情(这很糟糕......)在你的页面中有效地获取数据,比如在 DOM-ready 的 ajax 请求或什么的? getJSON 不执行 client-JS 对吗?
    猜你喜欢
    • 2017-06-16
    • 2014-05-06
    • 2013-05-08
    • 2016-09-08
    • 2011-04-21
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 2011-11-24
    相关资源
    最近更新 更多