专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

跨域请求如何携带cookie?不小心都拿了Offer

  前言
  最近在参加面试找工作,陆陆续续的面了两三家。其中面试官问到了一个问题:如何解决跨域问题?我巴巴拉拉的一顿说,大概了说了四种方法,然后面试官紧接着又问:那跨域请求怎么携带cookie呢?(常规的面试套路,一般都会顺着你的回答往深了问)由于之前的项目都是同源的,不牵涉跨域访问,所以一时没有回答出来,后来研究了下,所以有了这篇文章
  阅读本文,你将学到:1。学会withCredentials属性;2。学会axios配置withCredentials;3。学会设置AccessControlAllowOrigin属性;4。学会设置AccessControlAllowCredentials属性;5。学会解决跨域请求携带源站cookie的问题;
  思路:使用express搭建第一个服务A(http:localhost:8000),运行在8000端口上;A服务托管index。html(用于在前端页面发送网络请求)文件;在A服务中写一个处理请求的路由,加载index。html页面时,种下cookie(这里种cookie为了在请求B服务时携带上);使用express搭建第二个服务B(http:localhost:8003),运行在8003端口上;在A服务托管的index。html页面去请求B服务,然后把cookie传过去;
  先看下代码结构,相对比较的简单:
  A服务的代码:srcapp1。jsconstexpressrequire(express);constappexpress();index。html加载时会请求login接口设置cookieapp。get(login,(req,res){res。cookie(user,jay,{maxAge:2000000,httpOnly:true});res。json({code:0,message:登录成功});});此接口是检测cookie是否设置成功,如果设置成功的话,浏览器会自动携带上cookieapp。get(user,(req,res){req。headers。cookie:userjayconstuserreq。headers。cookie。split()〔1〕;res。json({code:0,user});});托管index。html页面这样的话在index。html中发起的请求,默认的源就是http:localhost:8000然后再去请求http:localhost:8003就会出现跨域了app。use(static,express。static(public));app。listen(8000,(){console。log(app1runningatport8000);});
  index。html的代码:!DOCTYPEhtmlhtmllangenheadmetacharsetUTF8metahttpequivXUACompatiblecontentIEedgemetanameviewportcontentwidthdevicewidth,initialscale1。0titleDocumenttitleheadbodyh2thisisindex。htmlatport8000h2buttonidbutton发送同源请求buttonbuttonidcrossbutton发送跨域请求buttonbodyhtml
  B服务的代码:srcapp2。jsconstexpressrequire(express);constappexpress();定义一个接口,index。html页面请求这个接口就是跨域(因为端口不同)app。get(anotherService,(req,res){res。json({code:0,msg:这是8003端口返回的});});app。listen(8003,(){console。log(app2runningatport8003);});二、解决跨域携带cookie问题
  首先我们先在A服务的index。html页面中得到一个cookie,运行A服务:npminstallexpressDnodesrcapp1。js
  然后打开http:localhost:8000staticindex。html:没有问题的话,页面长这样:
  这个时候F12打开控制台:可以看到发送了一个login请求,并且设置了cookie,也可以选择浏览器控制台的Application页签,选中cookie,可以看到cookie的信息:
  然后我们点击页面上的发送同源请求按钮,可以看到发送了一个user请求,并且已经携带上了cookie:
  接下来刺激的画面来了,我们点击发送跨域请求按钮,出现了跨域请求的报错:
  重点:接下来开始解决跨域携带cookie问题:1。在前端请求的时候设置request对象的属性withCredentials为true;
  什么是withCredentials?
  XMLHttpRequest。withCredentials属性是一个Boolean类型,它指示了是否该使用类似cookies,authorizationheaders(头部授权)或者TLS客户端证书这一类资格证书来创建一个跨站点访问控制(crosssiteAccessControl)请求。在同一个站点下使用withCredentials属性是无效的。
  如果在发送来自其他域的XMLHttpRequest请求之前,未设置withCredentials为true,那么就不能为它自己的域设置cookie值。而通过设置withCredentials为true获得的第三方cookies,将会依旧享受同源策略,因此不能被通过document。cookie或者从头部相应请求的脚本等访问。修改跨域请求的代码crossButton。onclickfunction(){axios({withCredentials:true,新增method:get,url:http:localhost:8003anotherService,})。then((res){console。log(res);});};
  这个时候再去发送一个跨域请求,你会发现依旧报错,但是我们仔细看下报错,意思是需要设置header的AccessControlAllowOrigin属性:
  2。在服务端设置AccessControlAllowOrigin
  我们修改B(app2。js)服务的代码:在所有路由前增加,可以拦截所有请求app。all(,(req,res,next){res。header(AccessControlAllowOrigin,http:localhost:8000);next();});
  修改完之后再次发送一个跨域请求,你会发现,又报错了(接近崩溃),但是跟之前报的错不一样了,意思大概就是AccessControlAllowCredentials这个属性应该设置为true,但是显示得到的是个:
  3。在服务端设置AccessControlAllowCredentials
  再次修改B服务的代码(每次修改后需要重新运行):在所有路由前增加,可以拦截所有请求app。all(,(req,res,next){res。header(AccessControlAllowOrigin,http:localhost:8000);res。header(AccessControlAllowCredentials,true);新增next();});
  再发送一个跨域请求:
  可以看到,这个跨域请求已经请求成功并且返回数据了!而且也携带了A服务的cookie,这个时候已经大功告成了。三、总结前端请求时在request对象中配置withCredentials:true;服务端在response的header中配置AccessControlAllowOrigin,http:xxx:{port};服务端在response的header中配置AccessControlAllowCredentials,true
  如果看完这篇文章能够帮助到你,请点赞转发关注哦

熊出没PK喜羊羊背后的秘密,都在这里1905电影网专稿每年不少人在预判或者复盘春节档的时候,总能为每部电影找到说辞,唯独不爱细说熊出没这个系列。如果放在过去几年,很多人会说,熊出没大电影是春节档唯一的低幼动画,题材类一次假死断送大好前程,从爆火到无人问津,卓依婷还好吗?大家还记得那个唱童年的卓依婷吗?在多个版本当中,卓依婷稚嫩的童声,与该首歌拥有着完美结合。也是一唱出口,能让我们迅速在脑子里构建一个轻松快乐又无忧无虑的童年生活。实际上童年只是卓依2022年API成为恶意攻击首选,企业如何保护API安全?随着云计算移动互联网物联网的蓬勃发展,越来越多的应用开发深度依赖于API之间的相互调用。特别是疫情常态化后,协同办公在线教育直播短视频等线上应用蓬勃发展,API在其中既能够起到连接吃着下饭,成本几块钱,做法简单又美味,这6道家常小炒很贴心过年期间大鱼大肉吃腻了,总想吃点清淡的刮刮油,今天就和大家分享6道简单家常小炒,简单易学,省时省力,每道菜的成本才几块钱,而且吃起来也非常下饭,有喜欢的朋友们赶紧学起来吧,做给家人舒淇,成名背后的不妥协她的壮大,是用摇摆不定的人生换来的一生太短,一生只演一个角色太委屈。舒淇不美。真的不美。两只眼睛生得太开嘴唇太厚鼻子太塌门牙的牙缝太大而且脸上的雀斑不上妆的时候总是吱吱喳喳,表现得太过雀跃但不知道为什么,我喜欢舒淇秋季流行单品整理字母T百搭又显瘦微凉的天气穿什么简单又好看?简约风的字母卫衣无论是搭配裙子还是裤子都让你韩范儿爆表!快快跟着小编一起来学习一下字母T恤的搭配技巧,街拍时尚达人就是你。字母T热潮从夏天延烧到秋天,不不惹事不怕事!韩媒采访故意挑事,冬奥冠军武大靖2字回应呵呵在最近一段时间,很多媒体都对北京冬奥会短道速滑的比赛有所关注,因为这个项目一直以来都具有很大的争议,韩国媒体在前几日的比赛里一直没有获得好成绩,虽然在2月9日的男子1500米比赛中韩国女团中国成员庆祝祖国夺首金,结果遭韩国网民网暴(观察者网讯)炒作韩服问题网暴中国短道速滑队韩裔教练攻击武大靖Ins账号冬奥会赛场上的频频失利让一众韩国网民心态爆炸,四处出征。这一次,遭殃的是女团aespa中国籍成员宁艺卓,只因可笑至极!同名男子假扮中国教练,发布致歉声明讨韩国人欢心北京时间2月10日,2022年北京冬奥会仍然在如火如荼地进行当中,在刚刚结束的男子短道速滑1500米的比赛中,两名中国小将张添翼和孙龙纷纷倒在四分之一决赛,另一位金牌有力争夺者任子韩国找了一个和中国速短教练同名同姓的公务员出来道歉据报道韩国人直接找了一个和中国短道速滑教练同名同姓的公务员出来向大众道歉。短道速滑一直以来就是韩国人的强项,但是这次冬奥会上,韩国选手不是受伤就是滑倒,还有就是犯规,到最后一无所获您有冰墩墩,咱还有个小白虎1序2022北京冬奥会的冰墩墩人见人爱,2018年平昌冬季奥运会,转眼已经过去四年了,而今看到咱北京冬奥的冰墩墩,让咱想起了放在家里2018年平昌冬奥会吉祥物白老虎。2为何用小白虎
折叠屏华为mateXs2新机来袭,华为Mate40惊现大米价改写发烧史2019年推出的MateX是华为折叠屏产品的起点。到2021年,当P50Pocket在年底,推出时,华为将成为唯一一个在商业上使用三种折叠形式的手机品牌。我觉得这可以算是华为折叠屏鸿蒙之父王成录悄然离职,对华为到底有哪些影响呢近日,被誉为鸿蒙之父的王成录被曝离开华为。作为任正非在技术领域的得力干将,王成录不仅主导了华为自有操作系统鸿蒙的研发,还曾领导过华为其他产品的研发和升级。这位元老级核心人物的离职,陈虹后悔了吗?不能接受和华为合作的上汽,把灵魂交给赛轮思五月上旬,美国知名移动平台Cerence赛轮思宣布,将与上汽集团进行合作,为后者推出的L4自动驾驶运营平台享道Robotaxi,提供自动驾驶技术支持。犹记得在2021年6月30日,任正非做对了!华为芯片传来新消息,外媒1200亿没白花点击关注,每天精彩不断!导读任正非做对了!华为芯片传来新消息,外媒1200亿没白花!众所周知,在国内的科技市场上,华为公司是第一大的民营科技企业,这些年来,在任正非的带领下,华为一抢先一步!无缺测试平台发布Android13系统测试近日,谷歌IO2022开发者大会顺利举行,Android13于IO2022开发者大会正式亮相。据悉此次Android13更新的重点将放在个性化,隐私两方面。在个性化上,Androi华为Mate50也要用双芯?一机双芯到底好在哪,OPPO最有发言权据微博博主ZEALER爆料称,华为即将发布的新机华为Mate50系列将会采用双芯方案,其中除了之前曝光的高通骁龙8Gen1外,据说还会搭载自研的海思NPU,这款自研芯片可能是关于影玩转数据,从指标体系开始01前言你对越刷越上瘾的抖音又爱又恨。对千人千面淘宝智能推荐的心仪商品满心欢喜。对踏足一个陌生城市因为有了地图共享出行以及众多App的攻略而不再感到未知和害怕,互联网和城市数字化带2022中国工业机器人市场研究报告,完整版56页,建议收藏本文报告来源于亿欧智库编写的2022中国工业机器人市场研究报告,完整版共有56页,非常详尽,值得收藏。本报告下载领取方式详见文末本报告目录大纲如下中国工业机器人概况中国工业机器人产杜兰特迎来名人堂级别帮手,签约费白菜价,高管的话不是空穴来风本赛季的NBA已经结束,勇士成功笑到最后,时隔四个赛季重回联盟之巅,库里也终于拿到了心心念念的FMVP奖杯,正式进入历史前十的讨论,虽然争议颇大,但至少库里又向前迈了一步。勇士夺冠该来的还是来了!外媒传来消息华为痛失亚洲第三大市场本文原创,禁止抄袭,违者必究!如今全球5G建设如火如荼,各个国家和地区都在积极布局5G建设,不过真正能够进行5G建设的企业其实就那么寥寥几家。除去我国的华为中兴之外,也就芬兰的诺基警惕数字藏品市场的老鼠屎数字藏品市场繁荣与混乱的当下,人们对于该领域的评价逐渐出现两极分化的现象,或无限吹捧或一棍子打死,如果剥去表层理性分析,会发现该市场本身是无辜的前景无限的,但如今却正在被一颗老鼠屎
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网