我有两个域名(example.com 用于客户端,api.example.com 用于 REST API),在客户端到 API 请求时需要考虑 CORS 策略。预检请求按预期工作,并且除了文件上传以外的每个其他请求(GET/POST/PUT/DELETE)都可以正常工作,意味着如果 Content-type 是“multipart/form-data”,则无法正常工作。
我在 Chrome 控制台中收到以下错误:
访问 'https://api.example.com/video/upload' 源于 'https://www.example.com' 的 XMLHttpRequest 已被 CORS 策略阻止:所请求的资源未包含 'Access-Control-Allow-Origin' 头信息。
这是我的客户端(Vue.js)源代码:
var config = {
headers: { "Content-Type": "multipart/form-data" },
onUploadProgress(e) {
if (e.lengthComputable) {
self.percentage = Math.round(e.loaded / e.total * 100) + "%";
}
}
};
axios
.post(apiUrl + `/video/upload`, formData, config)
.then(response => {
this.successes.push(
response.data.videoName + " uploaded."
);
})
.catch(e => {
this.errors.push(message);
});
},
关于CORS的nginx配置:
server {
listen 443 ssl default_server http2;
listen [::]:443 ssl default_server ipv6only=on;
root /var/www/example/public;
index index.php index.html index.htm;
server_name api.example.com:443;
add_header Access-Control-Allow-Origin "*" always;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
add_header Access-Control-Allow-Methods "GET, POST, PUT, OPTIONS, DELETE";
add_header Access-Control-Allow-Headers "Content-Type, X-Auth-Token, Origin, Authorization";
请问这段代码和配置有什么问题吗?!感谢任何帮助!
client_max_body_size
后问题得到解决。 - Pranav Kumar