【问题标题】:Access-Control-Allow-Origin: Access for all users just to one siteAccess-Control-Allow-Origin:所有用户只能访问一个站点
【发布时间】:2020-03-18 10:25:39
【问题描述】:

我目前正在编写一个 php 网站,该网站从我的服务器的 json 文件中读取某些值。 现在,当我向服务器请求 xmlhttp 请求时,我在控制台中收到 Access-control-allow-origin ERROR。我已经发现我必须设置 Access-control-allow-origin: *;在我的 Apache 配置中,但我不想使用 * 因为我不想让每个人都可以访问我的网站。那么我怎样才能只为每个客户端授予一个 json 文件的权限呢?

var requestURL = 'https://myWebsite/blabla.json';
var request = new XMLHttpRequest();
request.open('GET', requestURL);
request.responseType = 'json';
request.send();

request.onload = function() {
  var response = request.response;
  jackpot = response.items[0].value;

  var inner = document.getElementById("myid");
inner.innerHTML = jackpot+" EURO";

这是我的 js 代码,我总是得到错误,除了我使用 Access-control-allow-origin: *,我不想使用它,因为它没有保存。

请注意我对网络编码不太熟悉,所以我不是很专业抱歉。

【问题讨论】:

  • 您必须列出允许向您的服务器 URL 发出跨域请求的 URL(在此上下文中称为“源”),而不是 *。从这些来源之一加载的任何网页都将能够发出跨域请求。 (好吧,实际上您可能还需要一些其他标头,但并不总是那么简单。The CORS documentation 可以为您提供更多信息。
  • 是的,我知道,但我还不知道哪些网站会包含我的脚本,所以我需要让每个人都可以访问,但仅限于这个 json 文件,而不是我的洞网站。
  • "但仅针对这个 json 文件"...在这种情况下,您必须检测正在请求哪个 URL,并且仅在请求该 URL 时发出访问控制标头。跨度>
  • P.S. “我需要让每个人都可以访问”和“我不想使用 * 因为我不想让每个人都可以访问”直接相互矛盾。请下定决心要达到的目标。您想要授予每个人访问一个文件的权限,或者您想要授予一些站点访问一个或多个 文件。
  • 那么我必须在哪里设置访问控制允许来源属性?在 php 脚本中?我目前在apache配置中设置它。但是在脚本中也可以吗?

标签: javascript php json apache server


【解决方案1】:

在您的 PHP 后端,只允许您的域使用 Access-control-allow-origin 而不是 *。这样就安全了。

【讨论】:

  • 是的,我已经知道了,但是我还不知道哪些网站会包含这个 js 脚本,所以我不能列出它们,因为我还不知道它们,所以我想让每个人都可以访问,但仅限于这个 json 文件,而不是洞网站。
猜你喜欢
  • 2018-02-28
  • 2017-06-15
  • 2019-07-25
  • 2014-04-16
  • 2015-09-03
  • 2017-07-15
  • 2016-04-22
  • 1970-01-01
  • 2017-10-04
相关资源
最近更新 更多