javascript – 如何使用JSONP克服XSS问题?

我有一个javascript在jetty服务器上执行,它正在向另一台服务器(wamp服务器)上的scoket发送XMLHTTPRequest.请求被发送到套接字,但XHR响应似乎被阻止.

我听说我可以使用JSONP来解决这个问题.
然而,因为我是新手两个javascript我从来没有使用JSONP技术之前我会非常感谢如何使用这种技术的任何帮助?

function sendPost(url, postdata, callback) {

xmlHttp=GetXmlHttpObject()

if (xmlHttp==null) {
    alert ("Browser does not support HTTP Request")
    return
} 

xmlHttp.onreadystatechange=callback
xmlHttp.open("POST",url,true)
xmlHttp.send(postdata);

}

function sendInitRQ(width, height) {

var post = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><command     type=\"init\"><width>" + width + "</width><height>" + height + "</height></command>";

sendPost("http://localhost:80/socket.php", post, initReturned);

}

我知道php套接字正在接收帖子,因为当我检查服务器日志时,我在获取请求上得到200.

我只是想知道如何使用JSONP方法?
我已经看到了该方法的示例,但我仍然不确定如何做到这一点.

解决方法:

JSONP技术使用完全不同的机制向服务器发出HTTP请求并对响应进行操作.它需要客户端页面和服务器上的协作代码.服务器必须有一个URL,它响应HTTP“GET”请求,并在函数调用中包含一个JSON块.因此,您不能只对任何旧服务器执行JSONP事务;它必须是明确提供功能的服务器.

我们的想法是,您的客户端代码会创建一个< script>动态阻止,“src”属性设置为JSONP服务器的URL. URL应包含一个参数,告诉服务器您希望它使用JSON数据调用的Javascript函数的名称. (确切地说,要使用的参数名称取决于服务器;通常它是“回调”,但我看到一些使用“jsonp”.)客户端当然必须在全局范围内具有该功能.换句话说,如果你有一个像这样的功能

function handleJSON(json) {
  var something = json.something;
  // ... whatever ...
}

然后你的URL告诉服务器调用“handleJSON”,服务器响应应如下所示:

handleJSON({"id": 102, "something": { "more": "data", "random": true }});

因此,当< script>从您提供的“src”URL加载块,浏览器将解释内容(来自服务器的响应),并且将调用您的函数.

应该清楚的是,您应该只向您信任的服务器发出JSONP请求,因为它们会发回代码以在您的客户端中执行,并且可以访问您的客户端与其他安全站点之间的任何活动会话.

编辑 – 这是一篇很好的文章:http://www.ibm.com/developerworks/library/wa-aj-jsonp1/

上一篇:javascript-来自Google / Bing的具有自动完成功能的自定义框.有什么办法读取接收到的json文件吗?


下一篇:javascript – 没有调用jQuery.ajax转换器