聊一下,前后分离后带来的跨域访问和cookie问题

在谈前后分离前,我们先看看什么是前后一体的.当我们用javaweb开发网站时,最终我们渲染的jsp或者springthymeleaf.我们的页面其实是WEB-INFO或者templates下.当用户请求我们的xxx页面资源其实并不是请求的真正的页面,而是经过我们controller处理完,产生modelAndView后,在找到视图解析器,最终把数据放到视图中,然后response才把视图通过流传输给客户端.在这种开发环境中,我们请求的页面实际是在web容器中的,自然是本域访问.

如果我们将html文件整个挪出去,然后通过ajax方式访问我们的controller,此时controller和html并不在一个环境中,就产生了跨域访问.在产生跨域访问时,浏览器的请求顺序是 1向服务端发起一个options类型的请求,这个请求则是向服务端发出疑问,你允许我访问吗?这个疑问包含的条件有,客户端请求头,客户端地址,客户端请求方式,等等.如果服务端允许客户端的这些条件,则告诉客户端浏览器,你可以发出真正的请求了.这时浏览器才会发送真正的请求.

那么接下来我们来看服务端配置,也就是入栈规则了.

这么配置算是万无一失,前提是,你的客户端不传递cookie.

做javaweb开发的朋友们都知道,java中对于每一个客户有一个session.而session是根据cookie中的JSESSION来甄别身份的.

如果是前后一体的项目,则每个请求都会默认带上cookie,但如果是前后分离则不会每次都携带cookie.这时我们需要在客户端进行配置

我这里使用的是axios插件

这时则会每次携带cookie,但是这并没结束.如果客户端要携带cookie,那服务端

必须明确指定放行的客户端域名.这其实也是一个保护措施,试想,如果服务端允许每一个陌生的客户端访问,那么万一有坏蛋通过携带大量cookie来搞服务端,又当如何.

至此,前后分离所带来的跨域访问和cookie携带问题就搞定了.

原文地址:https://www.cnblogs.com/zumengjie/p/11846953.html

时间: 2024-11-11 11:50:43

聊一下,前后分离后带来的跨域访问和cookie问题的相关文章

解决vue+springboot前后端分离项目,前端跨域访问sessionID不一致导致的session为null问题

问题: 前端跨域访问后端接口, 在浏览器的安全策略下默认是不携带cookie的, 所以每次请求都开启了一次新的会话. 在后台打印sessionID我们会发现, 每次请求的sessionID都是不同的, 既然每次请求都是一个新的会话, 那我们去获取session的时候自然就是null了. 解决办法如下: 环境: vue 2.0 springboot 2.1.6 一.前端部分 1.  在vue引入axios的位置添加以下代码 import axios from 'axios' axios.defau

前后端分离开发,跨域访问的apche设置

1,如何让Apache支持跨域访问呢? 步骤: 修改httpd.conf,windows中对应的目录是:C:\wamp\bin\apache\Apache2.4.4\conf\httpd.conf 把LoadModule headers_module modules/mod_headers.so 前面的注释删除 修改  改为:  即: <Directory />    AllowOverride none    Require all granted    Header set Access-

跨域访问和同源策略

因为在同一个浏览器窗口中能够同时打开多个网站的页面,而且它们都处于同一个会话中,如果不禁止跨域访问则会造成用户隐私数据泄露和登录身份冒用的问题,所以浏览器会使用同源策略限制跨域访问. 在浏览器中,通过JS代码访问不同域名下的URL或者iframe时,会被禁止访问.而不是通过JS代码进行的跨域访问不存在跨域问题!比如跨域加载图片,引用JS文件,下载各种文件,使用iframe跨域嵌入其他网站的页面都是可以的. 跨域访问被禁止有时会给应用开发带来阻碍,但在符合特定条件时也有相应的方法在保证安全的情况下

Javascript 跨域访问解决方案 总结

在客户端编程语言中,如javascript和ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义.同 源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问和操作另外一个域的绝大部分属性和方法.那么什么叫相同域,什么叫不同的域呢? 同源策略 在客户端编程语言中,如javascript和 ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义.同源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问和操作另外一个

JSON跨域读取那点事(JSONP跨域访问)

最近在码一个小项目,需要远程读取json.因为需求很少,如果引用jquery使用其getjson方法就显得很浪费嘛= = 这篇文章很详细的解释了JSON跨域读取的前世今生,把原理讲得很透彻.特此分享. 原文链接:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html 前言: 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强

JSON和JSONP,原来ajax引用这个来实现跨域访问的

由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socket通讯和本地数据库功能,又或者通过HTML5的WebSocket也可以实现与服务器的通讯和服务端推功能,但这两种方式都有其局限性,前者需要PhoneGap支持,后者要求用户设备必须支持WebSocket,因此都不能算是ST2的原生解决方案,原生的只有AJAX. 说到AJAX就会不可避免的面临两个问题,第一

Angular2中对ASP.NET MVC跨域访问

应用场景 项目开发决定使用angular2进行前后端分离开发,由我负责后端服务的开发,起初选择的是web api进行开发.对跨域访问通过API中间件+过滤器对跨域访问进行支持.开发一段后,通知需要移植到MVC4项目中一同发布angular2并且放弃API,但前期开发仍然需要分离开发. 遇到的问题 想继续使用中间件和过滤器的方式对MVC中的Action进行操作和限制,但经过尝试后发现行不通.主要问题有几下几点. API的处理管道和MVC的处理管道是两个完全不同的东西,所以原来用于API中的编码和方

html5的postmessage实现js前端跨域访问及调用解决方案

关于跨域访问,使用JSONP的方法,我前面已经demo过了,具体见http://supercharles888.blog.51cto.com/609344/856886,HTML5提供了一个非常强大的API,叫postMessage,它其实就是以前iframe的进化版本,使用起来极其方便,这里举个实验例子: 我们依旧按照与上文相同的设定,假定我们有2个Domain Domain1: http://localhost:8080  它上面有个应用叫HTMLDomain1,并且有个页面叫sender.

跨域访问实现依据

首先要弄清楚域是含义.这里引用百度知道里的域的一个概念说明: 域(Domain)是Windows网络中独立运行的单位,域之间相互访问则需要建立信任关系(即Trust Relation). 信任关系是连接在域与域之间的桥梁.当一个域与其他域建立了信任关系后,2个域之间不但可以按需要相互进行管理, 还可以跨网分配文件和打印机等设备资源,使不同的域之间实现网络资源的共享与管理. 有一种简明的说法来解释广域跨域:跨域访问,简单来说就是 A 网站的 javascript 代码试图访问 B 网站, 包括提交