【问题标题】:Error OPTIONS net::ERR_CONNECTION_REFUSED错误选项 net::ERR_CONNECTION_REFUSED
【发布时间】:2017-12-20 06:48:04
【问题描述】:

我正在使用“jQuery”(前端)和“Python”(后端)开发一个 Web 应用程序。在发出 PUT 请求以更新数据库中的详细信息时,这是我在控制台中遇到的错误:

OPTIONS "REST API URL" net::ERR_CONNECTION_REFUSED

我的 jQuery 代码是:

$.ajax({ 
    type: "PUT",
    url: "REST API URL",
    headers: {"Content-Type": "application/json", "Authorization": AuthToken},
    data: "details to be updated in database",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(data,status) {
      //do something with data
    },
    error: function(data,status) {
      //show error data and status
    }
)};

我了解了除 GETPOST 之外的 HTTP 请求如何首先作为 OPTIONS 请求进行预飞行,并且只有当它是真正的请求时,它才会作为 PUT/DELETE/PATCH 请求进行处理。
我看到解决方案说它可能是CORS 问题,但CORS 从后端启用 以允许GET/POST/PUT/PATCH/DELETE 请求。此外,我能够成功发出 GETPOST 请求,但没有通过 PUT 请求。
我正在使用“Chrome 开发工具”并研究了如何通过清除缓存和 cookie、刷新 DNS 和重新安装 Chrome 来修复 Chrome 的此错误,但到目前为止没有任何解决方案有效。
我正在制作前端 UI,不确定这是客户端错误还是服务器端错误?
任何帮助将不胜感激。

【问题讨论】:

  • url: "REST API URL" ,你知道这一定是真正的 api url 吧?
  • 我使用了真正的API,但忘记提及端口号。我的一个非常愚蠢的错误。谢谢

标签: javascript jquery python google-chrome


【解决方案1】:

鉴于这确实是一个 CORS 问题 - 浏览器使用 OPTIONS 方法“预检”请求。在 OPTIONS 请求成功后,实际请求(在您的情况下为 PUT)发出。

确保后端响应 OPTION 请求。您可以轻松捕获所有 OPTION 请求并返回 200 OK204 NO CONTENT

【讨论】:

  • 后端配置为通过允许 GET/POST/PUT/DELETE/OPTIONS 请求来允许 CORS。虽然问题只发生在 PUT 请求和 PATCH 请求中。 GET 和 POST 请求已成功发送。
  • 配置是什么意思?您需要回复 OPTIONS 'preflight' !非简单(PUT、DELETE、...)请求需要预检。查看“预检请求”下的官方 Mozilla docs。当您共享后端代码以及如何允许 CORS 时,这可能会有所帮助。
  • 我有一个 Django 服务器,其中的 settings.py 文件有以下代码来允许 CORS:CORS_ALLOW_METHODS = ( 'GET', 'POST', 'PUT', 'PATCH', 'DELETE ', '选项')
  • 这是我的愚蠢错误。我在进行 API 调用时忘记提及端口号。感谢您的帮助。
【解决方案2】:

有一点是肯定的,这是一个后端问题。当后端和前端之间的跨源通信未正确连接时,就会发生这种情况。考虑到您已经导入了 cors 并设置了中间件,很可能您在原始 URL 和请求 URL 方面使用 PUT 方法时出错了。

你可以做的事情:

1) 确保两台服务器都在运行(后端和前端)。

2)查看谷歌开发工具并查看网络部分。查看请求标头和一般信息。确保 request URL / backend 有你的后端服务器 URL,orgin / frontend 有你的前端 URL。

3) 确保在您的 http.put() 方法中,您提供给它的域与您在服务器中设置的 api 匹配。

4) 你的问题是你的后端没有正确连接你的前端,所以不要浪费你的时间去寻找其他错误。专注于调试 http.put() 方法以及您导入的 cors 模块和中间件。

【讨论】:

  • 要检查的另一件事是 - 可以直接在前端代码之外访问后端吗?我遇到了这样的错误,问题是 Python 中的服务器文件配置错误(我已经为 localhost 配置了它,所以它停止在托管的 Web 服务器上工作)。
  • 是的,当然,在将其部署到主机服务器时,您必须更改 url。
  • 前端和后端需要运行,否则你会看到这个错误
猜你喜欢
  • 2016-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 2015-05-02
  • 2020-12-20
  • 2022-01-22
相关资源
最近更新 更多