2010-04-09 23 views
46

Tôi đã sử dụng bộ nhớ đệm đầu ra trong ứng dụng ASP.NET MVC của mình.Cách chỉ định tiêu đề hết hạn HTTP? (ASP.NET MVC + IIS)

Page speed yêu cầu tôi chỉ định hết hạn bộ nhớ cache HTTP cho css và hình ảnh trong tiêu đề phản hồi.

Tôi biết rằng đối tượng Phản hồi có chứa một số thuộc tính kiểm soát hết hạn bộ nhớ cache. Tôi biết rằng các đặc tính này có thể được dùng để điều khiển HTTP bộ nhớ đệm cho phản ứng rằng tôi phục vụ từ mã của tôi:

Response.Expires 
Response.ExpiresAbsolute 
Response.CacheControl 

hoặc cách khác

Response.AddHeader("Expires", "Thu, 01 Dec 1994 16:00:00 GMT"); 

Câu hỏi đặt ra là làm thế nào để tôi đặt Expires tiêu đề cho các tài nguyên được phân phát tự động, ví dụ: hình ảnh, css và như vậy?

+0

phiên bản IIS nào? –

+0

IIS 7 ... nhưng tôi có thể không có quyền truy cập vào tất cả các cài đặt trong IIS, trang này được lưu trữ – Marek

Trả lời

74

Tìm thấy nó:

tôi cần phải xác định bộ nhớ cache client cho nội dung tĩnh (trong web.config).

<configuration> 
    <system.webServer> 
    <staticContent> 
     <clientCache cacheControlCustom="public" 
     cacheControlMaxAge="12:00:00" cacheControlMode="UseMaxAge" /> 
    </staticContent> 
    </system.webServer> 
</configuration> 

từ http://www.iis.net/ConfigReference/system.webServer/staticContent/clientCache

+0

cách này khác với cài đặt ngày hết hạn trong tương lai trong IIS ?? – leora

+3

không chắc chắn nếu có bất kỳ sự khác biệt - cảm thấy tự do để kiểm tra sự khác biệt trong giao thông HTTP :) Cách tiếp cận đã đề cập có một lợi thế mà nó có thể thay đổi hành vi bộ nhớ đệm mà không cần cấu hình IIS (ví dụ trên chia sẻ lưu trữ) – Marek

+1

sử dụng IIS 6 thay thế? – Jose3d

2

Nhìn vào dự án mini static content delivery. :)

+0

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. - [Từ đánh giá] (/ đánh giá/bài đăng chất lượng thấp/19021525) –

27

Nếu bạn muốn làm điều đó từ mã cho một nguồn tài nguyên mà bạn đang trở lại (. Tức là không phải là một tập tin tĩnh được phục vụ từ IIS), bạn nên sử dụng Response.Cache:

Response.Cache.SetExpires(DateTime.Now.AddYears(1)); 
Response.Cache.SetCacheability(HttpCacheability.Public); 

Tôi biết đó không chính xác những gì bạn đang yêu cầu, nhưng tôi đã tìm thấy câu hỏi này qua Google và tìm những người khác có thể thích câu trả lời này vì nó liên quan đến các API bạn hiển thị trong văn bản câu hỏi gốc.

+2

Không phải đó là DateTime.UtcNow? Nếu không, bạn có thể giải thích cách trình duyệt biết thời gian cục bộ của máy chủ không? (Cập nhật: thực sự http://stackoverflow.com/questions/4849744/should-i-use-datetime-now-or-datetime-utcnow-in-httpcookie-expires-and-httpcache trả lời câu hỏi này) –

+1

Câu hỏi hay. Khi bạn phát hiện ra, nó không quan trọng. –

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