2013-04-27 44 views
9

Tôi muốn sử dụng location.hash để mã hóa trạng thái ứng dụng khách của mình, sao cho người dùng có thể dễ dàng đánh dấu và/hoặc chia sẻ ứng dụng ở trạng thái hoàn chỉnh bằng URL.Kích thước tối đa của vị trí.hash trong trình duyệt

Có một số chủ đề (đã lỗi thời) về độ dài tối đa của url, đặc biệt là giới hạn trong trình khám phá internet. Tuy nhiên, không rõ kích thước tối đa của location.hash là gì. Bởi vì băm chỉ tồn tại trong máy khách, các giới hạn của http hoặc các máy chủ không có liên quan.

Tôi đã thực hiện một jsfiddle đơn giản để kiểm tra điều này: http://jsfiddle.net/Jz3ZA/. Trong cả Chrome và Firefox (Ubuntu 12.04), dung lượng lên đến 50K dường như hoạt động. Điều này có nghĩa là tôi có thể sử dụng chúng để lưu trữ nhà nước hay tôi nhìn ra những hạn chế khác?

+2

Không có tiêu chuẩn cho các hạn chế kích thước trên URL nào cả, vì vậy các hash lý thuyết có thể là bất kỳ chiều dài, nhưng bạn không thể tin tưởng những gì các trình duyệt cụ thể sẽ làm (đặc biệt là IE). –

+0

Tại sao bạn không lưu trữ trạng thái trong máy chủ? – Blender

+0

Tôi đã chạy fiddle của bạn trên Internet Explorer 11 và nó không thành công ở độ dài băm 3000 –

Trả lời

-2

What is the maximum length of a URL in different browsers?

này thường không bao gồm phần băm mặc dù, vì vậy tôi không nghĩ rằng có một tiêu chuẩn.

Tôi muốn chỉ ra rằng định danh phân đoạn thường được sử dụng để xác định một đoạn của tài liệu và không được sử dụng để lưu trữ toàn bộ trạng thái của ứng dụng. Thay vào đó, bạn nên sử dụng localstorage.

Nếu bạn muốn có khả năng chia sẻ hoặc đánh dấu, hãy xem xét lưu trữ trạng thái của ứng dụng ở phía máy chủ và sử dụng số nhận dạng phân đoạn để lưu trữ id của trạng thái được lưu trữ.

+3

Câu hỏi đã được rõ ràng về phần băm, do đó, điều này không trả lời câu hỏi. – Jeroen

-1

Giải thích gây hiểu lầm như vậy. Hash chỉ đơn giản là không có giới hạn về kích thước và cảm thấy tự do để sử dụng nó nhiều như bạn muốn. Chỉ cần nhớ rằng nó không phải là một phần url.

+1

Tôi không nghĩ điều này là đúng.Wikipedia nói: * Mã định danh mảnh được giới thiệu bởi dấu băm # là phần cuối cùng tùy chọn của URL cho tài liệu. * – Jeroen

4

Dựa trên JS Fiddle của bạn (cũng là phiên bản đã sửa đổi của nó http://jsfiddle.net/Jz3ZA/18/ (xem ví dụ dưới đây)), bạn có thể kiểm tra nhiều trình duyệt để có được đường cơ sở hiệu quả.

  • Chrome: 50K +
  • Firefox: 50K +
  • Safari (iOS): 50K +
  • Internet Explorer 11: Thất bại giữa 2.025 và 2.050
  • Microsoft Edge: Thất bại giữa 2.025 và 2.050

Vì vậy, bất kể những gì các trình duyệt khác hỗ trợ, nếu bạn cần hỗ trợ Microsoft Edge hoặc IE11 thì bạn sẽ cần phải ở dưới 2.025 ký tự. Vì IE (và do đó tôi đoán Edge) có lịch sử có giới hạn độ dài URL ... điều này cũng có thể phụ thuộc vào độ dài của URL cơ sở của bạn.

function testall(){ 
 
    var sizes = [10,100,1000,2000,2025,2050,2100,2250,2500,2750,3000,4000,5000,10000, 50000]; 
 
    for(var i=0;i<sizes.length;i++){ 
 
    var n = sizes[i]; 
 
    if(!testhash(n)){ 
 
     alert("test failed at hash of length: " + n); 
 
     return; 
 
    } 
 
    } 
 
    alert("all tests passed"); 
 
} 
 

 
function testhash(n){ 
 
    var somestring = "#" + makestring(n); 
 
    window.location.hash = somestring; 
 
    var success = (window.location.hash == somestring); 
 
    return success 
 
}  
 

 
function makestring(n){ 
 
    var text = ""; 
 
    var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 
 

 
    for(var i=0;i<n;i++){ 
 
     text += possible.charAt(Math.floor(Math.random() * possible.length)); 
 
    } 
 
    return text; 
 
} 
 
$("button").on("click", testall);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
 
<button>Test!</button>

Các vấn đề liên quan