CORS PATCH方法不允许,但是服务器允许

问题描述 投票:0回答:1

我正在尝试从Web浏览器向HTTP服务器发出PATCH请求。我从两端控制代码。

但是由于某种原因,我没有让CORS检查被浏览器接受。

服务器端

这是一个Python-EVE API,似乎已正确配置。

为调试此错误,我将在每次请求后使用以下代码打印所有响应信息:

@app.after_request
def after(response):
    print(response.status)
    print(response.headers)
    print(response.get_data())
    return response

以及来自浏览器的那些失败请求之一的示例输出。

请注意,发送到浏览器的Access-Control-Allow-Methods指令中明确允许使用PATCH。

127.0.0.1 - - [12/Mar/2020 19:40:12] "OPTIONS /tickets/5e699625ed6b7777ddfb3bc1 HTTP/1.1" 200 -
200 OK
Content-Type: text/html; charset=utf-8
Allow: OPTIONS, PATCH, GET, HEAD, POST
Access-Control-Allow-Origin: 
Access-Control-Allow-Headers: Authorization, Content-Type, Accept, If-Match
Access-Control-Expose-Headers: 
Access-Control-Allow-Methods: OPTIONS, PATCH, GET, HEAD, POST
Access-Control-Max-Age: 21600

客户端

客户端代码就像简单的XMLHttpRequest

let xhr = new XMLHttpRequest();
xhr.addEventListener('load', onComplete.bind(this));
xhr.addEventListener('error', onError.bind(this));

xhr.open('PATCH', `http://localhost:5000/tickets/${original._id}`);
xhr.setRequestHeader('authorization', `Bearer ${_t}`);
xhr.setRequestHeader('content-type', 'application/json');
xhr.setRequestHeader('if-match', original._etag);
xhr.send(JSON.stringify(changes));

一些笔记

我已经在两种不同的浏览器中对此进行了测试,但结果不同,但是以相同的方式保持一致。在这两种情况下,Access-Control-Allow-Methods指令都缺少PATCH(您可以在上面看到的是服务器发送的not)。

这两种情况都需要某种解决方法来向本地主机执行AJAX请求。下面提到了两种解决方法。

Chromium v​​80(非Chrome)

一个OPTIONS请求被发送到服务器。该响应可以在网络选项卡中看到,并且缺少PATCH指令。

Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD, OPTIONS

该请求被CORS策略阻止:Method PATCH is not allowed by Access-Control-Allow-Methods in preflight response.消息可以在控制台选项卡上看到。

使用此扩展名允许localhost CORS:https://mybrowseraddon.com/access-control-allow-origin.html

Firefox v73

一个OPTIONS请求被发送到服务器。该响应可以在网络选项卡中看到,并且缺少PATCH指令。

Access-Control-Allow-Methods: HEAD, OPTIONS, GET, POST

PATCH请求实际上到达了服务器我相信只有这样,因为下面的扩展名

使用此扩展名允许localhost CORS:https://addons.mozilla.org/en-US/firefox/addon/cors-everywhere/

javascript python cors eve
1个回答
0
投票

这可能是必须的,并且与Chrome扩展程序有关。部署堆栈,问题不存在。

© www.soinside.com 2019 - 2024. All rights reserved.