【问题标题】:Why Web API not giving the CORS error in browsers like chrome and edge and in the Postman tool? [duplicate]为什么 Web API 在 chrome 和 edge 等浏览器以及 Postman 工具中没有给出 CORS 错误? [复制]
【发布时间】:2020-11-06 01:39:02
【问题描述】:

我正在用 Asp.Net Core 3.1 开发 API。它按预期工作。当我尝试从 ajax 发送请求时,我遇到了与 CORS 相关的错误。但是当我直接从 Chrome、Edge 等浏览器甚至使用 Postman 等工具发送 GET 请求时,我没有收到任何错误。

错误:

访问 XMLHttpRequest 在 'http://server:8080/API/GetMethod?currency=INR' 来自原产地 'http://localhost:63765' 已被 CORS 策略阻止:否 请求中存在“Access-Control-Allow-Origin”标头 资源。

客户端代码:

$.ajax({
   type: 'GET',
   crossDomain: true,
   dataType: 'json',
   url: 'myUrl',
   success: function(jsondata){
   }
})

所以我的问题是为什么它没有在浏览器和邮递员中给出错误。为什么它会从客户端代码中给出错误?浏览器会忽略这些错误吗?据我了解,即使浏览器和邮递员也应该给出同样的错误。

更新:虽然link 上下文是相同的,但我对提供的答案并不满意。我对现有问题有更好的具体答案。

【问题讨论】:

标签: javascript jquery ajax cors postman


【解决方案1】:

definition of CORS 是:

跨域资源共享 (CORS) 是一种机制,它使用额外的 HTTP 标头告诉浏览器让在一个来源运行的 Web 应用程序可以访问来自不同来源的选定资源。当 Web 应用程序请求的资源与其自己的来源(域、协议或端口)不同时,它会执行跨域 HTTP 请求。

跨域请求示例:https://domain-a.com 提供的前端 JavaScript 代码使用 XMLHttpRequest 向 https://domain-b.com/data.json 发出请求。

出于安全原因,浏览器限制从脚本发起的跨域 HTTP 请求。例如,XMLHttpRequest 和 Fetch API 遵循同源策略。这意味着使用这些 API 的 Web 应用程序只能从加载应用程序的同一来源请求资源,除非来自其他来源的响应包含正确的 CORS 标头。

(强调我的。)

因此,简而言之,当在一个网站的上下文中在浏览器中运行的脚本向另一个网站发送请求(“从脚本发起的跨域 HTTP 请求”)时,它就是 CORS。

如果您将 URL 放入地址栏中,则发送请求的不是属于另一个网站的浏览器中的脚本 - 是您(或者更确切地说是代表您的浏览器)。所以它不是 CORS。

类似地,如果您使用的是 Postman,那么发送请求的也不是属于另一个网站的浏览器中的脚本(实际上这次图片中甚至没有任何浏览器)- 是您(或更多正是代表您的邮递员)。所以它不是 CORS。

是浏览器对在其中运行的脚本执行这些规则,而不是服务器。如果您不是脚本或根本不使用浏览器,则您在这些“法律”之外进行操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-17
    • 2018-10-03
    • 2018-05-30
    • 2021-08-31
    • 2022-01-05
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多