我在前端使用ReactJs,在后端使用Laravel,并使用nginx作为Web服务器。当我添加multipart/form-data到axios post请求时,我得到cors错误:这个项目是码头化的,这是值得考虑的。后端端口为8090,前端端口为8080。
const result = await axios(`${backendUrl}/shops`, {
headers: {
'Content-Type': `multipart/form-data; `,
"Accept": "*/*",
"Access-Control-Allow-Origin": "*"
},
method: "post",
data: {
values
},
withCredentials: true,
});
字符串
我试图在larevl核心配置文件中禁用cors策略。这是我的Laravel cors配置文件:
'paths' => ['*'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => true,
型
我在nginx配置文件中添加了client_max_body_size,但错误没有得到解决。
2条答案
按热度按时间bwitn5fc1#
首先,您应该从
axios
请求中删除Access-Control-Allow-Origin
头,因为它是服务器端的响应头。其次,由于您使用的是凭证请求,因此后端无法使用
Access-Control-Allow-Origin: *
进行响应对于没有凭据的请求,可以将文字值“*”指定为通配符;该值告诉浏览器允许来自任何源的请求代码访问资源。尝试对凭据使用通配符将导致错误。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin#directives
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/CORSNotSupportingCredentials
下面是如何验证后端是否正确配置为处理凭证CORS请求(您需要将
http://localhost:3000
替换为前端源,并将http://localhost:3100/api/test
替换为后端API端点)。1.验证
OPTIONS
响应中是否存在访问控制标头:字符串
access-control-allow-credentials: true
-此头必须存在于响应中access-control-allow-methods: POST
-此标头必须存在且必须包含POSTaccess-control-allow-origin: http://localhost:3000
-此头必须存在,并且必须包含您的前端来源access-control-max-age: 300
-这个头是可选的;你可以在开发环境中将max-age设置得合理的短一些vary: Origin
-建议使用此头1.验证
POST
响应中是否存在访问控制标头:型
作为最低要求,POST响应必须包含
Access-Control-Allow-Origin
和Access-Control-Allow-Credentials
头,但包含与OPTIONS响应相同的访问控制头也没有什么坏处。请让我知道这是否解决了你的问题。如果问题没有消失,请发布具体的CORS错误。
kqlmhetl2#
这个问题已经通过请求的微小变化得到解决。我将方法类型从请求体移动到请求的第一行,并将值附加到formData,并将其作为请求的第二个参数发送,并将边界添加到请求头:
字符串