首页 > 解决方案 > BulkSMS 上的访问控制允许来源问题

问题描述

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

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

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

如何在 BulkSMS 中更正此问题?

问候,

标签: apicorscross-domainbulksms

解决方案


您的浏览器的同源策略限制您的 Javascript 代码以您希望的方式访问第三方(即本例中的api.bulksms.com) - 以及 CORS(跨源资源共享),即放宽这些限制的机制,也不足以允许这些请求(来自您作为不受信任的第三方)。

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

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

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

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


推荐阅读