【问题标题】:javascript set header Access-Control-Allow-Origin [duplicate]javascript设置标题Access-Control-Allow-Origin [重复]
【发布时间】:2018-06-24 02:46:30
【问题描述】:

我正在使用 POST 测试 JS。但我没有成功。

使用代码:

<!DOCTYPE html>
<html>
<body>

<div>
testing js...
</div>

<script>
function upload() {
    var method = "POST";
    var url = "http://127.0.0.1:9000/push";

    var xhr = new XMLHttpRequest();

    xhr.open(method, url);

    xhr.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
    xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
    
    var text = {"command":"PUSH"};
    xhr.send(text);

}         
upload();
</script>

</body>
</html>

我收到以下错误:

奇怪的是,请求标头没有通过该行正确设置:

xhr.setRequestHeader("Access-Control-Allow-Origin", "*");

请求头是这样的:

【问题讨论】:

  • 您也必须在您的服务器上启用跨域访问。
  • xhr.setRequestHeader — 这是一个 response 标头,而不是请求标头!
  • “奇怪的是请求标头没有被正确设置”——因为它不是一个安全的请求标头,所以浏览器会先请求服务器的许可……但是如上所述,它首先不属于请求。
  • var text = {"command":"PUSH"}; — 这是一个对象,而不是文本。

标签: javascript xmlhttprequest request-headers


【解决方案1】:

查看 XHR 响应: 存在访问控制允许来源, Origin 为空,因为您是从本地系统执行它,上传到服务器以查看填充的源。

function upload() {
    var method = "POST";
    var url = "http://127.0.0.1:9000/push";

    var xhr = new XMLHttpRequest();

    xhr.open(method, url);

    xhr.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
    xhr.setRequestHeader("Access-Control-Allow-Origin", "*");

    var text = {"command":"PUSH"};
    xhr.send(text);

}

$(document).ready(function(){
$('.upload').click(upload);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<button class="upload">Upload</button>

【讨论】:

  • 虽然这会导致浏览器发送 Origin 标头,但问题是关于 Access-Control-Allow-Origin 标头(首先不属于请求)。
  • Access-Control-Allow-Origin 存在,但无法确定来源。
  • 你的麻烦是在你的服务器端。您需要允许任何来源(*)并检查,因为您正在发送一个对象,因此您需要在您的请求中设置您正在发送一个 json。
  • 这个答案非常具有误导性。根据请求设置Access-Control-Allow-Origin 标头完全没用
猜你喜欢
  • 2016-10-29
  • 2016-07-21
  • 2018-02-17
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
  • 2018-11-17
  • 2015-12-10
  • 1970-01-01
相关资源
最近更新 更多