2009-07-14 4 views
14

Đây là kịch bản, người dùng mở trang không bảo mật từ WebApp của chúng tôi, hãy gọi nó là PageA, trong trình duyệt của họ và sau đó nhấp vào liên kết trong đó đưa họ đến một trường hợp bảo mật của PageB. Một khi trong PageB, người dùng có thể sau đó nhấp vào một liên kết đưa họ trở lại một thể hiện bảo mật của PageA (mà họ đã xem và đang ở trong OutputCache). Tôi quan sát thấy rằng mặc dù PageA đang được truy cập qua một URL khác sau khi truy cập PageB (trang bảo mật) nó thực sự kéo bản sao được lưu trong bộ nhớ cache trước đó thay vì tạo một bản sao mới. Tôi đã xác minh hành vi này trong phiên gỡ lỗi và ngạc nhiên rằng ASP.Net đã sử dụng cùng một mục OutputCache cho bản sao an toàn của trang.Làm cách nào để cấu hình ASP.Net OutputCache thay đổi bằng http so với https?

Câu hỏi của tôi là tại sao theo cách này? Và làm thế nào để tôi nói với ASP.Net OutPutCache để xử lý truy cập từ URL an toàn dưới dạng một mục khác biệt/duy nhất so với tương đương không an toàn?

[nền]

Chúng tôi vừa mới chuyển sang hình ảnh dưới mọi hình thức của chúng tôi qua sử dụng Scene7/Akamai cho tất cả các hình ảnh. Kết quả là chúng tôi đã thêm mã để sử dụng url Scene7 khác nhau khi xem một trang nhất định trên kết nối an toàn. Vấn đề OutputCache này không cho phép logic tạo ra các url an toàn để thực hiện và kết quả là cảnh báo trình duyệt xấu xí.

Trả lời

8

Tôi nghĩ rằng bạn có thể làm một VaryByCustom = "âm mưu" và thêm video này vào tập tin Global.asax.cs của bạn (inlcuding một vài người khác khác mà tôi sử dụng cũng như ứng dụng sử dụng phiên bản &):

public override string GetVaryByCustomString(HttpContext context, string custom) 
    { 
     if (custom.Equals("version", StringComparison.CurrentCultureIgnoreCase)) 
     { 
      Assembly asm = Assembly.GetExecutingAssembly(); 
      string[] parts = asm.FullName.Split(','); 
      string version = parts[1].Trim().ToLower(); 
      return version; 
     } 
     else if (custom.Equals("user", StringComparison.CurrentCultureIgnoreCase)) 
     { 
      var user = Membership.Users.CurrentUser; 
      return null == user ? string.Empty : user.Id.ToString(); 
     } 
     else if (custom.Equals("scheme", StringComparison.CurrentCultureIgnoreCase)) 
     { 
      var scheme = context.Request.IsSecureConnection ? "https" : "http"; 
      return scheme; 
     } 
     else 
      return base.GetVaryByCustomString(context, custom); 
    } 
+0

+1. Chính xác những gì tôi cần. Trong trường hợp của tôi, người dùng không nên truy cập HTTPS cho trang cụ thể của tôi. Nhưng trong trường hợp họ làm, tôi có mã chuyển hướng để gửi chúng tới HTTP. Tuy nhiên, mã chuyển hướng này sẽ không hoạt động cho đến khi tôi thay đổi theo "lược đồ" như trong ví dụ của bạn. –

1

Tôi chưa bao giờ thử nó nhưng bạn có thể sử dụng thuộc tính Outputcache VaryByHeader và tiêu đề "máy chủ", chỉ định máy chủ lưu trữ Internet và số cổng của tài nguyên được yêu cầu.

Câu hỏi tôi muốn có là tại sao bạn chuyển hướng đến PageA qua bảo mật sau khi từ TrangB. Nếu trang không an toàn của nó, bạn không thể sửa đổi chuyển hướng TrangB để luôn chuyển hướng đến không an toàn.

+0

+1 Cảm ơn bạn đã phản hồi. Ví dụ của tôi đơn giản hơn nhiều so với thực tế của tôi. Trong thực tế, tôi có nhiều pageB và nhiều pageA. Để thay đổi tất cả các liên kết trở lại trang của trang không an toàn từ pageB sẽ là quá nhiều công việc, tôi hy vọng có một cách đơn giản hơn. – James

13

Điều này không trả lời câu hỏi là được diễn đạt nhưng có thể loại bỏ nhu cầu của bạn thay đổi theo lược đồ. Nếu bạn đang viết mã cứng "http: //" cho url Scene7, bạn có thể thay đổi chúng thành các url liên quan đến lược đồ.

<img src="http://site.scene7.com/images/someimage.jpg" /> 
=> 
<img src="//site.scene7.com/images/someimage.jpg" /> 

Điều đó sẽ khiến trình duyệt tự động yêu cầu tài nguyên với cùng một lược đồ như trang giới thiệu. Giả sử bạn có chứng chỉ SSL cho miền scene7 của bạn.

+1

+1 - thú vị tôi không nhận ra điều đó là có thể. – James

+1

+1 - sẽ làm nhiều hơn nếu tôi có thể ... điều này sẽ được đánh dấu là câu trả lời. – caryden

+1

Tuy nhiên, tránh người thân giao thức cho CSS trong IE: http://www.stevesouders.com/blog/2010/02/10/5a-missing-schema-double-download/ –