Tài liệu tham khảo về thuộc tính điểm cuối

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ác thuộc tính truyền tải mà bạn có thể đặt trong cấu hình TargetEndpoint và ProxyEndpoint để kiểm soát hành vi nhắn tin và kết nối. Để biết thông tin đầy đủ về cấu hình TargetEndpoint và ProxyEndpoint, hãy xem Tài liệu tham khảo về cấu hình của API proxy.

Thuộc tính truyền tải TargetEndpoint

Phần tử HTTPTargetConnection trong cấu hình TargetEndpoint xác định một tập hợp các thuộc tính truyền tải HTTP. Bạn có thể sử dụng các thuộc tính này để thiết lập cấu hình ở cấp độ truyền tải.

Các thuộc tính được đặt trên phần tử TargetEndpoint HTTPTargetConnection như minh hoạ dưới đây:

<TargetEndpoint name="default">
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
    <Properties>
      <Property name="supports.http10">true</Property>
      <Property name="request.retain.headers">User-Agent,Referer,Accept-Language</Property>
      <Property name="retain.queryparams">apikey</Property>
    </Properties>
    <CommonName>COMMON_NAME_HERE</CommonName>
  </HTTPTargetConnection>
</TargetEndpoint>

Quy cách thuộc tính truyền tải TargetEndpoint

Tên thuộc tính Giá trị mặc định Mô tả
keepalive.timeout.millis 60000 Thời gian chờ kết nối ở trạng thái rảnh cho kết nối đích trong nhóm kết nối. Nếu kết nối trong nhóm ở trạng thái rảnh quá giới hạn đã chỉ định, thì kết nối sẽ bị đóng.
connect.timeout.millis

3000

Hết thời gian chờ kết nối đích. Edge trả về mã trạng thái HTTP 503 nếu xảy ra thời gian chờ kết nối. Trong một số trường hợp, mã trạng thái HTTP 504 có thể được trả về khi LoadBalancer được dùng trong định nghĩa TargetServer và xảy ra thời gian chờ.

io.timeout.millis 55000

Nếu không có dữ liệu nào để đọc trong số lượng mili giây đã chỉ định hoặc nếu ổ cắm chưa sẵn sàng ghi dữ liệu trong số lượng mili giây đã chỉ định, thì giao dịch sẽ được coi là hết thời gian chờ.

  • Nếu xảy ra thời gian chờ trong khi ghi yêu cầu HTTP, 408, Request Timeout sẽ được trả về.
  • Nếu hết thời gian chờ trong khi đọc phản hồi HTTP, 504, Gateway Timeout sẽ được trả về.

Giá trị này phải luôn nhỏ hơn giá trị của thuộc tính proxy_read_timeout của máy chủ ảo.

Giá trị này phải nhỏ hơn thời gian chờ mà Bộ định tuyến dùng để giao tiếp với Trình xử lý thông báo. Hãy xem phần Định cấu hình thời gian chờ của Bộ định tuyến để biết thêm thông tin.

Hãy xem phần Đặt io.timeout.millis và api.timeout cho Edge để biết thêm.

supports.http10 true Nếu đây là true và ứng dụng gửi yêu cầu 1.0, thì đích đến cũng sẽ nhận được yêu cầu 1.0. Nếu không, yêu cầu 1.1 sẽ được gửi đến mục tiêu.
supports.http11 true Nếu đây là true và ứng dụng gửi yêu cầu 1.1, thì đích đến cũng sẽ nhận được yêu cầu 1.1, nếu không, yêu cầu 1.0 sẽ được gửi đến đích đến.
use.proxy true Nếu bạn đặt thành true và chỉ định cấu hình proxy trong http.properties (chỉ dành cho các hoạt động triển khai tại cơ sở), thì các kết nối mục tiêu sẽ được đặt để sử dụng proxy đã chỉ định.
use.proxy.tunneling true Nếu bạn đặt giá trị này thành true và chỉ định cấu hình proxy trong http.properties (chỉ dành cho các hoạt động triển khai tại cơ sở), thì các kết nối mục tiêu sẽ được đặt để sử dụng đường hầm đã chỉ định. Nếu đích đến sử dụng TLS/SSL, thì thuộc tính này sẽ bị bỏ qua và thông báo luôn được gửi qua một đường hầm.
enable.method.override false Đối với phương thức HTTP đã chỉ định, hãy đặt tiêu đề X-HTTP-Method-Override cho yêu cầu gửi đi đến dịch vụ đích. Ví dụ: <Property name="GET.override.method">POST</Property>
*.override.method Không áp dụng Đối với phương thức HTTP đã chỉ định, hãy đặt tiêu đề X-HTTP-Method-Override cho yêu cầu gửi đi. Ví dụ: <Property name="GET.override.method">POST</Property>
request.streaming.enabled false

Theo mặc định (false), tải trọng yêu cầu HTTP sẽ được đọc vào một vùng đệm và các chính sách có thể hoạt động trên tải trọng sẽ hoạt động như dự kiến. Trong trường hợp tải trọng lớn hơn dung lượng bộ nhớ đệm (10 MB), bạn có thể đặt thuộc tính này thành true. Khi true, trọng tải yêu cầu HTTP không được đọc vào vùng đệm; chúng được truyền trực tuyến nguyên trạng đến điểm cuối đích. Trong trường hợp này, mọi chính sách hoạt động trên tải trọng trong quy trình yêu cầu TargetEndpoint đều bị bỏ qua. Xem thêm bài viết Yêu cầu và phản hồi truyền trực tuyến.

response.streaming.enabled false

Theo mặc định (false), trọng tải phản hồi HTTP được đọc vào một vùng đệm và các chính sách có thể hoạt động trên trọng tải này sẽ hoạt động như dự kiến. Trong trường hợp tải trọng lớn hơn dung lượng bộ nhớ đệm (10 MB), bạn có thể đặt thuộc tính này thành true. Khi true, trọng tải phản hồi HTTP sẽ không được đọc vào vùng đệm; chúng được truyền trực tuyến nguyên trạng đến quy trình phản hồi ProxyEndpoint. Trong trường hợp này, mọi chính sách hoạt động trên tải trọng trong luồng phản hồi TargetEndpoint đều bị bỏ qua. Xem thêm Yêu cầu và phản hồi truyền trực tuyến.

success.codes Không áp dụng

Theo mặc định, Apigee Edge coi mã HTTP 4XX hoặc 5XX là lỗi và coi mã HTTP 1XX, 2XX, 3XX là thành công. Thuộc tính này cho phép xác định rõ ràng các mã thành công, ví dụ: 2XX, 1XX, 505 coi mọi mã phản hồi HTTP 100, 200505 là thành công.

Việc đặt thuộc tính này sẽ ghi đè các giá trị mặc định. Do đó, nếu bạn muốn thêm mã HTTP 400 vào danh sách mã thành công mặc định, hãy đặt thuộc tính này như sau:

<Property name="success.codes">1XX,2XX,3XX,400</Property>

Nếu bạn chỉ muốn mã HTTP 400 được coi là mã thành công, hãy đặt thuộc tính như sau:

<Property name="success.codes">400</Property>

Bằng cách đặt mã HTTP 400 làm mã thành công duy nhất, các mã 1XX, 2XX3XX sẽ được coi là lỗi.

compression.algorithm Không áp dụng Theo mặc định, Apigee Edge chuyển tiếp các yêu cầu đến đích bằng cách sử dụng cùng một loại nén như yêu cầu của máy khách. Nếu yêu cầu nhận được từ ứng dụng khách đang sử dụng, chẳng hạn như nén gzip, thì Apigee Edge sẽ chuyển tiếp yêu cầu đến đích bằng cách sử dụng phương thức nén gzip. Nếu phản hồi nhận được từ đích đến sử dụng deflate, thì Apigee Edge sẽ chuyển tiếp phản hồi đó đến máy khách bằng cách sử dụng deflate. Sau đây là các giá trị được hỗ trợ:
  • gzip: luôn gửi thông báo bằng cách nén gzip
  • deflate: luôn gửi thông báo bằng cách sử dụng phương thức nén deflate
  • none: luôn gửi tin nhắn mà không nén

Xem thêm: Apigee có hỗ trợ nén/giải nén bằng phương thức nén GZIP/deflate không?

request.retain.headers.
enabled
true Theo mặc định, Apigee Edge luôn giữ lại tất cả tiêu đề HTTP trên các thông báo gửi đi. Khi được đặt thành true, tất cả tiêu đề HTTP có trong yêu cầu đến sẽ được đặt trong yêu cầu đi.
request.retain.headers Không áp dụng Xác định các tiêu đề HTTP cụ thể trong yêu cầu cần được đặt trên yêu cầu gửi đi đến dịch vụ đích. Ví dụ: để truyền qua tiêu đề User-Agent, hãy đặt giá trị của request.retain.headers thành User-Agent. Bạn có thể chỉ định nhiều tiêu đề HTTP dưới dạng danh sách được phân tách bằng dấu phẩy, ví dụ: User-Agent,Referer,Accept-Language. Thuộc tính này ghi đè request.retain.headers.enabled. Nếu bạn đặt request.retain.headers.enabled thành false, mọi tiêu đề được chỉ định trong thuộc tính request.retain.headers vẫn được đặt trên thông báo gửi đi.
response.retain.headers.
enabled
true Theo mặc định, Apigee Edge luôn giữ lại tất cả tiêu đề HTTP trên các thông báo gửi đi. Khi được đặt thành true, tất cả tiêu đề HTTP có trong phản hồi đến từ dịch vụ đích sẽ được đặt trên phản hồi đi trước khi được truyền đến ProxyEndpoint.
response.retain.headers Không áp dụng Xác định các tiêu đề HTTP cụ thể trong phản hồi cần được đặt trên phản hồi gửi đi trước khi được truyền đến ProxyEndpoint. Ví dụ: để truyền qua tiêu đề Expires, hãy đặt giá trị của response.retain.headers thành Expires. Bạn có thể chỉ định nhiều tiêu đề HTTP dưới dạng danh sách được phân tách bằng dấu phẩy, ví dụ: Expires,Set-Cookie. Thuộc tính này ghi đè response.retain.headers.enabled. Nếu response.retain.headers.enabled được đặt thành false, mọi tiêu đề được chỉ định trong thuộc tính response.retain.headers vẫn được đặt trên thông báo gửi đi.
retain.queryparams.
enabled
true Theo mặc định, Apigee Edge luôn giữ lại tất cả các tham số truy vấn trong các yêu cầu đi. Khi được đặt thành true, tất cả các tham số truy vấn có trong yêu cầu đến sẽ được đặt trên yêu cầu đi đến dịch vụ đích.
retain.queryparams Không áp dụng Xác định các tham số truy vấn cụ thể cần đặt cho yêu cầu đi. Ví dụ: để thêm tham số truy vấn apikey từ thông báo yêu cầu, hãy đặt retain.queryparams thành apikey. Nhiều tham số truy vấn được chỉ định dưới dạng một danh sách được phân tách bằng dấu phẩy, ví dụ: apikey,environment. Thuộc tính này ghi đè retain.queryparams.enabled.

Thuộc tính truyền tải ProxyEndpoint

Các phần tử ProxyEndpoint HTTPTargetConnection xác định một tập hợp các thuộc tính truyền tải HTTP. Bạn có thể dùng các thuộc tính này để thiết lập cấu hình ở cấp độ truyền tải.

Các thuộc tính được đặt trên các phần tử ProxyEndpoint HTTPProxyConnection như sau:

<ProxyEndpoint name="default">
  <HTTPProxyConnection>
    <BasePath>/v1/weather</BasePath>
    <Properties>
      <Property name="request.streaming.enabled">true</Property>
    </Properties>
    <VirtualHost>default</VirtualHost>
    <VirtualHost>secure</VirtualHost>
  </HTTPProxyConnection>
</ProxyEndpoint>

Để biết thêm thông tin về máy chủ ảo, hãy xem bài viết Giới thiệu về máy chủ ảo.

Quy cách thuộc tính truyền tải ProxyEndpoint

Tên thuộc tính Giá trị mặc định Mô tả
X-Forwarded-For false Khi được đặt thành true, địa chỉ IP của máy chủ ảo sẽ được thêm vào yêu cầu gửi đi dưới dạng giá trị của tiêu đề HTTP X-Forwarded-For.
request.streaming.
enabled
false Theo mặc định (false), tải trọng của yêu cầu HTTP sẽ được đọc vào một vùng đệm và các chính sách có thể hoạt động trên tải trọng sẽ hoạt động như mong đợi. Trong trường hợp tải trọng lớn hơn dung lượng bộ nhớ đệm (10 MB), bạn có thể đặt thuộc tính này thành true. Khi true, trọng tải yêu cầu HTTP không được đọc vào vùng đệm; chúng được truyền trực tuyến nguyên trạng đến luồng yêu cầu TargetEndpoint. Trong trường hợp này, mọi chính sách hoạt động trên tải trọng trong luồng yêu cầu ProxyEndpoint đều bị bỏ qua. Xem thêm bài viết Yêu cầu và phản hồi truyền trực tuyến.
response.streaming.
enabled
false Theo mặc định (false), trọng tải phản hồi HTTP được đọc vào một vùng đệm và các chính sách có thể hoạt động trên trọng tải sẽ hoạt động như dự kiến. Trong trường hợp tải trọng lớn hơn dung lượng bộ nhớ đệm (10 MB), bạn có thể đặt thuộc tính này thành true. Khi true, trọng tải phản hồi HTTP không được đọc vào vùng đệm; chúng được truyền trực tuyến nguyên trạng đến ứng dụng. Trong trường hợp này, mọi chính sách hoạt động trên tải trọng trong luồng phản hồi ProxyEndpoint đều bị bỏ qua. Xem thêm bài viết Yêu cầu và phản hồi truyền trực tuyến.
compression.algorithm Không áp dụng

Theo mặc định, Apigee Edge sẽ tuân theo loại nén được đặt cho mọi thông báo nhận được. Ví dụ: khi một ứng dụng gửi một yêu cầu sử dụng phương thức nén gzip, Apigee Edge sẽ chuyển tiếp yêu cầu đó đến đích bằng phương thức nén gzip. Bạn có thể định cấu hình các thuật toán nén để được áp dụng một cách rõ ràng bằng cách đặt thuộc tính này trên TargetEndpoint hoặc ProxyEndpoint. Sau đây là các giá trị được hỗ trợ:

  • gzip: luôn gửi thông báo bằng cách nén gzip
  • deflate: luôn gửi thông báo bằng cách sử dụng phương thức nén deflate
  • none: luôn gửi tin nhắn mà không nén

Xem thêm: Apigee có hỗ trợ nén/giải nén bằng phương thức nén GZIP/deflate không?

api.timeout Không áp dụng

Định cấu hình thời gian chờ cho từng proxy API

Bạn có thể định cấu hình các proxy API (ngay cả những proxy đã bật tính năng truyền phát trực tiếp) để hết thời gian chờ sau một khoảng thời gian cụ thể với trạng thái 504 Gateway Timeout. Trường hợp sử dụng chính là dành cho những khách hàng có các proxy API mất nhiều thời gian hơn để thực thi. Ví dụ: giả sử bạn cần các proxy cụ thể hết thời gian chờ sau 3 phút. Sau đây là cách bạn sử dụng api.timeout.

  1. Trước tiên, hãy nhớ định cấu hình bộ cân bằng tải, bộ định tuyến và trình xử lý thông báo để hết thời gian chờ sau 3 phút.
  2. Sau đó, hãy định cấu hình các proxy liên quan để hết thời gian chờ sau 3 phút. Chỉ định giá trị bằng mili giây. Ví dụ: <Property name="api.timeout">180000</Property>
  3. Tuy nhiên, lưu ý rằng việc tăng thời gian chờ của hệ thống có thể dẫn đến các vấn đề về hiệu suất, vì tất cả các proxy không có chế độ cài đặt api.timeout đều sử dụng bộ cân bằng tải, bộ định tuyến và thời gian chờ của trình xử lý thông báo mới, cao hơn. Vì vậy, hãy định cấu hình các proxy API khác không yêu cầu thời gian chờ lâu hơn để sử dụng thời gian chờ thấp hơn. Ví dụ: đoạn mã sau đây đặt thời gian chờ cho một proxy API là 1 phút:
    <Property name="api.timeout">60000</Property>

Bạn không thể đặt thuộc tính này bằng một biến.

Những khách hàng không thể sửa đổi thời gian chờ của Edge cũng có thể định cấu hình thời gian chờ của proxy API, miễn là thời gian chờ ngắn hơn thời gian chờ tiêu chuẩn của trình xử lý thông báo Edge là 57 giây.

Hãy xem phần Đặt io.timeout.millis và api.timeout cho Edge để biết thêm.

Đặt io.timeout.millis và api.timeout cho Edge

Trên Edge, hoạt động của io.timeout.millisapi.timeout có liên quan với nhau. Trên mọi yêu cầu đối với một proxy API:

  1. Bộ định tuyến gửi giá trị thời gian chờ của nó đến Trình xử lý thông báo. Giá trị thời gian chờ của Bộ định tuyến là giá trị của proxy_read_timeout do máy chủ ảo đặt để xử lý yêu cầu hoặc giá trị thời gian chờ mặc định là 57 giây.
  2. Sau đó, Message Processor sẽ đặt api.timeout:
    1. Nếu api.timeout không được đặt ở cấp proxy, hãy đặt thành thời gian chờ của Bộ định tuyến.
    2. Nếu api.timeout được đặt ở cấp proxy, hãy đặt giá trị này trên Message Processor thành giá trị nhỏ hơn giữa thời gian chờ của Bộ định tuyến hoặc giá trị của api.timeout.
  3. Giá trị của api.timeout chỉ định khoảng thời gian tối đa mà một proxy API phải thực thi từ yêu cầu API đến phản hồi.

    Sau khi mỗi chính sách trong proxy API thực thi hoặc trước khi Trình xử lý thông báo gửi yêu cầu đến điểm cuối đích, Trình xử lý thông báo sẽ tính toán (api.timeout – thời gian đã trôi qua kể từ khi bắt đầu yêu cầu). Nếu giá trị nhỏ hơn 0, thì thời gian tối đa để xử lý yêu cầu đã hết và Message Processor sẽ trả về 504.

  4. Giá trị của io.timeout.millis chỉ định khoảng thời gian tối đa mà điểm cuối mục tiêu phải phản hồi.

    Trước khi kết nối với một điểm cuối đích, Trình xử lý thông báo sẽ xác định giá trị nhỏ hơn giữa (api.timeout – thời gian đã trôi qua kể từ khi bắt đầu yêu cầu) và io.timeout.millis. Sau đó, nó đặt io.timeout.millis thành giá trị đó.

    • Nếu xảy ra thời gian chờ trong khi ghi yêu cầu HTTP, 408, Request Timeout sẽ được trả về.
    • Nếu hết thời gian chờ trong khi đọc phản hồi HTTP, 504, Gateway Timeout sẽ được trả về.

Giới thiệu về ScriptTarget cho các ứng dụng Node.js

Phần tử ScriptTarget được dùng để tích hợp một ứng dụng Node.js vào proxy của bạn. Để biết thông tin về cách sử dụng Node.js và ScriptTarget, hãy xem:

Giới thiệu về các điểm cuối HostedTarget

Thẻ <HostedTarget/> trống cho Edge biết rằng mục tiêu của thẻ là một ứng dụng Node.js được triển khai cho môi trường Hosted Targets. Để biết thông tin chi tiết, hãy xem bài viết Tổng quan về mục tiêu được lưu trữ.