用戶向服務(wù)器發(fā)送了一次HTTP請(qǐng)求喳钟,該請(qǐng)求可能會(huì)經(jīng)過多個(gè)信息資源處理以后才返回給用戶,各個(gè)信息資源使用請(qǐng)求轉(zhuǎn)發(fā)機(jī)制相互轉(zhuǎn)發(fā)請(qǐng)求,但是用戶是感覺不到請(qǐng)求轉(zhuǎn)發(fā)的。根據(jù)轉(zhuǎn)發(fā)方式的不同宦赠,可以區(qū)分為直接請(qǐng)求轉(zhuǎn)發(fā)(Forward)和間接請(qǐng)求轉(zhuǎn)發(fā)(Redirect),那么這兩種轉(zhuǎn)發(fā)方式有何區(qū)別呢米母?
一勾扭、從定義上看:
forward是服務(wù)器請(qǐng)求資源,服務(wù)器直接訪問目標(biāo)地址的URL铁瞒,把那個(gè)URL的響應(yīng)內(nèi)容讀取過來尺借,然后把這些內(nèi)容再發(fā)給瀏覽器。瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容從哪里來的精拟,所以它的地址欄還是原來的地址。
?redirect是服務(wù)端根據(jù)邏輯虱歪,發(fā)送一個(gè)狀態(tài)碼蜂绎,告訴瀏覽器重新去請(qǐng)求那個(gè)地址。所以地址欄顯示的是新的URL笋鄙。所以redirect等于客戶端向服務(wù)器端發(fā)出兩次request师枣,同時(shí)也接受兩次response。
二萧落、從原理上看:
Forward(直接轉(zhuǎn)發(fā)方式)用的更多一些践美,一般說的請(qǐng)求轉(zhuǎn)發(fā)指的就是直接轉(zhuǎn)發(fā)方式洗贰。Web應(yīng)用程序大多會(huì)有一個(gè)控制器。由控制器來控制請(qǐng)求應(yīng)該轉(zhuǎn)發(fā)給那個(gè)信息資源陨倡。然后由這些信息資源處理請(qǐng)求敛滋,處理完以后還可能轉(zhuǎn)發(fā)給另外的信息資源來返回給用戶,這個(gè)過程就是經(jīng)典的MVC模式兴革。
Redirect(間接轉(zhuǎn)發(fā)方式)绎晃,有時(shí)也叫重定向,它一般用于避免用戶的非正常訪問杂曲。例如:用戶在沒有登錄的情況下訪問后臺(tái)資源庶艾,Servlet可以將該HTTP請(qǐng)求重定向到登錄頁面,讓用戶登錄以后再訪問擎勘。
三咱揍、從工作流程上看:
forword過程:客戶瀏覽器發(fā)送http請(qǐng)求--->web服務(wù)器接受此請(qǐng)求--->調(diào)用內(nèi)部的一個(gè)方法在容器內(nèi)部完成請(qǐng)求處理和轉(zhuǎn)發(fā)動(dòng)作--->將目標(biāo)資源 發(fā)送給客戶。
?redirect過程:客戶瀏覽器發(fā)送http請(qǐng)求--->web服務(wù)器接受后發(fā)送302狀態(tài)碼響應(yīng)及對(duì)應(yīng)新的location給客戶瀏覽器--->客戶瀏覽器發(fā)現(xiàn) 是302響應(yīng)棚饵,則自動(dòng)再發(fā)送一個(gè)新的http請(qǐng)求煤裙,請(qǐng)求url是新的location地址--->服務(wù)器根據(jù)此請(qǐng)求尋找資源并發(fā)送給客戶。
四蟹地、從運(yùn)用的地方上看
forword?一般用于用戶登錄的時(shí)候积暖,根據(jù)角色轉(zhuǎn)發(fā)到相應(yīng)的模塊;
?redirect一般用于用戶注銷登錄時(shí)返回主頁面或者跳轉(zhuǎn)到其他網(wǎng)站怪与。
五夺刑、從效率上看:
forword效率高,而redirect效率低分别。
以上就是我對(duì)Forward和Redirect的區(qū)別的總結(jié)介紹遍愿,歡迎大家一起交流補(bǔ)充!