Javascript 检查请求是否来自web而非手动

Javascript 检查请求是否来自web而非手动,javascript,ruby-on-rails,api,request,Javascript,Ruby On Rails,Api,Request,我在js中有一个简单的自动完成脚本,它接受用户类型,将其发送到服务器,服务器检查与之相似的数据。工作得很好 $(".name_autocomplete").autocomplete({ serviceUrl: '/names', onSelect: function (suggestion) { $(this).value = suggestion; } }); 但由于该服务器端点是公共的,我不希望用户滥用它,并让

我在js中有一个简单的自动完成脚本,它接受用户类型,将其发送到服务器,服务器检查与之相似的数据。工作得很好

$(".name_autocomplete").autocomplete({
        serviceUrl: '/names',
        onSelect: function (suggestion) {
            $(this).value = suggestion;
        }
    });
但由于该服务器端点是公共的,我不希望用户滥用它,并让它通过bruteforce吐出所有内容


在客户端或服务器端是否有办法限制对该url的请求仅来自该特定页面上的网站,而不是来自诸如curl之类的内容?

最简单的选择是在没有用户代理字符串的情况下断开连接,与属于已知bot的用户代理字符串类似。当然,如果您的用户足够聪明,可以使用curl,那么他们可能知道如何使用一个假的用户代理。默认情况下,curl不会发送用户代理字符串,因此这只会阻碍随意的好管闲事者

对于nginx:

if ($http_user_agent ~ (agent1|agent2) ) {
  return 444;
}

也许HTTP访问控制可以帮助您与设置良好的用户代理结合使用:

您可以控制源域并决定允许访问哪个域,不允许访问哪个域