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
Dấu hiệu
Ứng dụng khách nhận được phản hồi HTTP 400 Bad Request kèm theo thông báo The plain HTTP request was sent to HTTPS port.
Thông báo lỗi
Ứng dụng khách sẽ nhận được mã phản hồi sau:
HTTP/1.1 400 Bad Request
Tiếp theo là trang lỗi HTML bên dưới:
<html> <head><title>400 The plain HTTP request was sent to HTTPS port</title></head> <body> <center><h1>400 Bad Request</h1></center> <center>The plain HTTP request was sent to HTTPS port</center> </body> </html>
Các nguyên nhân có thể
| Nguyên nhân | Mô tả | Hướng dẫn khắc phục sự cố áp dụng cho |
|---|---|---|
| Yêu cầu HTTP đến máy chủ ảo được định cấu hình TLS | Máy khách gửi yêu cầu HTTP đến máy chủ ảo được định cấu hình TLS | Người dùng Edge Public Cloud và Private Cloud |
| Yêu cầu HTTP đến một điểm cuối đích được định cấu hình TLS | Yêu cầu HTTP được gửi đến máy chủ phụ trợ có TLS trong điểm cuối mục tiêu. | Người dùng Edge Public Cloud và Private Cloud |
| Cấu hình máy chủ đích không chính xác | Máy chủ đích được định cấu hình bằng cổng bảo mật 443 nhưng SSL chưa được bật. |
Người dùng Edge Public Cloud và Private Cloud |
Nguyên nhân: Yêu cầu HTTP đến một máy chủ ảo được định cấu hình TLS
Lỗi này xảy ra khi một ứng dụng đang cố gắng kết nối với một API trên Apigee và máy chủ ảo được đề cập được định cấu hình để sử dụng SSL và nhận được một yêu cầu HTTP.
Chẩn đoán
Vì vấn đề này xảy ra trên điểm cuối Northbound và các yêu cầu API không thành công tại điểm tương tác nhập giữa ứng dụng khách và Bộ định tuyến, nên các thông báo lỗi này không được ghi vào nhật ký truy cập bộ định tuyến NGINX. Do đó, những yêu cầu này sẽ không được ghi lại trong các công cụ như API Monitoring và Trace.
-
Xác minh yêu cầu API của bạn và xem bạn có đang đưa ra yêu cầu HTTP cho một bí danh máy chủ lưu trữ được định cấu hình để chỉ chấp nhận các yêu cầu trên cổng bảo mật
443hay không. Nếu có, thì đó là nguyên nhân gây ra vấn đề.Yêu cầu API mẫu không chính xác:
curl http://org-test.apigee.net:443/400-demo
<html> <head><title>400 The plain HTTP request was sent to HTTPS port</title></head> <body> <center><h1>400 Bad Request</h1></center> <center>The plain HTTP request was sent to HTTPS port</center> <hr><center>server</center> </body> </html>
- Trong yêu cầu mẫu ở trên, lưu ý rằng yêu cầu HTTP được gửi đến bí danh máy chủ lưu trữ
myorg-test.apigee.nettrên cổng bảo mật443. Đây là nguyên nhân gây ra lỗi400 Bad Request.
Độ phân giải
Bạn cần xác minh xem máy khách có đang sử dụng HTTP thay vì HTTPs hay không và đưa ra yêu cầu chính xác như minh hoạ bên dưới:
Yêu cầu API mẫu:
curl https://org-test.apigee.net:443/400-demo
hoặc
curl https://org-test.apigee.net/400-demo
< HTTP/1.1 200 OK < Date: Thu, 25 Feb 2021 13:01:43 GMT < Content-Type: text/xml;charset=UTF-8 < Content-Length: 403 < Connection: keep-alive < Server: gunicorn/19.9.0 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true
Nguyên nhân: Yêu cầu HTTP đến một điểm cuối mục tiêu được định cấu hình TLS
Lỗi này xảy ra nếu bạn định cấu hình không chính xác các yêu cầu HTTP đến một máy chủ phụ trợ hỗ trợ TLS trong điểm cuối đích của một API Proxy.
Chẩn đoán
Hãy làm theo các bước sau để chẩn đoán lỗi bằng công cụ Theo dõi:
- Bật Trace (Theo dõi) trong giao diện người dùng Apigee cho API Proxy bị ảnh hưởng.
- Gửi yêu cầu đến API Proxy.
- Chọn một trong các yêu cầu API không thực hiện được có mã phản hồi
400. - Chuyển qua các giai đoạn khác nhau và xác định nơi xảy ra lỗi.
-
Thông thường, bạn sẽ thấy phản hồi lỗi
400đến từ máy chủ phụ trợ. Tức là bạn sẽ thấy phản hồi lỗi400trong giai đoạn Đã nhận được phản hồi từ máy chủ đích như minh hoạ dưới đây:
-
Xác định điểm cuối mục tiêu mà yêu cầu được thực hiện bằng cách nhấp vào biểu tượng AX (Dữ liệu Analytics được ghi lại) trong dấu vết.

- Lưu ý target.url, chứa giao thức, bí danh máy chủ phụ trợ và đôi khi là số cổng. Cổng được dùng cho URL mục tiêu là
443nhưng giao thức là HTTP. - Xem lại định nghĩa về điểm cuối mục tiêu để hiểu rõ cấu hình.
-
Xác minh rằng máy chủ lưu trữ phụ trợ an toàn và đang nghe trên một cổng an toàn, chẳng hạn như
443. Nếu bạn đang sử dụng giao thức dưới dạnghttptrong phần tử<URL>, thì đó là nguyên nhân gây ra vấn đề này.Cấu hình điểm cuối mục tiêu mẫu:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <TargetEndpoint name="default"> <Description/> <FaultRules/> <PreFlow name="PreFlow"> <Request/> <Response/> </PreFlow> <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <Flows/> <HTTPTargetConnection> <Properties/> <URL>http://somehost.org:443/get</URL> </HTTPTargetConnection> </TargetEndpoint>Ví dụ trên cho thấy bạn đang sử dụng giao thức HTTP, nhưng cổng được dùng là cổng bảo mật
443. Điều này khiến máy chủ phụ trợ phản hồi bằng400 Bad Requestvà thông báo lỗiThe plain HTTP request was sent to HTTPS port.
Độ phân giải
-
Nếu máy chủ phụ trợ của bạn được bảo mật/hỗ trợ TLS, hãy đảm bảo rằng bạn sử dụng giao thức này dưới dạng
httpstrong phần tử<URL>của điểm cuối đích như trong ví dụ sau:Cấu hình điểm cuối mục tiêu mẫu:
<HTTPTargetConnection> <Properties/> <URL>https://somehost.org:443/get</URL> </HTTPTargetConnection> -
Nếu máy chủ phụ trợ của bạn không an toàn, thì:
- Không đề cập đến số cổng bảo mật, chẳng hạn như
443. - Bạn không cần đề cập đến số cổng nếu máy chủ phụ trợ của bạn theo dõi trên một cổng không bảo mật tiêu chuẩn
- Đề cập đến số cổng nếu bạn đang sử dụng bất kỳ cổng không an toàn nào khác, ví dụ::
9080
Cấu hình điểm cuối mục tiêu mẫu:
<HTTPTargetConnection> <Properties/> <URL>http://somehost.org/get</URL> </HTTPTargetConnection> or <HTTPTargetConnection> <Properties/> <URL>http://somehost.org:9080/get</URL> </HTTPTargetConnection> - Không đề cập đến số cổng bảo mật, chẳng hạn như
Nguyên nhân: Cấu hình máy chủ đích không chính xác
Nếu máy chủ đích được định cấu hình bằng một cổng bảo mật như 443 mà không bật SSL, thì Bộ xử lý thông báo của Apigee Edge sẽ gửi các yêu cầu HTTP đến một máy chủ đích được định cấu hình TLS hoặc bảo mật, dẫn đến vấn đề này.
Chẩn đoán
Hãy làm theo các bước sau để chẩn đoán lỗi bằng công cụ Theo dõi:
- Bật Trace (Theo dõi) trong giao diện người dùng Apigee cho API Proxy bị ảnh hưởng.
- Gửi yêu cầu đến API Proxy.
- Chọn một trong các yêu cầu API không thực hiện được có mã phản hồi
400. - Chuyển qua các giai đoạn khác nhau và xác định nơi xảy ra lỗi.
-
Thông thường, bạn sẽ thấy phản hồi lỗi
400đến từ máy chủ phụ trợ. Tức là bạn sẽ thấy phản hồi lỗi400trong giai đoạn Đã nhận được phản hồi từ máy chủ đích như minh hoạ dưới đây:
-
Xác định điểm cuối mục tiêu mà yêu cầu được thực hiện bằng cách nhấp vào biểu tượng AX (Dữ liệu Analytics được ghi lại) trong dấu vết.

-
Ghi lại target.name, đại diện cho tên điểm cuối đích.
Trong tệp theo dõi ví dụ ở trên, target.name là default. Điều này cho biết rằng điểm cuối đích được dùng cho yêu cầu này là mặc định.
-
Xem lại định nghĩa về điểm cuối mục tiêu để hiểu rõ cấu hình.
Cấu hình điểm cuối mục tiêu mẫu:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <TargetEndpoint name="default"> <Description/> <FaultRules/> <PreFlow name="PreFlow"> <Request/> <Response/> </PreFlow> <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <Flows/> <HTTPTargetConnection> <Properties/> <LoadBalancer> <Server name="faulty-target"/> </LoadBalancer> </HTTPTargetConnection> </TargetEndpoint>Cấu hình điểm cuối đích mẫu ở trên cho thấy bạn đang sử dụng một máy chủ đích có tên là
faulty-target. -
Sau khi có tên máy chủ đích, bạn có thể dùng một trong các phương thức sau để kiểm tra cấu hình máy chủ đích:
- Giao diện người dùng Edge
- API Quản lý
Giao diện người dùng Edge
- Chuyển đến Apigee Edge > Quản trị > Môi trường > Máy chủ đích.
- Chọn máy chủ đích cụ thể được xác định từ proxy API rồi nhấp vào Chỉnh sửa.
- Xác minh cổng được chỉ định cho máy chủ đích và thông tin SSL.
-
Nếu máy chủ đích được định cấu hình bằng một cổng bảo mật (ví dụ:
443), nhưng SSL không được bật, thì đó là nguyên nhân gây ra vấn đề này.
Như bạn có thể thấy trong ảnh chụp màn hình ở trên, cổng được dùng là
443nhưng SSL không được bật cho cổng đó trong cấu hình máy chủ đích. Điều này khiến Trình xử lý thông báo của Apigee Edge gửi các yêu cầu HTTP đến cổng bảo mật443. Do đó, bạn sẽ gặp lỗi400 Bad Requestvới thông báoThe plain HTTP request was sent to HTTPS port.
API Quản lý
-
Thực thi API Lấy máy chủ đích để lấy thông tin chi tiết về cấu hình máy chủ đích cụ thể như minh hoạ bên dưới:
Người dùng Đám mây công khai:
curl -v 'https://api.enterprise.apigee.com/v1/organizations/ORG_NAME/environments/ENV_NAME>/targetservers/TARGET_SERVER_NAME' \ -H "Content-Type:application/xml" \ -H "Authorization:Bearer $TOKEN"
Người dùng Đám mây riêng:
curl -v 'http://MANAGEMENT_IP:8080/v1/organizations/ORG_NAME/environments/ENV_NAME/targetservers/TARGET_SERVER_NAME' \ -H "Content-Type:application/xml" \ -H "Authorization:Bearer $TOKEN"
- Xác minh cổng được chỉ định cho máy chủ đích và thông tin SSL.
-
Nếu máy chủ đích được định cấu hình bằng một cổng bảo mật (ví dụ:
443), nhưng phầnSSLInfokhông được xác định hoặc không được bật, thì đó là nguyên nhân gây ra vấn đề này.Ví dụ về cấu hình máy chủ đích:
{ "host" : "somehost.org", "isEnabled" : true, "name" : "faulty-target", "port" : 443 }Trong đầu ra mẫu ở trên, chúng ta có thể thấy rằng cổng được dùng cho kết nối đích là
443, nhưng không có khối cấu hìnhSSLInfo.Điều này khiến Trình xử lý thông báo của Apigee Edge gửi các yêu cầu HTTP đến cổng bảo mật
443. Do đó, bạn sẽ gặp lỗi400 Bad Requestvới thông báoThe plain HTTP request was sent to HTTPS port.
Độ phân giải
Nếu máy chủ đích của bạn được bảo mật hoặc được định cấu hình TLS, thì bạn cần bật SSL cho máy chủ đích cụ thể.
Bạn có thể thực hiện việc này bằng một trong những cách sau:
- Giao diện người dùng Edge
- API Quản lý
Giao diện người dùng Edge
- Chuyển đến máy chủ đích trên Giao diện người dùng Edge > Quản trị > Môi trường > Máy chủ đích.
- Chọn máy chủ mục tiêu cụ thể rồi nhấp vào Chỉnh sửa.
- Nếu máy chủ đích của bạn an toàn và sử dụng một cổng như
443, hãy bật SSL bằng cách chọn hộp đánh dấu bên cạnh lựa chọn SSL. - Định cấu hình Truststore, Ciphers và Protocols. (Chỉ khi được yêu cầu)
API Quản lý
Sử dụng API quản lý để định cấu hình máy chủ đích như mô tả trong tài liệu Cập nhật cấu hình máy chủ đích.
Phải thu thập thông tin chẩn đoán
Nếu vấn đề vẫn tiếp diễn ngay cả sau khi bạn làm theo hướng dẫn ở trên, hãy thu thập thông tin chẩn đoán sau đây rồi liên hệ với Nhóm hỗ trợ Apigee Edge.
- Nếu bạn là người dùng Đám mây công khai, hãy cung cấp những thông tin sau:
- Tên tổ chức
- Tên môi trường
- Tên proxy API
- Hoàn tất lệnh curl để tái tạo lỗi
- Đầu ra của công cụ theo dõi (nếu bạn có thể ghi lại yêu cầu không thành công)
- Nếu bạn là người dùng Đám mây riêng, hãy cung cấp những thông tin sau:
- Thông báo lỗi hoàn chỉnh đã được ghi nhận
- Tên môi trường
- Gói proxy API
- Định nghĩa máy chủ mục tiêu (nếu bạn đang sử dụng máy chủ mục tiêu trong điểm cuối)
- Đầu ra của công cụ theo dõi (nếu bạn có thể ghi lại yêu cầu không thành công)