我正在使用嵌入推文的页面的内容安全策略,并且我收到了 的报告https:/\xe2\x80\x8b/\xe2\x80\x8bcdn.syndication.twimg.com,这在我的策略中是不允许的。
这是一个相当长的政策,但相关部分是
\n\ndefault-src \'none\'; ... script-src \'self\' apis.google.com platform.twitter.com; ...\nRun Code Online (Sandbox Code Playgroud)\n\n但是,如果我将cdn.syndication.twimg.com或添加*.twimg.com到标头的一部分,当我通过Google CSP 评估器script-src运行标头时,我会收到警告:
\n\n\n\n
cdn.syndication.twimg.com已知托管允许绕过此 CSP 的 JSONP 端点。
其他一些域也会引发此警告。
\n\n看来我进退两难:要么我不允许 Twitter 运行脚本(需要吗?我真的不知道)并收到违反政策的报告,要么我正在运行一个几乎无用的脚本客户服务提供商。
\n\n有办法摆脱这个难题吗?
\n我正在尝试创建一个将返回jsonp的web服务.目前它只返回json
这是我的代码:
@Path("/jsonp")
public class JsonpWebservice {
@GET
@Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
public JSONWithPadding readAllP(@QueryParam("jsoncallback") @DefaultValue("jsoncallback") String jsoncallback)
{
ToolKitBean tkBean = new ToolKitBean();
tkBean.setNegativeCount("10");
tkBean.setPositiveCount("11");
System.out.println("jsoncallback: " + jsoncallback);
return new JSONWithPadding( new GenericEntity<ToolKitBean>(tkBean) {}, jsoncallback);
}
}
Run Code Online (Sandbox Code Playgroud)
我还定义了一个JAXBContext解析器.当我看到这个webservice的响应时,我看到了json而不是jsonp - {"negativeCount":"10","positiveCount":"11"}
有什么想法,我需要做什么才能让jsonP从这个webservice返回?
谢谢DAmien
我知道这是一个热门话题,但我还没有找到一个完全全面的答案.
我正在尝试为我们的"客户"创建一种简单的方法,在他们的网站上放置Google地图,在地图上绘制客户(或其子集)的位置.客户在MySQL数据库中,通过PHP脚本(根据Google的示例)即时转换为XML.这在我的网站上工作正常,但是当我在另一个网站上尝试时,xmlHTTPRequest不允许查看PHP,因为它在另一个域上.
我可以通过在另一个域上编写另一个PHP文件来解决这个问题,该文件只是读取原始域上的PHP文件.但并非所有客户都会在其服务器上运行PHP.有什么方法可以使用JavaScript从我们的数据库返回XML结果吗?
几点:
使xmlHTTPRequest的JavaScript仍然位于我们的服务器上 - 我们的客户端从脚本标记链接到它.我认为这可能已经足够了,但"起源"(根据Chrome,无论如何)仍被视为域#2
这很棒:如果我在xmlHTTPRequest中使用绝对引用(例如request.open('GET','http://mydomain.com/api/foo.php',true))那么它将在IE中失败,但是如果我使用相对引用('/api/foo.php')它将起作用.
我不太了解它,但我可以使用JSON吗?我见过:'script src ="http://..../someData.js?callback = some_func"'但不知道如何,我会让'someData.js'看起来像JSON?(我在功能方面非常考虑,这可能是不正确的?).
我试过添加:header("Access-Control-Allow-Origin:*"); 到输出XML的PHP的顶部,但它并没有真正做到我能说的多少!
如果我在客户端的服务器上使用PHP包装器,那么使用cURL请求的优势是什么,而不是简单的file_get_contents或fopen?
对不起,很多问题,但任何指导将不胜感激.
非常感谢,
垫
我正在托管一个输出jsonp的wcf服务.IIS的响应(启用了Windows身份验证)是
经过身份验证的服务不支持跨域javascript回调.
有办法解决这个问题吗?我必须打开Windows身份验证,但也想使用wcf来服务我的jsonp
我的网络配置如下
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="webHttpBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<webHttpBinding>
<binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" >
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm"/>
</security>
</binding>
</webHttpBinding>
</bindings>
<services>
<service name="ServiceSite.CustomersService">
<endpoint address="" binding="webHttpBinding"
bindingConfiguration="webHttpBindingWithJsonP" contract="ServiceSite.CustomersService"
behaviorConfiguration="webHttpBehavior"/>
</service>
</services>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud) 例如,我有以下JavaScript代码(已加载Dojo 1.6):
dojo.require("dojo.io.script")
// PART I
var jsonpArgs = {
url: "http://myapp.appspot.com/query",
content: {
id: "1234",
name: "Juan",
start_date: "2000-01-01",
callback: "recover"
}
};
// PART II
dojo.io.script.get(jsonpArgs).then(function(data) {
console.log(data);
});
// PART III
function recover(data) {
console.log(data);
}
Run Code Online (Sandbox Code Playgroud)
我知道我的服务器将收到查询,就像我在地址栏中键入以下内容一样:
http://myapp.appspot.com/query?id=1234&name=Juan&start_date=2000-01-01&callback=recover
Run Code Online (Sandbox Code Playgroud)
如果我使用浏览器地址栏直接查询我的服务器,我会收到MIME类型application/json和浏览器中呈现的明文,如下所示:
recover(
{
id: 1234,
name: Juan,
data: [
["2000-01-01", 1234],
["2000-01-02", 5678]
]
}
);
Run Code Online (Sandbox Code Playgroud)
现在,回顾一下JavaScript的第二部分,我将执行JSONP请求dojo.io.script.get(jsonpArgs).这会返回一个Deferred对象,我可以通过链接来利用.then它.请注意,我将.then事件的处理程序定义为输出捕获data到控制台的事件.
但是,我在控制台中得到的只是一个Event.我试图搜索它的数据树,但我找不到我预期的数据.
我必须使用JQuery和JSON将某些数据发送(并接收)到服务器.到目前为止工作,但不跨域,它必须是跨域的.
我看了解如何解决这个问题并找到了JSONP.据我所知,使用JSONP我必须使用GET发送回调和数据(JQuery允许使用"POST"作为方法,但是当我检查网络流量时,我看到它实际发送GET并且每个都作为参数).
JSONP还需要对服务器进行更改,因为他们期望使用JSON数据发出POST请求,并且他们必须实现一些处理JSONP GET请求的内容.
所以我想知道这与将数据作为GET请求中的关键值参数发送有什么区别?
是否可以使用回调?或究竟是什么?
抱歉有点失落......先谢谢
我知道这已被问过无数次,但我仍然无法让我的代码工作.我正在尝试从我的Javascript应用程序中进行简单的JSONP调用.鳕鱼片段看起来像:
url="http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=AAA&callback=?";
Run Code Online (Sandbox Code Playgroud)
然后是:
$.getJSON(url, function(data) {
alert('hello 1');
});
Run Code Online (Sandbox Code Playgroud)
要么:
$.ajax({url: url,
datatype: 'jsonp',
success: function(data) { alert("hello 2"); },
error: function(j, t, e) { alert(t);}
});
Run Code Online (Sandbox Code Playgroud)
两种方法都不奏效.第二种方法导致"错误"警报.第一个也没有成功.我究竟做错了什么?非常感谢!!
更新:我想我发现至少有一个问题.让我看看这个.
更新2:对不起,这段代码实际上是有效的,至少是第一种方法.这个代码片段周围有一个微妙的错误导致代码无法正常工作,但整体而言这很好.异步调用有时候有点棘手:-)
我有一个网页,要求用户提供一段文字,然后对其进行一些操作.为了向懒惰用户演示,我想添加一个"我感觉很幸运"的按钮,它将从维基百科中获取一些随机文本并填充输入.
如何使用Javascript从随机的Wikipedia文章中获取一系列文本?
我发现了一些使用Wikipedia API 获取和解析文章的例子,但它们往往是服务器端.我正在寻找一个完全来自客户端的解决方案,并且不会受到相同原始策略的影响.
注意随机乱码是不够的; 我需要有意义的人类可读句子.
我目前正在使用jQM开发移动Web应用程序.
虽然我找到了问题的答案,但我找不到任何好的答案.
这是我的目标:
由于跨域问题,我坚持第一步.
有些人写道如何使用带有回调函数的JSONP,但似乎该技术仅在处理JSON格式时有效.
我还读到,由于安全问题,JavaScript不支持在另一个域中下载html页面.
他们是对的吗?
没有办法通过JavaScript实现我的目标?
我刚刚开始使用react-native,我正在以文档为基础做经典示例...
fetch('https://facebook.github.io/react-native/movies.json')
.then((response) => response.json())
.then((responseJson) => {
return responseJson.movies;
})
.catch((error) => {
console.error(error);
});
Run Code Online (Sandbox Code Playgroud)
在这个例子中,这一切都适用于正确的json.
但是,在我的特定情况下,唯一可用的api响应是JSONP而不是JSON.没有基本的JSON可用.所以我收到关于"("的错误.
所以代替JSON就好了
{"id": "1", "movies" : [ { "id" : "123" } ] }
Run Code Online (Sandbox Code Playgroud)
我收到JSONP之类的
?( {"id": "1", "movies" : [ { "id" : "123" } ] });
Run Code Online (Sandbox Code Playgroud)
但是,我不确定我可以做些什么来通过fetch promises获取JSON?如何使用我自己的函数操作响应,还是有更自然的方式?
所以在第一个然后()我不确定我能做些什么来摆脱json(我已经尝试过对响应进行操作,但这似乎只是看看了这个承诺,所以我不确定反应是如何获取的正在运作这个).