对于未知数量的域,跨域的 $.post 的替代/修复是啥

Posted

技术标签:

【中文标题】对于未知数量的域,跨域的 $.post 的替代/修复是啥【英文标题】:What's an Alternative/Fix to $.post for Cross Domain for Unknown Amount of Domains对于未知数量的域,跨域的 $.post 的替代/修复是什么 【发布时间】:2017-08-01 12:27:27 【问题描述】:

对于真正需要做的事情,这可能是一种非常业余/糟糕的方法,但我目前正在构建一个可以使用脚本标签嵌入客户网站的平台。然后,该脚本允许用户输入一些信息并将其发送到电子邮件。其中一个选项是查看某个人的社交媒体。我想要做的是将社交按钮点击记录到 mysql 数据库。

目前我的社交点击代码是$.postb.domain.com。我收到错误消息:XMLHttpRequest cannot load due to access control checks. 当我手动将每个域添加到 .htaccess 中的允许源时,此错误就会消失,但是如果必须为客户想要嵌入脚本的每个域添加它,这将非常令人沮丧. * 因为Allow Credentials 而无法使用,所以我对这个主题的了解有限。

任何指向正确方向的人都将不胜感激,如果问题措辞不当/信息不足,我们深表歉意。

【问题讨论】:

【参考方案1】:

当我手动将每个域添加到 .htaccess 中的允许源时,此错误就会消失,但是如果必须为客户端想要嵌入脚本的每个域添加此内容,这将非常令人沮丧。 *无法使用,因为Allow Credentials

因此,除了在响应中发送 * 之外,您还可以让 Origin 请求标头的值基本上与 Access-Control-Allow-Origin 响应头:

SetEnvIfNoCase ORIGIN (.*) ORIGIN=$1
Header always set Access-Control-Allow-Origin "%ORIGINe"

这将允许来自任何来源的请求,即使请求包含凭据。

下面是实现相同效果的另一种方法。

RewriteEngine On
RewriteCond %HTTP:Origin (.+)
RewriteRule . - [E=CORS_ORIGIN:%1]
Header set Access-Control-Allow-Origin %CORS_ORIGINe env=CORS_ORIGIN

【讨论】:

以上是关于对于未知数量的域,跨域的 $.post 的替代/修复是啥的主要内容,如果未能解决你的问题,请参考以下文章

跨域的几种方法

ajax跨域问题

跨域问题

js跨域

跨域解决方案

JS跨域笔记