Web安全黑客必備技術:轉發跟重定向的區別

什麼轉發,什麼是重定向,對於一個初學者也許是時不時就忘了時不時就忘了,其實說到底就是沒有理解其中的本質區別。

沒錯,這個人就是我,為了讓自己更加充分理解,所以決定寫下來,記憶深刻!

Web安全黑客必備技術:轉發跟重定向的區別

在servlet中轉發的語句為:

request.getRequestDispatcher("xxx.jsp").forward(request,response);

在servlet中重定向的語句為:

request.sendRedirect("xxx.jsp");

那麼,它們本質的區別是什麼呢?

很多資料或老師都說,轉發是服務器行為,重定向是客戶端行為。不過很多時候都是一筆帶過。

轉發的過程:

客戶端瀏覽器發送請求,web服務器接收請求再進行在內部跳轉,什麼意思呢,也就是說,跳轉只能在自己所在的web容器下的url,而不能跳轉出去其他的url。

重定向的過程:

客戶端發送請求,web服務器接收該請求後發送302狀態碼響應並且發送新的一個地址(location)給客戶端瀏覽器,客戶端接收到302則自動再發送一個新的請求,而這個請求就是新的location,既然是客戶端發送的一個請求,就對web容器的request沒關係了,它可以任意跳轉到所有location。

其實它們最本質的區別就是,轉發只需要一次的請求,僅僅是一次客戶端的request,而重定向則需要兩次請求,一次是客戶端request,服務器響應後返回302給客戶端瀏覽器,再由客戶端瀏覽器再發一次請求。

不過對於重定向,因為是重客戶端瀏覽器進行再次發送請求,所以在重定向過程中,之前傳輸的信息會被丟失。

例如一個網銀接口,因為web容器中想要訪問到網銀接口,必須要使用重定向,而重定向會把之前的信息丟失,所以不能再request或者session中存數據給它使用,只能通過在重定向的location中加入數據進行請求。

有什麼說的不好的,多多包涵,樂意接受指點!

一隻在web奮鬥的渣渣K!


分享到:


相關文章: