内容简介:在响应头增加字段,告诉浏览器我允许对方跨域调用。所以我们可以在filter上增加相应头浏览器在发出请求的时候会先判断请求是简单请求还是非简单请求。如果是简单请求它就会先执行后判断,如果是非简单请求他就会先发一个预检命令,检查通过之后他才会把跨域请求发出去。我们可以通过对比普通请求和跨域请求请求头里面的区别,对比之后发现跨域请求的请求头里面多了一个orgin字段。这个字段的值是当前域名的信息。浏览器发现这个请求是跨域请求的时候,它就会在请求头里面增加一个当前域的信息的字段。然后等请求返回回来的时候,他就会检查
被调用方-Filter解决方案
在响应头增加字段,告诉浏览器我允许对方跨域调用。所以我们可以在filter上增加相应头
浏览器是先执行还是先判断?
浏览器在发出请求的时候会先判断请求是简单请求还是非简单请求。如果是简单请求它就会先执行后判断,如果是非简单请求他就会先发一个预检命令,检查通过之后他才会把跨域请求发出去。
浏览器如何判断?
我们可以通过对比普通请求和跨域请求请求头里面的区别,对比之后发现跨域请求的请求头里面多了一个orgin字段。这个字段的值是当前域名的信息。浏览器发现这个请求是跨域请求的时候,它就会在请求头里面增加一个当前域的信息的字段。然后等请求返回回来的时候,他就会检查下响应头里面有没有允许跨域的信息如果没有他就会报错。
filter代码实现
简单请求和非简单请求:
1、简单请求:
方法为GET、HEAD、POST的请求,并且请求头(header)里面没有自定义头;Content-Type为text/plain、multipart/form-data、application/x-www-form-urlencoded。
2、非简单请求:
方法为PUT、DELETE的请求,发送JSON格式的ajax请求、带自定义请求头的ajax请求。
例子:发送JSON格式的ajax请求
Access-Control-Allow-Headers是什么?有什么作用?
响应头部 Access-Control-Allow-Headers 用于 preflight request (预检请求)中,列出了将会在正式请求的 Access-Control-Expose-Headers 字段中出现的首部信息。简单首部,如 simple headers、Accept、Accept-Language、Content-Language、Content-Type (只限于解析后的值为 application/x-www-form-urlencoded、multipart/form-data 或 text/plain 三种MIME类型(不包括参数)),它们始终是被支持的,不需要在这个首部特意列出。
Access-Control-Max-Age是什么?
浏览器的同源策略,就是出于安全考虑,浏览器会限制从脚本发起的跨域HTTP请求(比如异步请求GET, POST, PUT, DELETE, OPTIONS等等),所以浏览器会向所请求的服务器发起两次请求,第一次是浏览器使用OPTIONS方法发起一个预检请求,第二次才是真正的异步请求,第一次的预检请求获知服务器是否允许该跨域请求:如果允许,才发起第二次真实的请求;如果不允许,则拦截第二次请求。Access-Control-Max-Age用来指定本次预检请求的有效期,单位为秒,,在此期间不用发出另一条预检请求。
例如:res.addHeader("Access-Control-Max-Age", "3600"),表示隔60分钟才发起预检请求
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- acme.sh 续期问题(路径问题)
- 缓存的一些问题和一些加密算法【缓存问题】
- 如何把设计问题转化为数学问题(方法论)
- 推荐系统中的冷启动问题和探索利用问题
- GraphQL 教程(六)—— N+1问题和缓存等问题
- Golang 并发问题(四)之单核上的并发问题
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
UNIX编程环境
Brian W.Kernighan、Rob Pike / 陈向群/等 / 机械工业出版社 / 1999-10-1 / 24.00
本书对UNIX操作系统的编程环境做了详细而深入的讨论,内容包括UNIX的文件系统、Shell、过滤程序、I/O编程、系统调用等,并对UNIX中的程序开发方法做了有针对性的指导。本书内容深入浅出,实例丰富,无论是UNIX系统的初学者还是专业人员都可从本书受益。本书亦可作为大学生、研究生学习UNIX的教材。一起来看看 《UNIX编程环境》 这本书的介绍吧!