怎么做租房网站,意识形态 加强网站建设,建设网站制作实训报告,赣州网站建设培训什么是跨域#xff1f; 跨域是指从一个域名的网页去请求另一个域名的资源。比如从www.baidu.com页面去请求www.google.com的资源。但是一般情况下不能这么做#xff0c;他是由浏览器的同源策略造成的#xff0c;是浏览器对JavaScript施加的安全限制。 跨域的严格定义是…什么是跨域 跨域是指从一个域名的网页去请求另一个域名的资源。比如从www.baidu.com页面去请求www.google.com的资源。但是一般情况下不能这么做他是由浏览器的同源策略造成的是浏览器对JavaScript施加的安全限制。 跨域的严格定义是只要协议、端口、域名有任何一个的不同就被当做是跨域。 所谓同源是指域名、协议、端口有任何一个不同就是跨域。 URL 说明 是否允许通信 http://www.a.com:80/a.jshttp://www.a.com:80/b.js 同一域名下 允许 http://www.a.com:80/lab/a.jshttp://www.a.com:80/script/b.js 同一域名下不同文件夹 允许 http://www.a.com:8000/a.jshttp://www.a.com/b.js 同一域名不同端口 不允许 http://www.a.com:80/a.jshttps://www.a.com:443/b.js ssl 同一域名不同协议 不允许 http://www.a.com/a.jshttp://script.a.com/b.js 主域相同子域不同 不允许 http://www.a.com/a.jshttp://a.com/b.js 同一域名不同二级域名同上 不允许cookie这种情况下也不允许访问 http://www.cnblogs.com/a.jshttp://www.a.com/b.js 不同域名 不允许 为什么浏览器要限制跨域访问呢
原因就是安全问题 如果一个网页可以随意地访问另外一个网站的资源那么久有可能在客户完全不知情的情况下出现安全问题。比如以下安全问题
用户访问www.mabank.com登录并进行网银操作这时cookie都生成并存放在浏览器。用户突然想起件事并迷迷糊糊地访问了一个邪恶的网站 www.xiee.com这时该网站就可以在它的页面中拿到银行的cookie比如用户名登陆token等然后发起www.mybank.com 的操作。如果这时浏览器不予限制并且银行也没有做响应的安全处理的话那么用户的信息有可能就这么泄露了。 为什么要跨域
既然有安全问题那么为什么又要跨域呢
有时公司内部有多个不同的子域比如一个是location.company.com而应用是放在app.company.com这时想从app.company.com去访问location.company.com的资源就属于跨域。 解决跨域问题的方法
前端解决后端解决
跨域资源共享CORS W3C 的 Web 工作组推荐了一种新的机制即跨域资源共享Cross-origin Resource Sharing简称CORS。其实这个机制就是实现了跨站访问控制使得安全地进行跨站数据传输成为可能。 服务器端对于CORS的支持主要就是通过设置Access-Control-Allow-Origin来进行的。如果浏览器检测到相应的设置就可以允许ajax进行跨域的访问。 只需要在后台中加上响应头来允许域请求在被请求的Response header中加入设置就可以实现跨域访问了 创建过滤器实现后端设置允许跨域访问:
WebFilter(urlPatterns /*)
public class CorsFilter implements Filter {public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException {System.out.println(跨域过滤器);HttpServletResponse httpResponse (HttpServletResponse) servletResponse;HttpServletRequest httpRequest (HttpServletRequest) servletRequest;//允许携带Cookie时不能设置为* 否则前端报错httpResponse.setHeader(Access-Control-Allow-Origin, httpRequest.getHeader(origin));//允许所有请求跨域httpResponse.setHeader(Access-Control-Allow-Methods, *);//允许跨域的请求方法GET, POST, HEAD 等httpResponse.setHeader(Access-Control-Allow-Headers, *);//允许跨域的请求头httpResponse.setHeader(Access-Control-Allow-Credentials, true);//是否携带cookiefilterChain.doFilter(servletRequest, servletResponse);}
}