说说CORS为何要区分预检请求和简单请求呢?
CORS:跨域资源共享也称为跨域请求,为什么要分预检请求和简单请求呢?
简单请求 :因为img的src、script的js只能发起get请求,而表单虽然能进行post提交,但一方面表单的提交是显式的,用户可以感知,另一方面,表单提交只能发起请求,而不能获取请求的响应,这样一来,请求可以发起,而服务端可以进行拒绝,浏览器认为这是安全的。
复杂请求:通过脚本发起的跨域请求,可以对响应内容做处理,这是用户不可感知的,浏览器认为这是不安全的,所以对于复杂请求,进行跨域的限制,而CORS机制就是浏览器对跨域进行处理。对于复杂请求会发起一个预检请求,判断服务端是否可以接受这个跨域请求,接受后就可以向服务端发起真正的请求。
为什么要发起预检请求呢?
1 限制跨域请求的发出
2 请求可以发出,但是响应结果会被拦截。
而浏览器免不了要进行跨域,访问资源哪有不跨域的,不跨域你只能看自己域里面的东西,所以浏览器一般是采用第二个拦截方式,而这种拦截方式,可能已经对服务端进行了数据的操作,为了防止这种情况,首先发起预检请求,来检测是否能够发起真正的请求。(这里能知道,简单请求是没必要进行预检的,因为浏览器认为,简单请求是安全的,是被用户允许的)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
学习不打烊,充电加油只为遇到更好的自己,365天无节假日,每天早上5点纯手工发布前端知识点(死磕自己,愉悦大家)。希望大家在这浮夸的前端圈里,保持冷静,坚持每天花20分钟来学习与思考。在这千变万化,类库层出不穷的前端,建议大家不要等到找工作时,才狂刷题,提倡每日学习!欢迎大家关注3+1开源项目!希望大家每人去学习与思考!(不要为了谁而来,要为自己而努力!)