【发布时间】:2016-01-11 12:55:31
【问题描述】:
我正在尝试使用 Node.js(使用 http.createServer())创建一个应用程序,这将是一个通过 XMLHttpRequest 请求数据的单页应用程序。为此,我需要能够区分导航到我的域的用户、AJAX 请求和浏览器为链接资源生成的请求。
如果请求来自用户,我总是希望返回 index.html 页面,该页面将处理请求内容,但如果请求是浏览器生成或 AJAX 并且针对 CSS、Javascript 或其他链接文件,我想提供这些文件.有什么方法可以检测到吗?
查看不同文件类型的请求标头,我看到在页面生成内容请求时出现了referer 标头。我认为这是我正在寻找的解决方案,但是当用户单击页面链接时也会设置该标题,使其无用。
似乎唯一改变的是accept 标头,它可以工作,但可能不是一个包罗万象的解决方案。无论输入哪个 url,任何用户请求似乎总是将text/html 作为首选返回类型。我可以检测到这一点,但我很确定对 html 文件的 AJAX 请求也会有 accept 标头,这会导致问题。
这里有什么我遗漏的(我可以查找的任何标题或属性)吗?
编辑:我不需要保护文件的解决方案,我也不关心用户用自己的请求绕过它。我的目的不是隐藏文件或使它们安全,而是将请求的任何数据保留在应用程序的范围内。
例如,如果用户导航到 http://example.com/images/someimage.jpg,他们会看到 index.html 文件,然后该文件可以在更丰富的上下文中显示图像,并包含所有链接和功能。
TL/DR:我需要检测何时有人尝试访问该应用,然后为他们提供索引页面并让他们发送他们想要的内容。我还需要检测浏览器何时请求了应用程序所需的资源(JS、CSS、HTML、图像等),以便能够实际返回资源而不是索引文件。
【问题讨论】:
-
如果这是为了阻止水蛭抓取数据,那么您将面临数据的重要性。如果没有,用户是否会意外发现并发送除 index.html 之外的其他请求?
-
你想做的和快递做的有什么不同?
标签: javascript node.js http http-headers