访问控制允许方法
Posted
技术标签:
【中文标题】访问控制允许方法【英文标题】:Access-Control-Allow-Methods 【发布时间】:2020-04-24 09:24:43 【问题描述】:我正在从我的前端发出以下 HTTP 请求。我所有的GET
请求都以相同的方式工作,但以下UPDATE
失败:
访问获取地址 '127.0.0.1/后端/路径' 来自原点“http://localhost:3000”已被 CORS 策略阻止: Access-Control-Allow-Methods 不允许方法 UPDATE 预检响应。
前端请求
return fetch(
`127.0.0.1/backend/path`,
method: "UPDATE",
body: JSON.stringify(newClass),
headers:
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods":
"GET, POST, PUT, DELETE, OPTIONS, UPDATE",
"Access-Control-Allow-Headers": "Origin, Content-Type, X-Auth-Token",
"Content-Type": "application/json",
Authorization: "Bearer " + getState().authToken
)
后端 Flask 端点
@app.route('/backend/path', methods=['UPDATE'])
@authenticate
def update_data():
return "data": "has been updated"
This answer 建议添加一个Access-Control-Allow-Methods
标头,但这已经在我的请求中出现了!我也不只是想为我的浏览器关闭 CORS,因为我需要正确实现它。
【问题讨论】:
后端必须发送 CORS 标头,哈哈。我也从未听说过 UPDATE http 方法。Access-Control-Allow-Methods
必须在 OPTIONS
response 标头中。将其添加到请求标头中不会影响后端的权限。
这些标头是 response 标头,而不是请求标头。查看关于 CORS 的许多问题。
这能回答你的问题吗? Always got Method DELETE is not allowed by Access-Control-Allow-Methods in preflight response 再次仔细阅读答案。答案是讨论将标头添加到服务器端代码。
【参考方案1】:
Access-Control-Allow-Methods
必须在 OPTIONS
response 标头中。请记住,后端控制如何访问它。您不能简单地通过请求来添加允许的方法。
另外,UPDATE
不是标准的 HTTP 动词。你是说PUT
还是PATCH
?
【讨论】:
感谢您清理我的 CORS 困惑。flask-cors
已经将这些标头添加到响应中,所以我只需要将它们从我的请求中删除即可。我绝对是指PUT
,不确定UPDATE
来自哪里。事实上,只需切换 UPDATE->PUT 即可完全修复错误。再次感谢!以上是关于访问控制允许方法的主要内容,如果未能解决你的问题,请参考以下文章
HTTP响应标头中“允许”和“访问控制允许方法”之间的区别?