zoukankan      html  css  js  c++  java
  • 跨域问题简介

    一、设置跨域模拟环境

    修改:C:WindowsSystem32driversetchosts文件

    DNS解析过程:hosts-->DNS Server,首先解析本地的hosts文件,hosts文件找不到的域名,则去DNS服务器进行查找。

    例如我们添加了:

    127.0.0.1 a.test.com

    127.0.0.1 b.test.com

    通过ping命令查看是否配置完成:

    搭建一个spring工程,写一个jsp页面两个按钮,如图所示:

    Controller代码:

    @Controller  
    @RequestMapping(value="/public")  
    public class AjaxTestController {  
        //跳转到测试页面     
        @RequestMapping(value="/index")  
        public String toIndex(){  
            return "index";  
        }  
        //请求资源
        @RequestMapping(value="/monitorAjax")
        @ResponseBody
        public String monitorAjax(){
            String result="Ok!";
            return result;
        }
    }  

    jsp代码:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%
        String path=request.getContextPath();
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>  
      <head>  
        <title>测试</title> 
         <link href="<%=path%>/resources/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
      </head>      
      <body>  
          <div class="container">
            <div class="row" style="margin-top:50px;">
                <div class="col-md-4" style="height:100px;border:1px solid #cecece;">
                    Ajax跨域模拟环境设置页面
                    <button type="button" class="btn btn-primary" id="Atest">请求A资源</button>
                    <button type="button" class="btn btn-primary" id="Btest">请求B资源</button>
                </div>
                <div class="col-md-8" style="height:100px;border:1px solid #cecece;"></div>
            </div>
          </div>
      <script type="text/javascript" src="<%=path%>/resources/lib/bootstrap/js/jquery.min.js"></script>
      <script type="text/javascript" src="<%=path%>/resources/lib/bootstrap/js/bootstrap.min.js"></script>
      <script type="text/javascript" src="<%=path%>/resources/js/ajaxJsonpCase.js"></script>
      <script type="text/javascript">
        var path='<%=path%>';
          $(function(){
              $("#Atest").click(function(){
                  ajaxJsonpCase.AjaxATestResources();
              });
              
              $("#Btest").click(function(){
                  ajaxJsonpCase.AjaxBTestResources();
              });
              
          })
      </script>
      </body> 
    </html>  

    js代码:

    var ajaxJsonpCase={
       //在a.test.com域名下请求本域名资源 AjaxATestResources:function(){
    var url=path+"/public/monitorAjax.do" $.ajax({ type:'post', url:url, data:{}, async:false, dataType: "json", success:function(data){ alert(JSON.stringify(data)); }, error:function(error){ alert(error); } }) },
    //在a.test.com域名下请求b.test.com资源。 AjaxBTestResources:function(){
    var url="http://b.test.com:8888/"+path+"/public/monitorAjax.do"; $.ajax({ type:'post', url:url, data:{}, async:false, dataType: "json", success:function(data){ alert(data); }, error:function(error){ alert(JSON.stringify(error)); } }) } }

    测试结果:

    点击A按钮:

    请求成功!

    点击B按钮:

    报同源问题 

    二、同源策略的产生

      我们知道JS可以读取/修改网页的值。

      一个浏览器中,打开一个银行网站和一个恶意网站,如果恶意网站能够对银行网站进行修改,那么就会很危险。你打开了恶意网站和另一个网站,如果没有同源限制,该恶意网站就可以构造AJAX请求频繁在另一个网站发广告帖。同源策略就是为了解决这类问题而出现的。

    三、什么是同源策略(举例)

      同源策略,即拥有相同的协议(protocol),端口(如果指定),主机(域名)的两个页面是属于同一个源。

      

      然而在IE中比较特殊,IE中没有将端口号加入同源的条件中,因此上图中端口不同那一项,在IE中是算同源的.

        浏览器的同源策略,限制了来自不同源的"document"或脚本,对当前"document"读取或设置某些属性。 (白帽子讲web安全[1])

          从一个域上加载的脚本不允许访问另外一个域的文档属性。 

      注意:在浏览器中,<script>、<img>、<iframe>、<link>等标签都可以加载跨域资源,而不受同源限制,但浏览器限制了JavaScript的权限使其不能读、写加载的内容。

           另外同源策略只对网页的HTML文档做了限制,对加载的其他静态资源如javascript、css、图片等仍然认为属于同源。

     跨域问题解决方案:代码下载

  • 相关阅读:
    软件工程第四次作业
    软件工程第三次作业
    图片
    软件工程第二次作业
    软件工程第一次作业
    我的大学生活-3-35-任延勇
    我的未来只有我知道
    cpu占用率高排查知识点
    LeetCode字符串题目
    hashmap
  • 原文地址:https://www.cnblogs.com/shawWey/p/6731731.html
Copyright © 2011-2022 走看看