2010-08-11 30 views
5

Tôi gặp sự cố khi máy chủ proxy của công ty phân phát trang cho những người dùng đã đăng nhập khác nhau. Tôi nghĩ rằng tôi có thể giải quyết vấn đề này bằng cách vô hiệu hóa proxy caching. This page gợi ý bao gồm các đoạn mã sau trong .htaccess:Cách tắt bộ nhớ đệm proxy bằng .htaccess

ExpiresDefault A0 
Header set Cache-Control "no-store, no-cache, must-revalidate, max-age=0" 
Header set Pragma "no-cache" 

Như tôi đã hiểu nó (bằng cách Googling), các Expires tiêu đề được chỉ đọc bằng proxy, vì vậy tôi cũng có thể chỉ cần sử dụng "Header bộ Expires 0"?

Tôi cho rằng điều này cũng sẽ ngăn bộ nhớ đệm của biểu định kiểu, hình ảnh và nội dung khác (mặc dù chỉ bởi proxy, không phải trình duyệt)?

Cách tốt nhất để giải quyết vấn đề này là gì? Tôi đang chạy PHP, và có thể dễ dàng sửa đổi các tiêu đề thông qua PHP, quá, nếu đó là khuyến cáo.

Tôi không có quyền truy cập vào máy chủ proxy để thử nghiệm.

+0

@ Sumurai8 không phải là bản dupe, vì điều này đặc biệt về proxy caching không bro wser caching. – Petah

+0

Tôi đoán tôi đã không đọc tốt sau đó. Tôi không nghĩ có thể làm điều đó một cách đáng tin cậy, nhưng chúng ta sẽ thấy. – Sumurai8

Trả lời

0

Sử dụng:

ExpiresActive On

ExpiresDefault tại

Tiêu đề thiết lập Cache-Control "no-cache, không có cửa hàng,-phải xác nhận lại, max-age = 0, proxy- hợp lệ lại, không chuyển hóa"

Tiêu đề thiết pragma "no-cache"

+0

Và điều này sẽ cho phép các trình duyệt cache và proxy không? – Petah

1

Từ http 1.1 spec (RFC 2616) chương 14.9.1

private 
    Indicates that all or part of the response message is intended for 
    a single user and MUST NOT be cached by a shared cache. This 
    allows an origin server to state that the specified parts of the 

Tiêu đề thiết lập Cache-Control "tư nhân, ..." làm các trick.

Không cần tiêu đề Expires. Kiểm soát bộ nhớ cache: độ tuổi tối đa ghi đè trường Hết hạn. Xem phần RFC: 14.21

Bạn nên gửi các tiêu đề bộ nhớ đệm khác nhau tùy thuộc vào nội dung bạn phân phối.

Ví dụ sau dành cho trang web cung cấp nội dung tĩnh trong/tĩnh và thay đổi nội dung cho người dùng đã đăng nhập. Người dùng đã đăng nhập được xác định bằng sự hiện diện của cookie phiên: MYSESSID.

  • phép 5min bộ nhớ đệm công cộng theo mặc định
  • phép 365 ngày bộ nhớ đệm công cộng trên các tập tin tĩnh
  • Cho phép bộ nhớ đệm riêng 5min cho người dùng đăng nhập
  • Deny bộ nhớ đệm ở/động/*

RewriteEngine On 
# Flag files in /static as STATIC 
RewriteRule ^static - [E=STATIC:1] 

# Flag requests by logged in users as PRIVATE 
# Users are identified by presence of MYSESSID cookie 
# Ignores files in: /static 
RewriteCond %{HTTP_COOKIE} MYSESSID 
RewriteCond %{REQUEST_URI} !^/static 
RewriteRule^- [E=PRIVATE:1] 

# Tell proxy servers that contents not in /static vary based on the given cookies 
RewriteCond %{REQUEST_URI} !^/static 
RewriteRule^- [E=VARY:1] 

# Flag requests to /dynamic as NO_CACHE 
RewriteRule ^dynamic - [E=NO_CACHE:1] 


## Default Cache-Control 
# Per default, any content is public and 5min cacheable 
Header set Cache-Control "public, max-age=300" 

## Static Files 
# Static files are public and 365d cacheable. 
Header set Cache-Control "public, max-age=31536000" env=STATIC 
# Reset age, indicates objects as fresh 
Header set Age 0 env=STATIC 

## Private responses 
# private. Allow 5min caching 
Header set Cache-Control "private, max-age=300" env=PRIVATE 

## Deny caching 
Header set Cache-Control "private, max-age=0, no-cache, no-store, must-revalidate" env=NO_CACHE 

## Vary rules 
Header append Vary: Cookie env=VARY 
+0

Bạn có thể rút ngắn quy tắc này không? – Petah

+0

Câu trả lời ngắn gọn là: 'Header set Cache-Control" riêng tư, max-age = N "'. Nó cung cấp tất cả nội dung có thể lưu vào bộ nhớ cache trong các trình duyệt chỉ trong 'N' giây. – jgb

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