localhost的行为类似于同一台机器上的跨域

时间:2015-10-20 17:33:04

标签: javascript asp.net

为了避免localhost上的JavaScript与实际上是同一台机器的计算机上的Aspx之间的跨域,应用以下技巧

JavaScript在机器A上打开http://localhost:port/site/page1.aspx,它在page_load()上执行response.redirect()到http://computername/site/page2

完成后,Page2将response.redirect()返回http://localhost:port/site/page1.aspx?ReturnValue,并将ReturnValue在page1中复制到客户端字段,因此原始调用JavaScript可以访问它。

问题是访问被拒绝错误,尽管Javascript和page1应该被认为是同一个域。仅当使用http://localhost/打开page2时,才会出现问题。

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

要查看问题,您需要了解重定向的工作原理。重定向是包含重定向指令(Location标头)的服务器响应。重定向不会发生在服务器上,但在浏览器中,它只是浏览器转到不同页面的指令。

所以序列将如下所示:

  1. JavaScript:请求http://localhost:port/site/page1.aspx
  2. 服务器:响应指向重定向到http://computername/site/page2
  3. JavaScript /浏览器:由于重定向信息,尝试请求http://computername/site/page2
  4. 但这仍然是一个来源于localhost:port的请求,因为computername是一个不同的域,此请求将被阻止。因此,永远不会向http://computername/site/page2发出请求,因此不会生成到http://localhost:port/site/page1.aspx?ReturnValue的重定向。