【问题标题】:Is it possible to read a preflight requests in javascript是否可以在 javascript 中读取预检请求
【发布时间】:2021-01-12 13:51:14
【问题描述】:

当我们向另一个域发送非simple request 时,浏览器首先发送preflight request。是否可以在 javascript 中以某种方式读取预检请求响应的正文或标头?

例如:

fetch('example.com', { method: "DELETE" }).then(handler)

将触发预检请求,如果成功,“处理程序”函数将能够读取我们主请求的响应。但是有什么方法可以访问预检请求的响应吗?

【问题讨论】:

  • 我认为您无法访问对浏览器发送的OPTIONS 请求的响应,但您可以自己发送OPTIONS 请求。
  • 不,没有任何方法可以让您以编程方式从前端 JavaScript 代码中读取预检响应。浏览器中没有 API 可以将预检响应暴露给前端 JavaScript 代码——既不是响应标头,也不是响应正文,甚至是响应状态代码。

标签: javascript cors preflight


【解决方案1】:

看了fetch specification后,我对请求访问的理解是,如果有错误会返回预检请求,否则返回主请求(错误与否)并且预检将无法访问。 但是,我无法对此进行测试,而且规范对于理解函数的行为并不是最清晰的。

编辑:
我用https://test-cors.org做了一些测试,发现我错了。每当 CORS 请求失败时,您所能得到的只是错误对象。如果请求成功,您得到的只是最终响应。自动预检请求对 JS 完全隐藏,因此正如 @Titus 在评论中所说,获得预检响应的唯一方法是手动配置并发送 OPTIONS 请求。

【讨论】:

    猜你喜欢
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    相关资源
    最近更新 更多