如何阻止ajax自动重定向_重发和重定向有什么区别与重定向应用
重發和重定向有什么區別
重發
方式1:
request.getRequestDispatcher("new.jsp").forward(request, response);//轉發到new.jsp方式2:
<jsp:forward page="apage.jsp" />重定向
方式一:
response.sendRedirect("new.jsp");//重定向到new.jsp方式二:
<%response.sendRedirect("new.jsp");//重定向到new.jsp%>轉發是服務器行為,重定向是客戶端行為
如何理解重定向與轉發
重定向,其實是兩次request,
第一次,客戶端request A,服務器響應,并response回來,告訴瀏覽器,你應該去B。這個時候IE可以看到地址變了,而且歷史的回退按鈕也亮了。重定向可以訪問自己web應用以外的資源。在重定向的過程中,傳輸的信息會被丟失。
轉發
請求轉發是服務器內部把對一個request/response的處理權,移交給另外一個 對于客戶端,它只知道自己最早請求的那個A,而不知道中間的B,甚至C、D。傳輸的信息不會丟失。
更形象的解釋:
重定向:你先去了A局,A局的人說:“這個事情不歸我們管,去B局”,然后,你就從A退了出來,自己乘車去了B局。
轉發:你先去了A局,A局看了以后,知道這個事情其實應該B局來管,但是他沒有把你退回來,而是讓你坐一會兒,自己到后面辦公室聯系了B的人,讓他們辦好后,送了過來。
- https://blog.csdn.net/meiyalei/article/details/2129120?utm_medium=distribute.wap_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.wap_blog_relevant_pic&depth_1-utm_source=distribute.wap_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.wap_blog_relevant_pic
重定向的應用 : 短連接跳轉
舉個例子:
這樣一個短連接,點擊后,會跳轉到真實的 app 的一個頁面,這個是怎么實現的?
為啥要短鏈接
給用戶發送短信的時候,發送一個鏈接,當用戶點擊鏈接的時候,能夠打開app,同時跳轉到app的某一個頁面。這個時候就需要app端給我提供一個鏈接(肯定帶了參數),但是發送短信的時候又不能完全把這個鏈接發送給用戶。一是因為那樣的鏈接太丑,二是因為太長。所以則用到了短鏈接。
- https://blog.csdn.net/qq_38111316/article/details/88587845
短鏈接實現原理?
就是把一個長地址如:http://zhyq.shibei.com/article/article.htm 用一個算法轉換成短地址如:http://csdn.cn/7bqr87dc。然后把7bqr87dc------->http://zhyq.shibei.com/article/article.htm之間的對應關系保存到數據庫中去。當用戶訪問http://csdn.cn/7bqr87dc鏈接時,系統到數據庫中找到真實的URL地址,實現跳轉。
短鏈接算法
算法1
MD5的生成的 ,其實這個算法主要是把長字符串變小 ,這個算法是不可逆的,所以別想著去直接反轉短地址 .
利用MD5的算法,其具體過程為:
算法實現:
import java.security.MessageDigest;public class ShotUrlUtil {public static void main(String[] args) {System.out.println(shortUrl("http://www.baidu.com/"));}public static String shortUrl(String url) {String[] chars = new String[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x","y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P","Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };// 對傳入網址進行 MD5 加密String md5str = getMD5Str(url);System.out.println(md5str);String hex = md5str;String sTempSubString = hex.substring(8, 16);long lHexLong = 0x3FFFFFF3 & Long.parseLong(sTempSubString, 16);String outChars = "";for (int j = 0; j < 6; j++) {long index = 0x0000003C & lHexLong;outChars += chars[(int) index];// 每次循環按位右移 5 位lHexLong = lHexLong >> 5;}return outChars;}private static String getMD5Str(String str) {MessageDigest messageDigest = null;try {messageDigest = MessageDigest.getInstance("MD5");messageDigest.reset();messageDigest.update(str.getBytes("UTF-8"));} catch (Exception e) {System.out.println("catch!");}byte[] byteArray = messageDigest.digest();StringBuffer md5StrBuff = new StringBuffer();for (int i = 0; i < byteArray.length; i++) {if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));elsemd5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));}return md5StrBuff.toString();} }算法2
算法本質上就是一個長短鏈接的映射過程,那么一個簡單的想法是用遞增的序號來表示短鏈接,每次進來一個長鏈接時,把它映射成當前的序號,同時把序號遞增以供下一個鏈接使用。因為鏈接地址同時使用的是a-z、A-Z和0-9這62個字符,把10進制的序號值轉化為這個62進制的表示即可得到對應的短鏈接。
26個大寫字母 26小寫字母,10個數字,隨機生成6個然后插入數據庫對應一個id,短連接跳轉的時候,根據字符串查詢到對應id,即可實現相應的跳轉!不過2的62次方,大概率上不會重復。這個利用的就是低進制轉化為高進制時,字符數會減少的特性。
key 就是id value 是真實 url ,id 轉換成62進制即可生成短鏈接。
- https://tool.lu/hexconvert/
這個直接的想法非常簡單粗暴,另外一個直觀的想法是使用隨機的方法生成長短鏈接的映射關系。每次進來一個長鏈接時就隨機一個短鏈接來進行映射,如果通過數據庫查詢發現此短鏈接已經使用過,則重新進行隨機直到產生一個未曾使用過的短鏈接為止
短鏈接生成
實現思路
服務器收到一個短鏈接請求時,需要把從http地址中解析出短鏈接,然后將得到的短鏈接在數據庫中進行查詢,找到其對應的長連接,進而重定向到該長長鏈接對應的地址。
2.當點擊短鏈接的時候,跳轉到一個html頁面,然后加載該頁面的時候,通過ajax調用一個接口,返回該鏈接的真實地址,然后在重定向到真實的地址。
<script type="text/javascript" > window.onload =function() {var locationurl = this.location.href;$.get("http://zhyq.shibei.com:8080/cnp/webservice.cnp?method=getShortLink&noSign=true",{"link":locationurl}, function(result){var u = navigator.userAgent;var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android終端var isiOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/); //ios終端if (isAndroid) {window.location.href=result.data.android_url;} else if (isiOS){window.location.href=result.data.real_link_url; } else {alert("不支持當前設備");}},"json"); } </script>舉個例子
當我們在瀏覽器里輸入 http://t.cn/RlB2PdD 時
- DNS首先解析獲得 http://t.cn 的 IP 地址
- 當 DNS 獲得 IP 地址以后(比如:74.125.225.72),會向這個地址發送 HTTP GET 請求,查詢短碼 RlB2PdD
- http://t.cn 服務器會通過短碼 RlB2PdD 獲取對應的長 URL
- 請求通過 HTTP 301 轉到對應的長 URL https://m.helijia.com 。
301 是永久重定向,302 是臨時重定向。短地址一經生成就不會變化,所以用 301 是符合 http 語義的。同時對服務器壓力也會有一定減少。
歡迎關注公眾號:程序員開發者社區
總結
以上是生活随笔為你收集整理的如何阻止ajax自动重定向_重发和重定向有什么区别与重定向应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hadoop namenode启动不了_
- 下一篇: qt如何用python结合_在Qt(C+