Cors fetch()带有跨域原因JSON.parse错误

Cors fetch()带有跨域原因JSON.parse错误,cors,fetch,Cors,Fetch,我试图将fetch()用于跨域,但遇到了异常错误。我在http://example2.com/index.html let url = "https://example1.com/login"; fetch(url, { "method":"POST", "content-type":"application/x-www-form-urlencoded", "mode":"no-cors", "headers":{

我试图将fetch()用于跨域,但遇到了异常错误。我在
http://example2.com/index.html

let url = "https://example1.com/login";
fetch(url,
        {
        "method":"POST",
        "content-type":"application/x-www-form-urlencoded",
        "mode":"no-cors",
        "headers":{
                "Authorization":"Basic johnjohn",
                "Auth-Secret":"johnsecretpassword",
        }
})
.then(response=>response.text())
.then(content=>{
        console.log(content); // prints empty line
        json = JSON.parse(content);
})
.catch(e=>console.log(`Error occurred: ${e}`));
当我运行这个脚本时,我的
console.log(content)
打印一个空行,我的
JSON.parse(content)
给出一个
错误:SyntaxError:JSON.parse:JSON数据的第1行第1列出现意外的数据结尾
错误

当我进入FireFox开发者控制台,单击网络,单击响应,我确实看到了以下负载:

response.text()
更改为
response.json()
会触发带有相同json解析错误的
catch

还有,我的
https://example1.com/login
是一个包含以下内容的php文件:

<?php
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Authorization, Auth-Secret, Content-Type');

die(json_encode(array("data"=>"authorization","status"=>"fail")));

感谢@Amy在我上面的评论。这两项更改解决了问题:

我将这一行添加到我的
login.php

header('Access-Control-Allow-Headers: Authorization, Auth-Secret, Content-Type');
我删除了我的
index.html
中的行
“mode”:“no cors”


这样,我的
index.html
将尊重CORS,我的
login.php
已准备好访问其他标题。

您不能使用带有授权凭据的
访问控制允许源代码:
。如果使用凭据,则必须显式指定域名。我尝试在PHP脚本和JavaScript fetch()中将
授权重命名为
Blah1
,将
Auth Secret
重命名为
Blah2
。但我还是犯了同样的错误。Blah1和Blah2不应该允许我绕过服务器端或客户端使用的任何默认授权过程吗?CORS不允许非标准头,除非您明确允许,但我认为它不会拒绝请求;它只会拒绝访问这些标题。请参阅关于CORS允许的标题。谢谢,我添加了
标题('Access-Control-Allow-headers:Authorization,Auth Secret,Content Type')到我的PHP脚本,但仍然是相同的问题。明天我得再研究一下。哦,当PHP脚本和javascript都使用SSL在同一顶级域时,问题就不存在了。我刚刚注意到您有
“模式”:“无cors”,
。我想这应该是“cors”