【问题标题】:CORS - Response to preflight request doesn't pass access control check: It does not have HTTP ok statusCORS - 对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态
【发布时间】:2020-06-06 18:13:06
【问题描述】:

我该怎么做才能让它运行?

后端:ASP .Net Web APP - API、IIS

前端:Vue

错误:

提琴手:

web.config:

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="x-requested-with, Content-Type, origin, authorization, accept, client-security-token" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    <add name="Access-Control-Max-Age " value="1000" />
  </customHeaders>
</httpProtocol>
<handlers>
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <remove name="OPTIONSVerbHandler" /> 
  <remove name="TRACEVerbHandler" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
</handlers>

目前的结论:

  • 如果我在发布请求中跳过发送数据,错误就会消失。
  • 我认为这是因为当发布数据不存在时,我将不再违反 SOP 政策。
  • 只有在使用一些不安全的标头/方法/内容类型时才会执行预检请求。

请仅在您了解此问题的情况下回答(对此我很抱歉,但在查看类似问题时,repsonses 大多是“尝试这个”和“尝试那个”,这使得很难确定根本原因并促进一般理解)。感谢您考虑这一点。

【问题讨论】:

  • 首先您应该从您的 axios 配置中删除 "Access-Control-Allow-Origin": "*":这是一个响应标头,不应包含在请求中。控制台中的错误消息表明 CORS 预检 OPTIONS 请求未通过 CORS 检查。预检需要 200-299 范围内的状态代码才能通过检查。查看浏览器开发人员工具的“网络”选项卡,了解服务器返回的确切内容,这将为了解实际情况提供重要线索。
  • 我已经更新了更多信息以及我所做的最新更改。似乎我对预检请求根本没有任何回应?

标签: asp.net api vue.js cors


【解决方案1】:

我在这里找到了解决方案The requested resource does not support http method 'OPTIONS'.?

我在使用 fiddler 获得更好的错误详细信息后发现了它。

按照建议删除这两行将使其在开发环境中工作。但是,在部署到生产环境时,必须再次添加最后一行以使其正常工作。

当您想在程序中进行更详细的 CORS 设置时,是否需要第一个处理程序。随意改进这个答案。

<handlers>
   <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<!--   <remove name="OPTIONSVerbHandler" /> -->
   <remove name="TRACEVerbHandler" />
   <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
 </handlers>

在构建真正的生产解决方案时,允许一切不是最优的。

【讨论】:

    【解决方案2】:

    如果您使用 Mozilla,您应该考虑在 https://addons.mozilla.org/en-US/firefox/addon/cors-everywhere/ 上查看“CORS 无处不在”扩展程序 它可能会解决您的问题。

    编辑:好的,不要那样做,对不起我的无知。

    【讨论】:

    • 这是个糟糕的主意。首先,它降低了安全性。其次:现在您必须向所有用户解释,他们需要在浏览器中安装扩展程序才能使用您的网站。
    猜你喜欢
    • 1970-01-01
    • 2020-02-11
    • 2020-01-14
    • 2019-07-07
    • 2021-03-17
    • 2021-07-11
    • 2019-08-09
    • 2021-09-06
    • 2020-08-21
    相关资源
    最近更新 更多