<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          面試突擊66:請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求重定向有什么區(qū)別?

          共 1941字,需瀏覽 4分鐘

           ·

          2022-07-23 15:00

          作者 | 磊哥

          來(lái)源 | Java面試真題解析(ID:aimianshi666)

          轉(zhuǎn)載請(qǐng)聯(lián)系授權(quán)(微信ID:GG_Stone)

          在 Java 中,跳轉(zhuǎn)的實(shí)現(xiàn)方式有兩種:請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求重定向,但二者是完全不同的,所以我們今天就來(lái)盤(pán)它。請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求重定向主要區(qū)別,包含以下 5 點(diǎn):

          1. 定義不同
          2. 跳轉(zhuǎn)方不同
          3. 數(shù)據(jù)共享不同
          4. 最終 URL 地址不同
          5. 代碼實(shí)現(xiàn)不同

          接下來(lái),我們一個(gè)一個(gè)來(lái)看。

          1.定義不同

          請(qǐng)求轉(zhuǎn)發(fā)(Forward):發(fā)生在服務(wù)端程序內(nèi)部,當(dāng)服務(wù)器端收到一個(gè)客戶(hù)端的請(qǐng)求之后,會(huì)先將請(qǐng)求,轉(zhuǎn)發(fā)給目標(biāo)地址,再將目標(biāo)地址返回的結(jié)果轉(zhuǎn)發(fā)給客戶(hù)端。而客戶(hù)端對(duì)于這一切毫無(wú)感知的,這就好比,張三(客戶(hù)端)找李四(服務(wù)器端)借錢(qián),而李四沒(méi)錢(qián),于是李四又去王五那借錢(qián),并把錢(qián)借給了張三,整個(gè)過(guò)程中張三只借了一次款,剩下的事情都是李四完成的,這就是請(qǐng)求轉(zhuǎn)發(fā)。請(qǐng)求重定向(Redirect):請(qǐng)求重定向指的是服務(wù)器端接收到客戶(hù)端的請(qǐng)求之后,會(huì)給客戶(hù)端返回了一個(gè)臨時(shí)響應(yīng)頭,這個(gè)臨時(shí)響應(yīng)頭中記錄了,客戶(hù)端需要再次發(fā)送請(qǐng)求(重定向)的 URL 地址,客戶(hù)端再收到了地址之后,會(huì)將請(qǐng)求發(fā)送到新的地址上,這就是請(qǐng)求重定向。這就好像張三(客戶(hù)端)找李四(服務(wù)器端)借錢(qián),李四沒(méi)錢(qián),于是李四就告訴張三,“我沒(méi)錢(qián),你去王五那借“,于是張三又去王五家借到了錢(qián),這就是請(qǐng)求重定向。

          2.請(qǐng)求方不同

          從上面請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求重定向的定義,我們可以看出:請(qǐng)求轉(zhuǎn)發(fā)是服務(wù)器端的行為,服務(wù)器端代替客戶(hù)端發(fā)送請(qǐng)求,并將結(jié)果返回給客戶(hù)端;而請(qǐng)求重定向是客戶(hù)端的行為,它們的交互流程,如下圖所示:

          3.數(shù)據(jù)共享不同

          請(qǐng)求轉(zhuǎn)發(fā)是服務(wù)器端實(shí)現(xiàn)的,所以整個(gè)執(zhí)行流程中,客戶(hù)端(瀏覽器端)只需要發(fā)送一次請(qǐng)求,因此整個(gè)交互過(guò)程中使用的都是同一個(gè) Request 請(qǐng)求對(duì)象和一個(gè) Response 響應(yīng)對(duì)象,所以整個(gè)請(qǐng)求過(guò)程中,請(qǐng)求和返回的數(shù)據(jù)是共享的;而請(qǐng)求重定向客戶(hù)端發(fā)送兩次完全不同的請(qǐng)求,所以?xún)纱握?qǐng)求中的數(shù)據(jù)是不同的。

          4.最終 URL 地址不同

          請(qǐng)求轉(zhuǎn)發(fā)是服務(wù)器端代為請(qǐng)求,再將結(jié)果返回給客戶(hù)端的,所以整個(gè)請(qǐng)求的過(guò)程中 URL 地址是不變的;而請(qǐng)求重定向是服務(wù)器端告訴客戶(hù)端,“你去另一個(gè)地訪(fǎng)問(wèn)去”,所以瀏覽器會(huì)重新再發(fā)送一次請(qǐng)求,因此客戶(hù)端最終顯示的 URL 也為最終跳轉(zhuǎn)的地址,而非剛開(kāi)始請(qǐng)求的地址,所以 URL 地址發(fā)生了改變。

          5.代碼實(shí)現(xiàn)不同

          在 SpringBoot 中,請(qǐng)求轉(zhuǎn)發(fā)的實(shí)現(xiàn)代碼如下:

          @RequestMapping("/fw")
          public void forward(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              request.getRequestDispatcher("/index.html").forward(request, response);
          }

          而請(qǐng)求重定向的實(shí)現(xiàn)代碼如下:

          @RequestMapping("/rt")
          public void redirect(HttpServletRequest request, HttpServletResponse response) throws IOException {
              response.sendRedirect("/index.html");
          }

          總結(jié)

          請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求重定向遵循的是“字越少,事越大”的原則,“請(qǐng)求轉(zhuǎn)發(fā)”的字比較少,它需要代客戶(hù)端執(zhí)行跳轉(zhuǎn);而“請(qǐng)求重定向”字比較多,它啥也不干,只是告訴客戶(hù)端“你去別的地兒訪(fǎng)問(wèn)”就行了,這就是理解這兩個(gè)概念的關(guān)鍵。它們的區(qū)別主要體現(xiàn)在 5 個(gè)點(diǎn):定義不同、請(qǐng)求方不同、數(shù)據(jù)共享不同、最終 URL 地址不同、代碼實(shí)現(xiàn)不同。

          參考 & 鳴謝

          www.jianshu.com/p/81407dff803d

          www.cnblogs.com/su-chu-zhi-151/p/11875641.html

          是非審之于己,毀譽(yù)聽(tīng)之于人,得失安之于數(shù)。

          公眾號(hào):Java面試真題解析

          面試合集:https://gitee.com/mydb/interview


          往期推薦

          面試突擊65:為什么要用HTTPS?它有什么用?


          面試突擊64:了解 HTTP 協(xié)議嗎?


          面試突擊63:MySQL 中如何去重?


          瀏覽 28
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青青草无码在线视频 | 亚欧成人在线观看 | 亚洲黄片免费 | 国产日逼免费看 | 日本一区性视频 |