这是奇怪的,我想知道是否有人能揭示为何会发生这样的一些情况。
基本上,我一直在拉我的头发试图测试JSONP出来,所以我可以实现其他网站可以使用JSON Web服务。 我在本地主机上做开发 - 具体而言,Visual Studio 2008和Visual Studio 2008中的内置Web服务器。
因此,作为一个JSONP试运行瓦特/ jQuery的,我实现了以下内容:
$().ready(function() {
debugger;
try {
$.getJSON("<%= new Uri(Request.Url, "/").ToString() %>XssTest?callback=?", function(data) {
alert(data.abc);
});
} catch (err) {
alert(err);
}
});
并在服务器上..
<%= Request["callback"] %>({abc : 'def'})
那么最终发生的是我设置一个断点在服务器上,我得到的断点都第一个“调试器;” statment在客户端脚本,以及在服务器上。 该JSONP URL确实正在在页面加载后调用。 这是伟大的工作。
我遇到的问题是,回调将不会执行。 我在这两个IE8测试这个问题,以及火狐3.5。 没有一个会调用回调函数。 渔获(ERR)从未达到,无论是。 什么都没有发生的一切!
我一直停留在这一个星期,甚至在指定的端口上,以Telnet手动密钥的HTTP请求进行测试,以确保服务器返回的格式...
callbackfn({abc : 'def'})
..它是。
(“”)于是,我明白了,如果我从本地主机更改主机名与一个全球化者本地主机,即http://localhost.:41559/而不是HTTP://本地主机:41559 / (是的,添加点到任何主机名是合法的,这是DNS什么global::
是C#的命名空间)。 然后,它的工作! Internet Explorer和Firefox 3.5终于给我一个警告消息时,我只是增加了一个点。
因此,这使我怀疑,这到底是怎么回事呢? 为什么会与互联网的主机名,而不是用普通本地主机下旬脚本代码生成的工作? 或者是,正确的问题?
显然,这是出于安全原因实施,但什么是他们试图保护? 此外,通过得到它以点工作,我刚暴露出的安全保护功能安全漏洞?
顺便说一句,我的hosts文件,而改变对其他主机,有没有什么特别的本地主机与回事; 默认127.0.0.1 / :: 1仍然存在,下面没有覆盖。
追问:我过去的这个地方发展的目的,加入:
127.0.0.1 local.mysite.com
..我的hosts文件,然后添加以下代码到我的Global.asax:
protected void Application_BeginRequest(object sender, EventArgs e)
{
if (Request.Headers["Host"].Split(':')[0] == "localhost")
{
Response.Redirect(
Request.Url.Scheme
+ "://"
+ "local.mysite.com"
+ ":" + Request.Url.Port.ToString()
+ Request.Url.PathAndQuery
, true);
}
}