【问题标题】:CORS HTTP Request from browser vs from locally hosted web application来自浏览器的 CORS HTTP 请求与来自本地托管的 Web 应用程序
【发布时间】:2016-08-25 18:16:19
【问题描述】:

我正在开发一个小的概念验证网络应用程序,它应该向服务器(SAP ABAP 系统)发送一个 GET 请求。服务器提供 ODATA REST 服务。当我将服务的 URI 粘贴到浏览器的地址栏中时,所需的内容会立即显示出来。但是当我尝试通过 webapp(使用 jQuery for AJAX)发出请求时,会出现与 CORS 相关的问题:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:XXXXX' is therefore not allowed access. The response had HTTP status code 401.

可以在post 中找到我在 HTTP 请求中遇到的代码和其他问题。 我不明白为什么来自浏览器(或提琴手)的请求似乎没有问题,但是一旦我从应用程序(顺便说一句在本地托管)发送请求,就会出现 CORS 问题。仅供参考,我无法访问服务器端代码,因此无法编辑“Access-Control-Allow-Origin”部分。

【问题讨论】:

  • 这里问了同样的问题,也许它与您的问题相似。 stackoverflow.com/questions/18642828/…
  • 是的,但人们似乎只是通过在响应头中添加“Access-Control-Allow-Origin: *”来解决这个问题。正如我所说,我无法访问任何服务器端代码。
  • 那不行,我们必须允许服务器端的跨域请求才能接受跨域请求。
  • 但是为什么直接通过浏览器或 fiddler 请求资源而不是跨域请求呢?我很困惑...
  • @doktormatte - 当您通过浏览器/fiddler 请求时,您点击的是api_domian/api,这很好;但是当您从在您的域中运行的应用程序中点击它时,例如 localhost 或 http;yourdomain -> 这使得它跨域,因为您从不同的域请求它

标签: javascript jquery ajax cors


【解决方案1】:

您是否有权访问为您的网页提供服务的服务器?如果是这样,我会通过您自己的服务器将请求中继到远程服务器。

意思是你的页面询问你的服务器,而后者又询问远程服务器。

这样就不会发生 CORS。

【讨论】:

    【解决方案2】:

    如果您无权访问服务器端代码,并且确定您总是发出 GET 请求,那么您可以使用JSONP。但仍然使用 Response 标头解决 CORS 是最好的解决方案。

    【讨论】:

    【解决方案3】:

    跨域资源共享 (CORS) 是一种机制,允许从资源来源域之外的另一个域请求网页上的许多资源(例如字体、JavaScript 等)。

    当您直接从浏览器发出请求(通过输入 url )时,CORS 不会生效。但是,如果您从浏览器发出 AJAX 请求,它也会被阻止。

    如果您仍想从浏览器向资源发出请求,您将需要一些扩展程序,例如用于 Chrome 的 Allow-Control-Allow-Origin: * 和用于 Firefox 的无处不在的 cors。

    【讨论】:

      猜你喜欢
      • 2017-05-07
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 2019-08-19
      相关资源
      最近更新 更多