跨域POST请求是指从一个源(域)向另一个源(域)发送HTTP POST请求。由于浏览器的同源策略限制,直接发起跨域请求会被浏览器阻止。为了实现跨域POST请求,可以使用以下几种方法:
<script>
标签绕过同源策略的方法,但仅支持GET请求。fetch('https://api.example.com/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
// 如果需要携带凭证(如cookies)
'credentials': 'include'
},
body: JSON.stringify({ key: 'value' })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
const express = require('express');
const app = express();
app.use(express.json());
app.post('/data', (req, res) => {
res.setHeader('Access-Control-Allow-Origin', '*'); // 允许所有域,或指定特定域如'https://yourdomain.com'
res.setHeader('Access-Control-Allow-Methods', 'POST');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, credentials');
res.json({ message: 'This is a cross-origin POST request!' });
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
Access-Control-Allow-Origin
、Access-Control-Allow-Methods
和Access-Control-Allow-Headers
头部。credentials: 'include'
,后端设置Access-Control-Allow-Credentials: true
,并且Access-Control-Allow-Origin
不能为通配符*
,需指定具体域名。通过以上方法,可以有效解决JavaScript发起跨域POST请求时遇到的问题。
领取专属 10元无门槛券
手把手带您无忧上云