如何限制API只能在浏览器中运行?

我正在使用节点js,我把政策限制在api的浏览器的保证。为此,我把以下条件

app.route('/students').all(policy.checkHeader).get(courses.list) exports.checkHeader = function(req, res, next) { var headers = req.headers; if ( headers['upgrade-insecure-requests'] || headers['postman-token']) { res.status(401).json('Page not found'); } else { return next(); } } 

我不知道我的过程是否正确。我正在寻找只存在于浏览器中的公共参数(header-parameter)。是否有人可以帮助我。谢谢。

这是不可能的。

您无法控制哪些types的客户端向您的HTTP服务器发出HTTP请求。

您无法可靠地确定哪种types的客户提出了您收到的请求。

可以通过任何自定义客户端发送(或不发送)具有任何值的升级不安全请求标头。 同上邮递员令牌。 同上用户代理。 同样一切。

限制它的唯一方法是在请求中要求某种秘密。 如果您想要常规的网页浏览器访问它,那么秘密将通过浏览器开发者工具泄露。

我不认为有可能真正阻止没有身份validation/授权的请求。 但是,您可以使用HTTP标头的用户代理字段

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html