javascript中CORS的htaccess

Posted

技术标签:

【中文标题】javascript中CORS的htaccess【英文标题】:htaccess for CORS in javascript 【发布时间】:2018-03-26 14:59:02 【问题描述】:

(注意:在网络活动选项卡中,就在 login.php 之前,在 localhost:8080 上,我希望看到一些通知,指出 .htaccess 已被访问,但它不存在。但是,我现在知道了它正在被访问,因为我查看了 Apache 的错误日志文件并发现了这个:

[Sat Oct 14 21:57:01.943348 2017] [core:alert] [pid 3944:tid 1172] [client ::1:57586] C:/wamp64/www/mysite/phpgeneral/.htaccess: Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration, referer: http://localhost:52656/mysite/index.html
[Sat Oct 14 21:58:39.918523 2017] [core:alert] [pid 3944:tid 1164] [client ::1:57599] C:/wamp64/www/mysite/phpgeneral/.htaccess: Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration, referer: http://localhost:52656/mysite/index.html

我的 `.htaccess 文件完全按照下面的方式编写。这些命令是否应该包含一些东西?

原始问题。

我正在发出跨源脚本请求:

var url = "http://localhost:8080/mysite/login.php";
var method = "POST";
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) 
    // XHR for Chrome/Firefox/Opera/Safari.
    xhr.open(method, url, true);
 else if (typeof XDomainRequest != "undefined") 
    // XDomainRequest for IE.
    xhr = new XDomainRequest();
    xhr.open(method, url);
 else 
    // CORS not supported.
    xhr = null;


if (!xhr) 
    return;

// Response handlers.
xhr.onload = function (data) 
    if (data.srcElement) 
        var json = eval('(' + data.srcElement.response + ')');
        MyCallback(json);
    
;
xhr.onerror = function (data) 
    alert("Error (Process Failure): " + textStatus + " (" + errorThrown + ")");
;
xhr.send();

在 login.php 所在的目录中,.htaccess 中有以下内容:

# Always set these headers.
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Max-Age "1000"
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
# Added a rewrite to respond with a 200 SUCCESS on every OPTIONS request.
RewriteEngine On
RewriteCond %REQUEST_METHOD OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]

我得到错误:

SEC7120: Origin http://localhost:52656 not found in Access-Control-Allow-Origin header.
SCRIPT7002: XMLHttpRequest: Network Error 0x80700013, Could not complete the operation due to error 80700013.

谁能告诉我如何让这个跨源脚本工作?

【问题讨论】:

【参考方案1】:

.htaccess中的set改为add

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header add Access-Control-Max-Age "1000"
Header add Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"

【讨论】:

感谢回复,但还是同样的两个错误。 (我先关闭了 Wamp 并根据需要重新启动。)【参考方案2】:

提供完整的域对我有用

Header set Access-Control-Allow-Origin "yourdomain.com"

【讨论】:

感谢回复,但是php脚本所在的目录并不知道该脚本将被调用的所有域。【参考方案3】:

@user4035 在另一个帖子中回答了这个问题

尝试在 Apache 配置中加载 headers_module

【讨论】:

以上是关于javascript中CORS的htaccess的主要内容,如果未能解决你的问题,请参考以下文章

在javascript中使用xmlhttprequest“CORS问题-403禁止”[重复]

javascript [在服务器上启用CORS]允许服务器请求CORS #javascript #node #cors

在 javascript 中使用 fetch 请求 API 存在 CORS 策略错误

Javascript CORS 图像/画布操作

由于被CORS策略(javascript,html和css)阻止,程序在Firefox中运行但不是chrome

Javascript 和 .NET Minimal API 中的 CORS 策略