xhr.js:196 Refused to set unsafe header "Origin"
时间: 2023-12-31 13:05:53 浏览: 34
这个错误通常出现在使用 XMLHttpRequest 对象时手动设置了 `Origin` 请求头,并且 `Origin` 的值为非法值,例如 `null` 或 `undefined`。
在浏览器的安全策略中,有些请求头是被允许的,有些则是被禁止的。其中,`Origin` 请求头是被浏览器禁止使用的“不安全”请求头之一,因此,如果手动设置了 `Origin` 请求头,并且设置的值为非法值,浏览器就会抛出 `Refused to set unsafe header "Origin"` 的错误。
如果确实需要手动设置 `Origin` 请求头,可以通过以下两种方式避免这个错误:
1. 设置 `withCredentials` 属性为 `true`:
```
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.open('POST', 'https://www.example.com/api');
xhr.setRequestHeader('Origin', 'http://www.mywebsite.com');
xhr.send(formData);
```
在这个示例中,我们设置了 `withCredentials` 属性为 `true`,表示允许跨域请求发送 cookies 和认证信息。这样做的好处是,浏览器会自动添加一个合法的 `Origin` 请求头,避免了手动设置的问题。
2. 使用其他合法的请求头代替 `Origin` 请求头:
```
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://www.example.com/api');
xhr.setRequestHeader('X-My-Origin', 'http://www.mywebsite.com');
xhr.send(formData);
```
在这个示例中,我们使用了自定义的 `X-My-Origin` 请求头代替了 `Origin` 请求头。这样做的好处是,不会触发浏览器的安全策略,避免了 `Refused to set unsafe header "Origin"` 的错误。