我目前正在审查一些代理日志并看到:
200 OPTIONS /api/bob/
200 GET /api/bob/
200 OPTIONS /api/jim/
200 PUT /api/jim/
Run Code Online (Sandbox Code Playgroud)
我想知道几件事,为什么在每个请求之前进行OPTIONS调用?而且,我的主要问题是:这样做有什么好处?
我原以为这会增加延迟和不必要的开销.
这可能是正在发出 CORS 请求。有关CORS 工作原理的说明,请参阅此 MDN 页面。
基本上,在发出实际请求之前,客户端会发出一个 OPTIONS 请求,以请求获得发出实际请求的许可。这称为“预检请求”。
不过有一件事 - CORS 不需要客户端在 HTTP GET 之前发出 OPTIONS 请求。所以客户可能行为不端。
您可以验证是否选项是由CORS引起调查其头-如果它们有Access-Control-Request-Method和Access-Control-Request-Headers头,这是一个预检要求,它的CORS。
为什么需要预检请求?
CORS 由浏览器强制执行。默认情况下,大多数现代浏览器不允许 Web JS 代码向托管此页面的不同服务器发出 AJAX 请求。这是一种安全措施。
CORS 是浏览器(不是页面本身!)询问服务器发出实际请求是否安全的一种方式。
对于可以修改服务器上资源的方法 - 例如大多数 POST 和所有 PUT 方法 - 浏览器必须首先询问是否可以进行这种修改。支持 CORS 的服务器将在预检响应中包含特殊标头。
没有预检请求:假设浏览器向不支持 CORS 的服务器发出请求。在这种情况下,发出请求可能会修改资源。我们不想要这个!
对于不应更改资源状态的 GET 请求,不需要预检请求。
| 归档时间: |
|
| 查看次数: |
153 次 |
| 最近记录: |