【问题标题】:why axios send OPTIONS request method not DELETE or PUT method为什么 axios 发送 OPTIONS 请求方法而不是 DELETE 或 PUT 方法
【发布时间】:2018-04-29 22:40:01
【问题描述】:


为什么我使用 axios.delete(url) 或 axios.put() 发送请求,但是当我在 Chrome 开发工具中检查来自 NetWork 的请求时,请求方法是 OPTIONS 并且 Access-Control-Request-Method 是 DELETE 或 PUT,如下所示:

【问题讨论】:

  • 您正在向不存在的端点发送请求。
  • @Hosar 当然我发送删除方法。但它发送选项请求。这就是我在这里问的原因

标签: reactjs axios


【解决方案1】:

DELETEPUT(或其他非简单)请求首先发送 预检 OPTIONS 请求以确定您是否被允许发送此请求。请求方法在Access-Control-Request-Method标头中给出。

在此处查看更多信息https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Simple_requests

【讨论】:

  • 也许你有。但是你得到一个 404,所以它不会继续发送 DELETEPUT 请求。
  • 我想我得到了 404,因为请求是 OPTIONS 而不是 DELETE。
  • 什么是后端?如果是 IIS,你可能需要添加 OPTIONSVerbHandler
  • 是的,你必须支持 OPTIONS 才能支持 CORS。一种简单的方法(但不是“正确”的方法)是拦截任何OPTIONS 请求,将Access-Control-Allow-OriginAccess-Control-Allow-Headers 设置为所需的任何值,然后返回状态200。
  • @Tony 我真的不知道。我在前端工作,经理只是将 API 发送给我。我之前测试过API,它没有任何问题。所以我认为问题出在前端。
【解决方案2】:

Axios 使用 JSON 作为默认内容类型,调用总是与浏览器一起作为 OPTIONS 调用而不是 POST 方法。为了克服,我们需要正确设置“Content-Type”。我的配置如下

let config={
    headers: {'Content-Type' : 'application/x-www-form-urlencoded'}
}
return axios.post(postUrl,postJson,config).then(response=>{
     return response.data;
 }).catch(error=>{
     return error;
 });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2019-09-13
    • 2015-08-06
    • 2010-10-28
    • 2012-08-21
    • 2019-06-03
    • 2020-08-31
    相关资源
    最近更新 更多