如何确定每个 HTTP 请求的来源

Posted

技术标签:

【中文标题】如何确定每个 HTTP 请求的来源【英文标题】:How to determine who is the origin of every HTTP request 【发布时间】:2019-06-21 13:50:07 【问题描述】:

来源 (Access-Control-Allow-Origin) 是否由向我提供发送 HTTP 请求的脚本文件的服务器确定?


如果我是对的,那么有时我网站的脚本文件可能来自多个服务器。浏览器必须有一些关于每个脚本文件是从哪里下载的注释。我在哪里可以找到最新的 chrome 中的这些信息? 另外,我怎么可能有一个网站从服务器 A 接收他的脚本文件并向服务器 B 发送 HTTP 请求(每个服务器都有不同的域),服务器 A 有 Access-Control-Allow-Origin=* 而服务器 B 没有指定 @987654323 @ 但一切正常?

如果我错了,我该如何确定谁是 HTTP 请求的来源?

【问题讨论】:

this:我在哪里可以在 chrome latest 中找到此信息? 在开发工具网络面板中。 我在那里看不到。你能具体说明一下在哪里吗? 每一个请求的URL都可以找到……显然你不知道Origin的定义? 此外,源是由用于访问基本资源(通常是 html 文件)的请求 URL 建立的。 【参考方案1】:

来源(Access-Control-Allow-Origin)是否由向我提供发送 HTTP 请求的脚本文件的服务器确定?

没有。

它允许在其他网站上运行的 javascript 从您的网站读取数据,这些数据通常会被同源策略阻止。

JavaScript 的起源无关紧要。它是包含 <script> 元素的 HTML 文档的来源,它加载了重要的 JavaScript。

浏览器必须有一些关于每个脚本文件从哪里下载的注释。我在哪里可以找到 chrome latest 中的这些信息?

浏览器开发者工具的网络标签。

另外,我怎么可能有一个网站从服务器 A 接收他的脚本文件并向服务器 B 发送 HTTP 请求(每个服务器都有不同的域),服务器 A 有 Access-Control-Allow-Origin=*并且服务器 B 没有指定 Access-Control-Allow-Origin 但一切正常?

来源是由 HTML 文档的 URL 决定的,而不是脚本。

如果我错了,我该如何确定谁是 HTTP 请求的来源?

来自 XHR 或 Fetch 的跨域请求将包含一个 Origin HTTP 请求标头。

【讨论】:

以上是关于如何确定每个 HTTP 请求的来源的主要内容,如果未能解决你的问题,请参考以下文章

确定当前环境和请求来源 - 需要定义变量

来自除 localhost 之外的每个来源的 CORS 策略阻止的对外部 API 的 HTTP 请求

如何在php中获取http请求来源

如何使用 PHP 获取请求的来源?

如何确定 HTTP Servlet 请求的内容类型?

Ruby on Rails,如何确定请求是由机器人还是搜索引擎蜘蛛制作的?