【问题标题】:CORS , REST, XMLHTTP and HTTPCORS、REST、XMLHTTP 和 HTTP
【发布时间】:2015-12-07 17:43:36
【问题描述】:

REST 和 CORS.. 它们有何不同?比较它们是否正确?因为我已经看到一个看似 REST API 使用自定义 X-header 来发出预发送请求(Docebo LMS API)。这意味着 CORS 和 REST 可能用于不同的目的。但从表面上看,两者似乎都是为了访问存储在不同服务器上的资源而设计的。此外,简单的 XMLHTTP 请求似乎像 HTTP 一样工作。(浏览器发送和接收的标头是通过 HTTP)。那么,浏览器是否将 XMLHTTP 对象转换为 HTTP?我现在确实在吸收大量信息,但我似乎无法在理解这些事情方面取得任何实际进展......感谢任何帮助。

【问题讨论】:

  • 你查过维基百科上 REST 和 CORS 的定义吗?这些是具有不同目的的不同技术。你在比较苹果和橘子。

标签: rest http cors xmlhttprequest


【解决方案1】:

CORS - 跨域资源共享。一个概念和一组技术,可以跨域共享资源/数据。例如,从您的页面 /yourDomain.net 您尝试对 myDomain.net 进行 ajax 调用以发布一些数据。阅读这篇WikipediaMDN 文章。

REST - 具象状态转移。一组标准和指南,定义了系统相互通信的特定方式。它遵循无状态 http 标准,其中 URI 代表资源,客户端可以使用 http 动词处理它们。例如获取 weatherApp.com/weather/rome。参考this

HTTP - 超文本传输​​协议。标准协议向/从网络服务器传输数据。检查此W3 specificationsWikipedia 页面。

XMLHttp - 一种请求类型,通常用于从客户端(主要是 html、javascript)应用程序向 Web 服务器进行 ajax 调用。它适用于http标准。虽然没有绑定到 XML。阅读thisthis

现在,所有 REST、XMLHttp、CORS 都以某种方式在 HTTP 上工作,这意味着它们都使用 http 基础架构。

它们中的任何一个/全部都可以用来创建一个功能齐全的现代应用程序。例如,Web 应用程序可能使用 XMLHttp 请求来调用 REST 服务以获取一些数据。它还可以利用 CORS 获取/发布数据到另一个域。不用说,整个系统都依赖于http!

【讨论】:

  • 因此,CORS 可以与 HTTP 以及 XMLHTTP 一起使用...但是通过 HTTP 访问服务器上的 REST API 是否可行,但是通过 XMLHttp 对象发出相同的 API 请求被拒绝? (该请求是使用特殊“X-”标头的预检请求)...
  • @kartikeyashukla 你混淆了很多东西。请先阅读概念。不要对http想太多。它就像基础基础设施,相信它总是在所有这些背后,不管你用其他东西做什么。理解,正如我在答案中所说,XMLHttp 仅在 http 上工作。 REST 也是如此。理想情况下,REST 服务不会拒绝 XMLHttp 请求,尽管这在技术上是可能的。我建议,暂时忽略飞行前的例子,这是一个非常具体的例子,可能不是一个好的开始。
  • 好的..感谢您的帮助...问题是我的公司要求我构建一个集成 API 的 android 应用程序。作为一个菜鸟,我没有走原生开发路线。所以,我使用了 Appery.io 在线构建器,它让我可以在 javascript 中自定义代码,并且我有一些经验......在我的仪表板上测试 API 时,我得到了想要的响应..但是当我在浏览器中测试应用程序时(Duh!),我得到了 XMLHTTP 错误..我猜是因为请求是由脚本发出的......而不是浏览器/服务器..
  • 但是,这些答案确实让我对问题零关注,我使用了代理..它解决了问题..再次感谢!!!
  • @kartikeyashukla 这些概念过于庞大,无法在 SO 线程中详细讨论!很高兴知道它帮助了你,最后你解决了你的问题。在堆栈溢出中习惯于支持,接受对您有帮助的答案:)
【解决方案2】:

它们是完全不同的东西。 Rest 是一种执行数据调用的特殊方法。基本上的特点是状态不存储在服务器上而是通过调用传递的系统。你可以阅读更多here

Cors 是一种使 javascript 能够对它们来自的服务器之外的域执行数据服务调用的技术。通常 Web 浏览器会阻止 javascript 和其他 Web 技术进行跨域或跨域调用。这些是 js 脚本来自 google.com 的调用,可以说,现在可以调用 microsoft.com。好吧,浏览器会停止该调用,因为 google.com 和 microsoft.com 是不同的域。

这个例子很明显,所以让我们尝试一个不太明显的例子。您在 blogs.yoursite.com 上的脚本尝试调用 shopping.yoursite.com 上的服务。现在这些父亲都是 yoursite.com 但它们仍然可以被视为跨域并且通常是。 CORS 允许您(在 html 开发人员方面)说我信任这些域。通过信任他们,现在您可以调用他们的 Web 服务,即使他们本来是跨域调用。

【讨论】:

    猜你喜欢
    • 2019-03-12
    • 1970-01-01
    • 2016-09-01
    • 2015-10-21
    • 2017-02-19
    • 2014-07-10
    • 1970-01-01
    • 2014-02-22
    相关资源
    最近更新 更多