【问题标题】:Access-Control-Allow-Origin issue on BulkSMSBulkSMS 上的访问控制允许来源问题
【发布时间】:2018-12-04 22:04:44
【问题描述】:

我正在使用 Angular 5 发送 post 请求以通过 Bulksms 发送短信:http://bulksms.com/

当从 Angular(客户端)发出请求时,我遇到了这个问题:

Access-Control-Allow-Origin 不允许Origin http://TTTT:4200

如何在 BulkSMS 中更正此问题?

问候,

【问题讨论】:

  • CORS 问题与您的 API 有关,与您的客户端无关。从浏览器访问 URL 与在 JS 中使用 API 不同。 Postman 和 Angular 也是如此。请使用正确的标签编辑您的问题以及您对 API 所做的事情(否则我必须为您完成)
  • 我可以直接使用该链接,而我的浏览器不会出现任何 CORS 问题。
  • 正如我所说,这与使用 JS 的 API 不同。
  • 我遇到了类似的问题,但解决方案是我们需要在 API 端启用 CORS。我已经在 C# 端解决了类似的问题。看到这个efficientuser.com/2018/06/14/…
  • 从源端添加Access-Control-Allow-Origin 没有意义。 API 端必须有一个设置。

标签: api cors cross-domain bulksms


【解决方案1】:

您的浏览器的同源策略限制您的 Javascript 代码以您希望的方式访问第三方(即在这种情况下为 api.bulksms.com) - 以及 CORS(跨源资源共享),它是一种放松这些限制的机制,但也没有放松到允许这些请求(来自您作为不受信任的第三方)。

Wikipedia Same-origin policy :“根据 [same-origin] 策略,Web 浏览器允许包含在第一个网页中的脚本访问第二个网页中的数据,但前提是两个网页具有相同的来源。来源被定义为 URI 方案、主机名和端口号的组合。此策略可防止一个页面上的恶意脚本获取对另一个网页上敏感数据的访问权限”。 Wikipedia 页面包含一些很好的示例,说明了同源策略试图限制的各种恶意 Javascript 代码的使用。

请务必注意,这些限制仅由浏览器强制执行:不在浏览器下运行的 HTTP 客户端代码通常不关心这些。

出于开发目的,有一些工具可以让您的生活更轻松 - 例如,您可以使用 live-server 运行一个简单的 HTTP 服务器来为您的静态文件提供服务,同时还可以使用它的 --proxy 选项来路由向api.bulksms.com提出请求,并在此过程中解决您的同源策略问题。

对于生产,一个典型的解决方案是通过您自己的服务器(将您的 Javascript 文件提供给您的浏览器的服务器)或反向代理(它将前端您自己的服务和第三方服务)。如果您的应用程序有服务器端,您可以使用 HTTP 客户端从那里向api.bulksms.com 发出 HTTP 请求,然后让您的 Javascript 代码与您自己的服务器通信,以间接向 bulksms.com 发出请求。这也使您有机会在服务器端添加身份验证标头,而您的 Javascript 代码不必知道它们(例如,如果您有一个 bulksms.com 帐户,并且许多用户可以通过您的 Angular 应用程序使用该帐户,但是谁不应该知道您的凭据)。同样,您可以通过这种方式对您的 Angular 用户可以执行的操作施加限制(例如,限制他们每天可以发送的 SMS 数量)。

【讨论】:

    猜你喜欢
    • 2020-10-16
    • 2013-11-15
    • 2023-04-01
    • 2015-12-26
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多