xhr.js:196 Refused to set unsafe header "Origin" axios请求添加不了Origin 可以用别的方法添加Origin吗
时间: 2024-03-29 18:41:30 浏览: 126
不建议使用任何方法来绕过浏览器的安全策略来设置 Origin 请求头。因为这可能会导致安全漏洞,攻击者可以伪造请求头来伪装成其他域名的请求,从而进行 CSRF 攻击等恶意行为。
如果您想要设置 Origin 请求头,可以考虑使用 Node.js 等非浏览器环境来发起请求。在这种情况下,您可以使用任何请求头。
如果您想要在浏览器环境下设置 Origin 请求头,可以考虑使用代理服务器来转发请求并添加 Origin 请求头。您可以在代理服务器上设置 Origin 请求头,然后将请求转发到目标服务器。
相关问题
Access to XMLHttpRequest at 'http://localhost:8080/springprojecttraining/api/updateUser' from origin 'http://localhost:8081' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. xhr.js:160 POST http://localhost:8080/springprojecttraining/api/updateUser net::ERR_FAILED 200 dispatchXhrRequest @ xhr.js:160 xhrAdapter @ xhr.js:11 dispatchRequest @ dispatchRequest.js:59 Promise.then (async) request @ Axios.js:51 Axios.<computed> @ Axios.js:71 wrap @ bind.js:9 submitForm @ user.vue:346 click @ user.vue:407 invokeWithErrorHandling @ vue.esm.js:3735 invoker @ vue.esm.js:1552 invokeWithErrorHandling @ vue.esm.js:3735 Vue.$emit @ vue.esm.js:2821 handleClick @ element-ui.common.js:9465 invokeWithErrorHandling @ vue.esm.js:3735 invoker @ vue.esm.js:1552 original_1._wrapper @ vue.esm.js:8013 createError.js:16 Uncaught (in promise) Error: Network Error at createError (createError.js:16:1) at XMLHttpRequest.handleError (xhr.js:69:1)为什么报错 如何解决呢
这是因为浏览器实施了同源策略(Same-Origin Policy)限制,导致从一个源访问另一个源时会被拒绝,特别是在前端使用JavaScript发起Ajax请求时。在这种情况下,需要进行跨域资源共享(CORS)配置。
解决方法如下:
1. 在服务器端配置CORS,允许指定的源或所有源访问:
- 允许指定源访问:
在服务器端的响应中添加Access-Control-Allow-Origin头,指定允许访问的源,例如:
```
Access-Control-Allow-Origin: http://localhost:8081
```
- 允许所有源访问:
在服务器端的响应中添加Access-Control-Allow-Origin头,指定允许所有源访问,例如:
```
Access-Control-Allow-Origin: *
```
2. 在前端使用代理服务器(Proxy)转发请求,以绕过浏览器的同源策略限制。
例如,使用Vue.js,可以在vue.config.js中添加以下配置:
```
module.exports = {
devServer: {
proxy: {
'/springprojecttraining': {
target: 'http://localhost:8080',
changeOrigin: true
}
}
}
}
```
这样,在前端使用axios等工具时,只需要将请求的URL改为代理服务器地址,例如:
```
axios.post('/springprojecttraining/api/updateUser', data)
```
这样就可以解决跨域问题了。
isURLSameOrigin.js:57 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'protocol') at isURLSameOrigin (isURLSameOrigin.js:57:1) at dispatchXhrRequest (xhr.js:186:1) at new Promise (<anonymous>) at xhr (xhr.js:49:1) at Axios.dispatchRequest (dispatchRequest.js:51:1) at Axios.request (Axios.js:148:1) at wrap (bind.js:5:1) at Vue.use (vue.esm.js:5798:1) at eval (main.js:8:1) at ./src/main.js (app.js:1508:1)
这是一个JavaScript错误,具体原因是因为在isURLSameOrigin.js的第57行中,尝试从一个未定义的对象中读取protocol属性导致的。这可能是由于未正确处理传递给isURLSameOrigin函数的参数导致的。您可以检查传递给isURLSameOrigin函数的参数是否正确,并确保在尝试从对象中读取属性之前对其进行了正确的初始化。
阅读全文