2011-09-20 17 views
2

這是Why are the query parameters for many websites(MySQL) very cryptic long integers?的後續問題。在安全性和可擴展性方面。請引用任何資源(在線/離線)。在爲網站構建網址時,有哪些資源需要了解最佳做法?

+1

這可能是太含糊回答。你能想出一個特定的案例嗎? – Bojangles

+0

當爲Twitter這樣的動態用戶生成內容網站編寫URL時,用戶的每個帖子都會被賦予一些長整數。在決定MySQL表格中的數據類型時,或者在爲我的網站編寫mod_rewrite中的重寫規則時,我應該考慮哪些事項。 – Sravan

回答

1

在安全性和可擴展性,你可以使用你想象的任何網址的條款。

它通常是人的可讀性和可用性和或(更常見)的搜索引擎友好,影響URL的建築規則。

說,PHP.NET著名php.net/echo功能,給人以功能描述快速方便地訪問。這就是製作此類網址的原因,而不是安全性。

1

安全性和可擴展性有多大關係,形成一個URL的方式。有些網站使用晦澀的網址作爲衡量爲確保圖片(比如Facebook),這種類型的安全性通常是令人難以接受的,因爲大家都知道,通過各種方式(瀏覽器緩存,代理緩存,...)的URL可以訪問理應保護資源。

雖然乾淨的URL有助於搜索引擎優化,這通常意味着較慢的響應,從而退化的可擴展性。考慮網址http://example.com/user/Lars,向您顯示我的個人資料的個人資料頁面。如果我的帳戶是在數據庫鏈接不是我的帳戶名,但由surrogate key(一些任意數字)時,系統首先要查詢用戶表我的代理鍵,以獲得的信息的其餘部分。這會降低性能,因爲還有一個表需要查詢。

+0

......除非代理鍵被索引,在這種情況下,表現會,而在同一時間分辨歧義(其中「拉爾斯」?)至少等於。另外,sharelocker(RapidShare和朋友)使用「/ ID/Filename」結構來通過默認添加安全性。 –

+0

是的,你可以通過索引來加快速度,但對於像twitter這樣的高性能網站,直接使用主鍵更好。整數搜索通常比字符串搜索更快,索引這些也會加快搜索速度。 – Lars

+0

準確地說,這就是爲什麼我認爲你的回答沒有多大意義,而且你似乎與自己相矛盾:surrugate鍵可以是主鍵(例如自動遞增的數字)並且確定確切的「Lars」而不是「n」 '「拉爾斯」。 –

1

雖然我與Col.彈片完全一致回答有哪裏長「神祕」的ID有助於安全,有時甚至可擴展性少數情況下。 Sharelockers(Rapidshare和朋友),通常採用在其網址的/ID/Filename結構通過隱藏添加安全性,這將是太容易有人來測試所有整數或通用名,並獲得訪問敏感信息。

有些人也將某種校驗和算法應用於他們的數據庫ID,這使得人們很難找出底層結構並「隱藏」某些類型的信息:我敢打賭,許多人不願意爲某些東西付錢如果訂單的網址爲/order/2/,則在線。使用校驗和還可以提高性能,因爲即使不查詢數據庫(當某人暴力破壞您的URL時也很有用),您可以忽略無效ID。

長ID有助於可擴展性,因爲它們提供了更廣泛的可能數字(Slashdot had been a victim「int(11)對每個人都足夠」假設兩次 - 對不起找不到舊故事),這就是爲什麼你現在看到Twitter和朋友使用不同的方法。

當您使用更寬的ID,你也可以存儲更多的信息,如時間戳,IP創建該數據庫記錄等,當你運行一個分佈式數據庫的設置可以是至關重要/主機名。看看MongoID class文檔以更好地瞭解它是如何工作的。

相關問題