axios .request(options) .get('http://localhost:8080/data', { withCredentials: true }) .then(function (response) { console.log(response.data); var data = JSON.parse(response.data); console.log(data.TruckNo); console.log(data.Intime); console.log(data.ParkTime); console.log(data.Money); showResult(data); }) .catch(function (error) { console.error(error); }); }为什么还是from origin 'http://localhost:8080' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed.
时间: 2024-03-11 08:49:16 浏览: 21
这个错误是因为服务器响应头中的'Access-Control-Allow-Origin'头包含了两个通配符'*',导致浏览器拒绝了这个跨域请求。解决这个问题的方法有两种:
1. 修改服务器端的响应头,确保'Access-Control-Allow-Origin'头只包含一个值,例如:
```
Access-Control-Allow-Origin: http://localhost:8080
```
这样浏览器就会允许来自'http://localhost:8080'的跨域请求。
2. 在发送请求时,设置axios的`withCredentials`选项为true,并且设置请求头中的'Origin'字段为当前域的地址,例如:
```javascript
axios.get('http://localhost:8080/data', {
withCredentials: true,
headers: {
'Origin': 'http://localhost:8080'
}
})
```
这样axios就会在请求中携带当前域的cookie信息和'Origin'字段,服务器就可以根据这些信息判断是否允许该跨域请求。
无论哪种方法,都需要在服务器端进行相应的配置才能解决这个问题。如果服务器端没有设置以上头信息,那么浏览器会阻止该跨域请求,并抛出'CORS policy'错误。
相关问题
axios.defaults.baseURL = 'http://localhost:8088/'
在这个问题中,用户提到了axios.defaults.baseURL = 'http://localhost:8088/'。这是一个用于设置axios请求的基本URL的代码。这个代码的作用是将所有的请求都发送到'http://localhost:8088/'这个地址上。这样,在发送请求时就不需要每次都写完整的URL了。这个设置可以方便地在开发环境和生产环境之间切换。在开发环境中,可以将baseURL设置为本地的开发服务器地址,而在生产环境中,可以将baseURL设置为实际的生产服务器地址。这样,在切换环境时只需要修改一次baseURL即可。\[3\]
#### 引用[.reference_title]
- *1* [前端跨域配置 axios.defaults.withCredentials = true; 无效的原因](https://blog.csdn.net/Charonmomo/article/details/122818540)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [axios.defaults.baseURL的三种配置方法](https://blog.csdn.net/qq_33583069/article/details/112527632)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
axios.get('http://localhost:3000/data', { withCredentials: true })
这段代码使用了axios发送GET请求到'http://localhost:3000/data'地址,并设置了`withCredentials`选项为true。这意味着在发送请求时,axios会携带当前域的cookie信息。在服务器端,如果需要允许该跨域请求,需要设置响应头中的'Access-Control-Allow-Origin'头为当前域的地址,例如:
```
Access-Control-Allow-Origin: http://localhost:8080
Access-Control-Allow-Credentials: true
```
其中,'Access-Control-Allow-Origin'头指定了允许跨域请求的域,'Access-Control-Allow-Credentials'头指定了允许携带cookie信息的跨域请求。只有当这两个头都设置了,才能允许该跨域请求。
如果服务器端没有设置以上头信息,那么浏览器会阻止该跨域请求,并抛出'CORS policy'错误。