【发布时间】:2017-05-18 16:37:31
【问题描述】:
我有一个来自第三方供应商的资源,该资源仅通过http 协议提供服务。当我包含这样的脚本标签时......
<script src="http://example.com"></script>
我得到一个带有 JSON 数据的 javascript 变量,类似于此...
var data = {"total": "10", "results": [{"name": "Joe", "title": "developer"}, {"name": "Jane", "title": "engineer"}]};
然后我可以在我的页面中使用变量data 来输出结果等。
问题是,我需要通过 SSL (https) 在页面上提供这些数据,并且我无法通过 http 为 https 页面发出资源请求 - 这意味着 <script/> 包含不起作用.
作为一种解决方案,我从服务器页面请求资源,例如 data.cfm,然后通过 https 从我的服务器重新提供 JS 变量。所以,在这种情况下,我想向https://anotherserver.com/data.cfm 提出请求,以提供与http://example.com 相同的JS
<cfhttp result="myData" method="GET" charset="utf-8" url="http://example.com">
<cfoutput><pre>#myData.fileContent#</pre></cfoutput>
我还应该注意,JSON 数据中包含 HTML 标记。
当我尝试转到https://anotherserver.com/data.cfm 时,我得到了数据,但它的格式不正确。例如,超链接作为超链接是活动的。
我也尝试使用<cfdump>,它将数据作为未格式化的字符串返回,但是当我使用<script src="https://anotherserver.com/data.cfm"></script> 标签时,我没有得到 JS 变量。
更新
通过进一步测试,我发现如果我只是将数据作为文本复制到 2 个文件中:data.cfm 和 data.js,那么 js 文件会按预期工作,而 cfm 文件不会。这使我相信文件扩展名导致资源被读取为 html。所以,这实际上更像是一个 Coldfusion 问题。如何将 cfm 文件设置为被浏览器读取为 javascript?是否有一些响应标头或元数据字段可以完成此操作?
【问题讨论】:
-
“我需要通过 SSL (https) 在页面上提供这些数据,并且我无法通过 http 为 https 页面发出资源请求”这部分对我来说没有意义。如果通过 HTTPS 为您的系统提供服务会阻止您向通过 HTTP 提供的资源发出请求?
-
@VincentvanderWeele 是的,如果您正在加载资源。他正在从返回一个 json 对象的脚本加载,然后使用该数据。为什么不直接通过 AJAX 请求对象?
-
为什么要注意只需下载 JavaScript 文件并将其保存到您的服务器(假设您可以这样做)。然后只需在 HTTPS 后面从您的服务器提供 JS 文件。
-
@Ken 你不能进行跨域ajax请求
标签: javascript http https coldfusion