Hỗ trợ tiêu đề phản hồi HTTP

Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu Apigee X.
thông tin

Chủ đề này mô tả cách Edge xử lý tiêu đề lưu vào bộ nhớ đệm HTTP/1.1 khi bạn đang sử dụng chính sách ResponseCache. Apigee Edge hiện hỗ trợ một nhóm nhỏ các tiêu đề và chỉ thị lưu vào bộ nhớ đệm HTTP/1.1 (các tính năng không được hỗ trợ được liệt kê trong chủ đề này) nhận được từ các máy chủ đích (nguồn) phụ trợ.

Ngoài ra, với một số tiêu đề nhất định, Edge sẽ thực hiện hành động dựa trên chỉ thị của các tiêu đề đó. Trong một số trường hợp, các tiêu đề bộ nhớ đệm HTTP/1.1 này sẽ ghi đè mọi hành vi được chỉ định trong chính sách ResponseCache. Ví dụ: nếu tiêu đề Cache-Control được trả về từ một máy chủ phụ trợ, thì bạn có thể có chỉ thị s-maxage của tiêu đề này có khả năng ghi đè các chế độ cài đặt hết hạn khác trong chính sách.

Tiêu đề Hỗ trợ
Cache-Control Được hỗ trợ trên các phản hồi được trả về từ máy chủ gốc phụ trợ, nhưng không được hỗ trợ trên các yêu cầu của ứng dụng. Edge hỗ trợ một số chỉ thị.
Hết hạn Được hỗ trợ. Có thể bị ghi đè.
Thẻ thực thể (ETag) Hành vi cụ thể đối với If-MatchIf-None-Match.
If-Modified-Since Đối với các yêu cầu GET, tiêu đề được truyền đến máy chủ gốc ngay cả khi có một mục nhập hợp lệ trong bộ nhớ đệm.
Accept-Encoding Edge gửi phản hồi đã nén hoặc chưa nén tuỳ thuộc vào tiêu đề đến.

Cache-Control

Apigee Edge chỉ hỗ trợ tiêu đề Cache-Control trên các phản hồi được trả về từ máy chủ gốc phụ trợ (thông số kỹ thuật HTTP/1.1 cho phép tiêu đề Cache-Control trong cả yêu cầu của ứng dụng và phản hồi của máy chủ gốc). Máy chủ gốc có thể bao gồm cả các điểm cuối đích được xác định trong một proxy API Apigee Edge và những điểm cuối được tạo bằng lệnh gọi API TargetServer.

Các hạn chế về khả năng hỗ trợ Cache-Control

Apigee Edge hỗ trợ một số chức năng tiêu đề phản hồi Cache-Control được xác định trong quy cách HTTP/1.1. Xin lưu ý những điều sau:

  • Apigee Edge không hỗ trợ các tiêu đề Cache-Control đi kèm với các yêu cầu của ứng dụng khách đến.
  • Apigee Edge chỉ hỗ trợ khái niệm về bộ nhớ đệm công khai. (Theo quy cách HTTP, Cache-Control có thể là công khai (được chia sẻ) hoặc riêng tư (một người dùng).)
  • Apigee Edge chỉ hỗ trợ một số lệnh phản hồi Cache-Control trong quy cách HTTP/1.1. Hãy xem bài viết Hỗ trợ các chỉ thị tiêu đề phản hồi Cache-Control để biết thông tin chi tiết.

Hỗ trợ các chỉ thị tiêu đề phản hồi Cache-Control

Apigee hỗ trợ một số chỉ thị trong thông số kỹ thuật HTTP/1.1 đối với các phản hồi từ máy chủ gốc. Bảng sau đây mô tả khả năng hỗ trợ của Apigee Edge đối với các chỉ thị tiêu đề phản hồi HTTP Cache-Control.

Để biết thêm thông tin chi tiết về các chỉ thị được liệt kê ở đây, hãy xem Cache-Control trong quy cách HTTP/1.1.

Chỉ thị Cache-Control Cách Apigee Edge xử lý chỉ thị
cache-extension Không được hỗ trợ.
max-age

Nếu chính sách ResponseCache đặt phần tử <UseResponseCacheHeaders> thành true, thì phản hồi có thể được lưu vào bộ nhớ đệm trong số giây được chỉ định theo chỉ thị này.

Lệnh này bị lệnh s-maxage ghi đè và ghi đè tiêu đề Expires. Bạn cũng có thể ghi đè bằng phần tử <ExpirySettings> của chính sách. Để biết thêm thông tin, hãy xem phần "Đặt thời gian hết hạn của mục trong bộ nhớ đệm" và <UseResponseCacheHeaders> trong chính sách Bộ nhớ đệm phản hồi.

must-revalidate Không được hỗ trợ. Apigee Edge sẽ xoá tất cả các mục trong bộ nhớ đệm ngay khi chúng hết hạn.
no-cache

Edge lưu phản hồi gốc vào bộ nhớ đệm, nhưng phải xác thực lại với máy chủ gốc trước khi được dùng để đáp ứng mọi yêu cầu tiếp theo của ứng dụng. Quy tắc này cho phép nguồn gốc trả về phản hồi 304 Not Modified (Chưa được sửa đổi) để cho biết rằng phản hồi phải được trả về từ bộ nhớ đệm, nhờ đó tiết kiệm được quá trình xử lý cần thiết để trả về toàn bộ phản hồi. Nếu máy chủ gốc trả về một phản hồi đầy đủ, thì phản hồi đó sẽ thay thế mục nhập hiện có trong bộ nhớ đệm. Mọi tên trường được chỉ định bằng chỉ thị này đều bị bỏ qua.

no-store Không được hỗ trợ.
no-transform Không được hỗ trợ.
private Không được hỗ trợ. Nếu nhận được chỉ thị này, phản hồi gốc sẽ không được lưu vào bộ nhớ đệm. Mọi tên trường đều bị bỏ qua.
proxy-revalidate Không được hỗ trợ. Apigee Edge sẽ xoá tất cả các mục trong bộ nhớ đệm ngay khi chúng hết hạn.
public Edge lưu phản hồi gốc vào bộ nhớ đệm, ngay cả khi các chỉ thị khác cho biết điều ngược lại. Theo quy cách HTTP/1.1, ngoại lệ duy nhất đối với quy tắc này là nếu phản hồi có chứa một tiêu đề Uỷ quyền.
s-maxage

Nếu chính sách ResponseCache đặt phần tử <UseResponseCacheHeaders> thành true, thì phản hồi có thể được lưu vào bộ nhớ đệm trong số giây được chỉ định theo chỉ thị này.

Lệnh này ghi đè lệnh max-age và tiêu đề Expires. Bạn có thể ghi đè thuộc tính này bằng phần tử <ExpirySettings> của chính sách. Để biết thêm thông tin, hãy xem phần "Đặt thời gian hết hạn của mục trong bộ nhớ đệm" và <UseResponseCacheHeaders> trong chính sách Bộ nhớ đệm phản hồi.

Ngày hết hạn:

Khi cờ UseResponseCacheHeaders trong chính sách ResponseCache được đặt thành true, Edge có thể dùng tiêu đề Expires để xác định thời gian tồn tại (TTL) của một mục trong bộ nhớ đệm. Tiêu đề này chỉ định ngày/giờ sau đó mục nhập bộ nhớ đệm của phản hồi được coi là cũ. Tiêu đề này cho phép các máy chủ báo hiệu thời điểm có thể trả về giá trị được lưu vào bộ nhớ đệm dựa trên dấu thời gian.

Các định dạng ngày được chấp nhận cho tiêu đề Expires được mô tả trong quy cách HTTP/1.1. Ví dụ:

Hết hạn: Thứ Năm, ngày 1 tháng 12 năm 1994, 16:00:00 GMT

Để biết thông tin chi tiết về định dạng ngày/giờ HTTP, hãy xem Định dạng ngày/giờ trong quy cách HTTP/1.1.

Để biết thêm thông tin về tiêu đề Expires, hãy xem phần Định nghĩa trường tiêu đề trong quy cách HTTP/1.1.

ETag

Thẻ thực thể (ETag) là một giá trị nhận dạng được liên kết với tài nguyên được yêu cầu. Bằng cách sử dụng ETag, một máy chủ có thể xác định xem tài nguyên được yêu cầu và tài nguyên được lưu vào bộ nhớ đệm có liên kết có khớp với nhau hay không. Ví dụ: máy chủ có thể lưu phản hồi vào bộ nhớ đệm lại nếu phản hồi đó không khớp với nội dung hiện được lưu vào bộ nhớ đệm. Nó có thể trả về tài nguyên được lưu vào bộ nhớ đệm nếu ETag trùng khớp.

Khi một điểm cuối đích gửi phản hồi trở lại Edge bằng ETag, Edge sẽ lưu ETag vào bộ nhớ đệm cùng với phản hồi.

Bạn có thể đọc thêm về Thẻ thực thể trong Tham số giao thức trong quy cách HTTP/1.1.

If-Match

Với tiêu đề của yêu cầu If-Match, một thực thể được lưu vào bộ nhớ đệm sẽ là thực thể hiện tại nếu ETag trong tiêu đề khớp với ETag được lưu vào bộ nhớ đệm. Mọi yêu cầu khác ngoài yêu cầu GET chỉ định tiêu đề If-Match đều được chuyển đến máy chủ gốc để đảm bảo rằng mọi cơ chế lưu vào bộ nhớ đệm gốc đều có cơ hội xử lý yêu cầu.

Bạn có thể đọc thêm về If-Match trong Định nghĩa trường tiêu đề trong quy cách HTTP/1.1.

Nếu Edge nhận được một yêu cầu GET đến từ một ứng dụng khách có chứa tiêu đề If-Match:

Nếu Hành động
Tiêu đề If-Match chỉ định một hoặc nhiều ETag
  1. Apigee Edge truy xuất mọi mục nhập bộ nhớ đệm chưa hết hạn cho tài nguyên đã chỉ định và so sánh mọi ETag mạnh trên các mục nhập được lưu vào bộ nhớ đệm đó với các ETag được chỉ định trong tiêu đề If-Match.
  2. Nếu tìm thấy kết quả trùng khớp, mục trong bộ nhớ đệm sẽ được trả về.
  3. Nếu không, yêu cầu sẽ được chuyển đến máy chủ gốc.
Tiêu đề If-Match chỉ định "*" Yêu cầu được chuyển đến máy chủ gốc để đảm bảo rằng mọi cơ sở lưu trữ vào bộ nhớ đệm gốc đều có cơ hội xử lý yêu cầu
Hệ thống tìm thấy một mục trong bộ nhớ đệm có cùng URI yêu cầu, nhưng mục đó chỉ chứa ETag yếu Máy chủ gốc phải xác thực lại mục nhập trước khi trả về cho ứng dụng
ETag đến từ máy chủ gốc. ETag được trả về cho ứng dụng khách mà không thay đổi

If-None-Match

Với tiêu đề If-None-Match, một thực thể được lưu vào bộ nhớ đệm sẽ là thực thể hiện tại nếu ETag trong tiêu đề không khớp với ETag được lưu vào bộ nhớ đệm. Các yêu cầu không phải là yêu cầu GET có chứa tiêu đề này sẽ được chuyển đến máy chủ gốc.

Nếu Edge nhận được một yêu cầu GET đến có tiêu đề này:

Nếu Hành động
Tiêu đề If-None-Match chỉ định một hoặc nhiều ETag
  1. Apigee Edge truy xuất mọi mục nhập trong bộ nhớ đệm chưa hết hạn cho URI đã chỉ định và so sánh mọi ETag mạnh trên các mục nhập được lưu vào bộ nhớ đệm đó với các ETag được chỉ định trong tiêu đề If-None-Match.
  2. Nếu tìm thấy kết quả trùng khớp, Edge sẽ trả về trạng thái 304 Not Modified. Nếu không tìm thấy kết quả trùng khớp, Edge sẽ chuyển yêu cầu đến máy chủ gốc.

Tiêu đề If-None-Match chỉ định "*" và có một mục nhập được lưu vào bộ nhớ đệm chưa hết hạn cho URI được yêu cầu

Edge trả về trạng thái 304 Chưa được sửa đổi
Tìm thấy một mục trong bộ nhớ đệm có cùng URI yêu cầu nhưng chỉ chứa ETag yếu Máy chủ gốc phải xác thực lại mục nhập trước khi Edge trả mục nhập đó về cho máy khách
Edge nhận được ETag từ một máy chủ gốc ETag được trả về cho ứng dụng khách mà không thay đổi

If-Modified-Since

Nếu Apigee Edge nhận được tiêu đề If-Modified-Since trong một yêu cầu GET, thì tiêu đề đó sẽ được chuyển đến máy chủ gốc ngay cả khi có một mục nhập hợp lệ trong bộ nhớ đệm.

Điều này đảm bảo rằng mọi thông tin cập nhật đối với một tài nguyên không thông qua Apigee Edge đều được tính đến. Nếu máy chủ gốc trả về một thực thể mới, thì Edge sẽ thay thế mục nhập bộ nhớ đệm hiện có bằng giá trị mới. Nếu máy chủ trả về trạng thái 304 Not Modified (Chưa được sửa đổi), Edge sẽ trả về giá trị phản hồi nếu tiêu đề Last-Modified của phản hồi được lưu vào bộ nhớ đệm cho biết rằng phản hồi đó chưa thay đổi.

Accept-Encoding

Khi một yêu cầu đến bao gồm tiêu đề Accept-Encoding với các giá trị gzip, deflate hoặc compress, máy chủ gốc sẽ phản hồi bằng dữ liệu nén. Khi các yêu cầu tiếp theo đến mà không có tiêu đề Accept-Encoding, chúng sẽ mong đợi một phản hồi chưa nén. Cơ chế lưu phản hồi vào bộ nhớ đệm của Apigee có thể gửi cả phản hồi đã nén và chưa nén, tuỳ thuộc vào tiêu đề đến mà không cần quay lại máy chủ gốc.

Bạn có thể thêm các giá trị tiêu đề Chấp nhận vào khoá bộ nhớ đệm để làm cho các khoá này có ý nghĩa hơn đối với mỗi mục được lưu vào bộ nhớ đệm. Để biết thêm thông tin chi tiết, hãy xem phần "Định cấu hình khoá bộ nhớ đệm" trong chính sách Bộ nhớ đệm phản hồi.