-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
如何實現(xiàn)前后端分離(如何實現(xiàn)前后端分離vue)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于如何實現(xiàn)前后端分離的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com
本文目錄:
一、前后端分離的項目如何實現(xiàn)登錄狀態(tài)的保持。
前后端分離的項目一般會使用token實現(xiàn)登錄狀態(tài)的保持。 token其實就是一個隨機字符串,當(dāng)用戶在登錄頁面輸入賬號和密碼后,前端將賬號密碼發(fā)送給后端,后端檢驗完賬號和密碼后,會生成一個隨機不重復(fù)的字符串即(token),并將其響應(yīng)給前端,前端拿到token后,需要在客戶端進(jìn)行持久化存儲(一般會寫在localStorage或者sessionStorage中,如果是SPA會存儲在sessionStorage中,如果是MPA則存儲在localStorage中),那么下次在向后端數(shù)據(jù)接口發(fā)送請求的時候,一般需要將token一并發(fā)送給后端數(shù)據(jù)接口,后端數(shù)據(jù)接口會對token進(jìn)行校驗,如果合法則正常響應(yīng)請求,如果不合法,則提示未登錄。 前端則根據(jù)本地存儲中是否存在token判斷用戶是否處于登錄狀態(tài)。
二、基于Docker-Compose 部署前后端分離單體項目(一)
1.單體項目是否需要采用docker進(jìn)行部署?
2.如果采用docker部署是否有必要采用docker-compose進(jìn)行服務(wù)編排?
答案是也許有必要,也許沒必要,docker的優(yōu)勢很多,但是對于垂直架構(gòu)的項目優(yōu)勢未必那么明顯,總之一句你需要根據(jù)自己的項目情況去考慮。筆者之所以會寫這篇文章,大概率是基于省事的目的去部署一些小的項目。同時也是提供一種前后端分離的項目的部署方案(但絕對不是最有方案),以及在這種模式下的docker如何去工作才能達(dá)到我們的目的。
然而最終的目的是為了偷懶,省事。讓前后端分離項目的部署方式變的簡單。就也許在這種模式下,你只需要5分鐘就可以實現(xiàn)部署,或許吧,不妨把這個當(dāng)作一個目標(biāo)。
本文目標(biāo):
上圖將部署流程分為三部分,本地開發(fā)環(huán)境,阿里云容器鏡像服務(wù),以及l(fā)inux服務(wù)器。下面分成三個部分對上圖進(jìn)行說明,工欲善其事,必先利其器。先進(jìn)行說明,后面才能對每部分做的工作比較清晰。
本地開發(fā)環(huán)境分成三個項目
先解釋一下圖中的相關(guān)名詞
容器鏡像服務(wù),分門別類的存儲我們的鏡像 。這個是鏡像服務(wù)的唯一用途,就相當(dāng)于maven的倉庫是一樣的。
我們也可以搭建自己的私服倉庫,例如開源的harbor等,都非常好用,在企業(yè)中用私服會比較多。
首先我們需要在linux服務(wù)器上搭建Docker環(huán)境,也就是我們在linux上有一個docker。再將我們的鏡像運行在docker上。
從上圖我們發(fā)現(xiàn)在docker上運行這很多容器,mysql,redis,nginx,pitaya-java,pitaya-admin,pitaya-h5.
然而我們的容器是需要通信的,例如:大家都知道pitaya-java是一個springboot的項目,他需要訪問mysql進(jìn)行數(shù)據(jù)存儲服務(wù),需要訪問redis緩存我們的令牌信息等。
也就是說,我們運行的這些容器之間是要相互能通信的。所以我們在docker上創(chuàng)建了一個內(nèi)部網(wǎng)絡(luò)叫做pitaya-network,他在172.2.0.0這個網(wǎng)段,我們需要我們的容器都加入pitaya-network這個網(wǎng)絡(luò),并且分配固定的IP地址,指定固定端口。
為什么需要分配固定IP地址,指定固定端口? 因為我們的容器也可能會和服務(wù)器一樣,會掛掉,如果隨機分配的話,創(chuàng)建新的容器,IP地址可能會變,我們?nèi)萜鏖g不能通信,例如java服務(wù)訪問不了mysql,這樣我們的線上就無法提供客戶正常服務(wù)了。
本文我們做一個大概的概述,針對上面的結(jié)構(gòu)以下問題是我們急需解決的?
其實針對java項目和vue項目制作鏡像方式不同,但是原理一樣,原理無非就是基于docker build這個命令制作鏡像,但是java的鏡像制作和推送可能更加簡單,只需要一條命令即可,因為maven提供了制作鏡像的插件。這些內(nèi)容在下一篇文章都會涉及到!
想要表達(dá)清楚一鍵事情是非常不容易的事情,特別是通過文字,既不想廢話連篇,又想表達(dá)清楚真的很難,因為細(xì)節(jié)比較多!然而我覺得弄清楚大方向是非常必要的,然后再進(jìn)行分解,希望能說的明白,我會加油的,如果寫的不好也希望大家原諒!
三、jQuery如何實現(xiàn)類似JSTL的功能進(jìn)行前后端分離?
前后端分離一般用json交互,不用el表達(dá)式(依賴頁面,過于耦合)。
還有html不解析el表達(dá)式。換成jsp頁面導(dǎo)入jstl標(biāo)簽庫。
四、前后端分離-跨域會話如何保持?
因為CORS的出現(xiàn),大大降低了跨域的難度,另到AJAX有了更大的發(fā)揮空間,也導(dǎo)致了前后端更加容易實現(xiàn)。但是今天在實現(xiàn)前后端的時候發(fā)現(xiàn)了一個問題。 在進(jìn)行session會話管理的時候,前端無法發(fā)送cookie到后端,前端每次訪問后端都相當(dāng)于一次新的會話,這樣就導(dǎo)致登錄后的信息是無法保存的??蛻舳嗣恳淮卧L問都需要重新登錄。
對于前端來說,seesion字段是存在cookie中的。在跨域過程中,Cookie是默認(rèn)不發(fā)送的。就算后端返回set-Cookie字段,前端也不會保存Cookie,更不會在下一次訪問的時候發(fā)送到后端了。
因此只要前端可以把cookie發(fā)送到后端,后端就可以根據(jù)cookie拿到seeion字段進(jìn)行會話驗證。
進(jìn)過重新對CORS的學(xué)習(xí),只要通過3步,就可以讓會話保持。
在ajax中設(shè)置,withCredentials: true。
例如:
服務(wù)端的 Access-Control-Allow-Origin 不可以設(shè)置為"*",必須指定明確的、與請求網(wǎng)頁一致的域名
服務(wù)端的 Access-Control-Allow-Credentials: true ,代表服務(wù)器接受Cookie和HTTP認(rèn)證信息。因為在CORS下,是默認(rèn)不接受的。
PS:
web.xml
以上就是關(guān)于如何實現(xiàn)前后端分離相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀:
如何做營銷運營外包團(tuán)隊(如何做營銷運營外包團(tuán)隊)
校園景觀設(shè)計展板(校園景觀設(shè)計展板圖片)