Nguon: Microsoft Learn · .NET 8.0

YARP — Transform Response và Response Trailer

Nguồn: YARP Response and Response Trailer Transforms

Tất cả header response và trailer đều được sao chép từ response được proxy sang response của client theo mặc định. Các transform response và response trailer có thể chỉ định liệu chúng có nên được áp dụng chỉ cho response thành công hay cho tất cả response.

Trong code, chúng được triển khai dưới dạng các lớp kế thừa từ các lớp trừu tượng ResponseTransformResponseTrailersTransform.

ResponseHeadersCopy

Đặt có sao chép header response từ đích sang client hay không

KeyValueMặc địnhBắt buộc
ResponseHeadersCopytrue/falsetrue

Cấu hình:

json
{ "ResponseHeadersCopy": "false" }

Code:

csharp
routeConfig = routeConfig.WithTransformCopyResponseHeaders(copy: false);
csharp
transformBuilderContext.CopyResponseHeaders = false;

Đặt xem có sao chép tất cả header proxy response sang client response không. Cài đặt này được bật mặc định và có thể tắt bằng cách cấu hình transform với giá trị false. Các transform tham chiếu đến header cụ thể vẫn sẽ chạy nếu cài đặt này bị tắt.

ResponseHeader

Thêm hoặc thay thế header response

KeyValueMặc địnhBắt buộc
ResponseHeaderTên header(none)
Set/AppendGiá trị header(none)
WhenSuccess/Always/FailureSuccesskhông

Cấu hình:

json
{
  "ResponseHeader": "HeaderName",
  "Append": "value",
  "When": "Success"
}

Code:

csharp
routeConfig = routeConfig.WithTransformResponseHeader(
    headerName: "HeaderName", value: "value", append: true, ResponseCondition.Success);
csharp
transformBuilderContext.AddResponseHeader(
    headerName: "HeaderName", value: "value", append: true, always: ResponseCondition.Success);

Ví dụ:

code
HeaderName: value

Transform này đặt hoặc nối thêm giá trị cho header response được đặt tên. Set thay thế bất kỳ header hiện có nào. Append thêm một header bổ sung với giá trị đã cho. Lưu ý: đặt "" làm giá trị header không được khuyến nghị và có thể gây ra hành vi không xác định.

When chỉ định nếu header response nên được bao gồm cho tất cả, thành công, hoặc response thất bại. Bất kỳ response nào có mã trạng thái nhỏ hơn 400 đều được coi là thành công.

ResponseHeaderRemove

Xóa header response

KeyValueMặc địnhBắt buộc
ResponseHeaderRemoveTên header(none)
WhenSuccess/Always/FailureSuccesskhông

Cấu hình:

json
{
  "ResponseHeaderRemove": "HeaderName",
  "When": "Success"
}

Code:

csharp
routeConfig = routeConfig.WithTransformResponseHeaderRemove(
    headerName: "HeaderName", ResponseCondition.Success);
csharp
transformBuilderContext.AddResponseHeaderRemove(
    headerName: "HeaderName", ResponseCondition.Success);

Transform này xóa header response có tên được chỉ định.

When chỉ định nếu header response nên được xóa cho tất cả, thành công, hoặc response thất bại.

ResponseHeadersAllowed

KeyValueBắt buộc
ResponseHeadersAllowedDanh sách tên header được phép, phân tách bằng dấu chấm phẩy.

Cấu hình:

json
{
  "ResponseHeadersAllowed": "Header1;header2"
}

Code:

csharp
routeConfig = routeConfig.WithTransformResponseHeadersAllowed("Header1", "header2");
csharp
transformBuilderContext.AddResponseHeadersAllowed("Header1", "header2");

YARP sao chép hầu hết header response từ proxy response theo mặc định (xem ResponseHeadersCopy). Một số mô hình bảo mật chỉ cho phép proxy các header cụ thể. Transform này tắt ResponseHeadersCopy và chỉ sao chép các header được chỉ định.

Lưu ý rằng có một số header YARP không sao chép mặc định vì chúng đặc thù cho kết nối hoặc nhạy cảm về bảo mật (ví dụ Connection, Alt-Svc). Việc đặt những tên header đó vào danh sách cho phép rất không được khuyến khích.

Ví dụ: chỉ header1 và header2 được sao chép từ proxy response.

ResponseTrailersCopy

Đặt có sao chép trailing header response từ đích sang client hay không

KeyValueMặc địnhBắt buộc
ResponseTrailersCopytrue/falsetrue

Cấu hình:

json
{ "ResponseTrailersCopy": "false" }

Code:

csharp
routeConfig = routeConfig.WithTransformCopyResponseTrailers(copy: false);
csharp
transformBuilderContext.CopyResponseTrailers = false;

Đặt xem có sao chép tất cả proxy response trailer sang client response không. Cài đặt này được bật mặc định và có thể tắt bằng cách cấu hình transform với giá trị false.

ResponseTrailer

Thêm hoặc thay thế trailing response header

KeyValueMặc địnhBắt buộc
ResponseTrailerTên header(none)
Set/AppendGiá trị header(none)
WhenSuccess/Always/FailureSuccesskhông

Cấu hình:

json
{
  "ResponseTrailer": "HeaderName",
  "Append": "value",
  "When": "Success"
}

Code:

csharp
routeConfig = routeConfig.WithTransformResponseTrailer(
    headerName: "HeaderName", value: "value", append: true, ResponseCondition.Success);
csharp
transformBuilderContext.AddResponseTrailer(
    headerName: "HeaderName", value: "value", append: true, ResponseCondition.Success);

Ví dụ:

code
HeaderName: value

Response trailer (trailer phản hồi) là các header được gửi ở cuối body response. Hỗ trợ trailer không phổ biến trong các triển khai HTTP/1.1 nhưng đang trở nên phổ biến trong các triển khai HTTP/2.

ResponseTrailer theo cùng cấu trúc và hướng dẫn như ResponseHeader.

ResponseTrailerRemove

Xóa trailing response header

KeyValueMặc địnhBắt buộc
ResponseTrailerRemoveTên header(none)
WhenSuccess/Always/FailureSuccesskhông

Cấu hình:

json
{
  "ResponseTrailerRemove": "HeaderName",
  "When": "Success"
}

Code:

csharp
routeConfig = routeConfig.WithTransformResponseTrailerRemove(headerName: "HeaderName", ResponseCondition.Success);
csharp
transformBuilderContext.AddResponseTrailerRemove(headerName: "HeaderName", ResponseCondition.Success);

Transform này xóa trailing header được đặt tên.

ResponseTrailerRemove theo cùng cấu trúc và hướng dẫn như ResponseHeaderRemove.

ResponseTrailersAllowed

KeyValueBắt buộc
ResponseTrailersAllowedDanh sách tên header được phép, phân tách bằng dấu chấm phẩy.

Cấu hình:

json
{
  "ResponseTrailersAllowed": "Header1;header2"
}

Code:

csharp
routeConfig = routeConfig.WithTransformResponseTrailersAllowed("Header1", "header2");
csharp
transformBuilderContext.AddResponseTrailersAllowed("Header1", "header2");

YARP sao chép hầu hết response trailer từ proxy response theo mặc định (xem ResponseTrailersCopy). Transform này tắt ResponseTrailersCopy và chỉ sao chép các header được chỉ định.

Lưu ý rằng có một số header YARP không sao chép mặc định vì chúng đặc thù cho kết nối hoặc nhạy cảm về bảo mật. Việc đặt những tên header đó vào danh sách cho phép rất không được khuyến khích.

Ví dụ: chỉ header1 và header2 được sao chép từ proxy response.