Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến
Tài liệu về Apigee X. thông tin
Triệu chứng
Ứng dụng 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 đây:
HTTP/1.1 400 Bad Request
Theo sau 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ột máy chủ ảo được định cấu hình TLS | Người dùng Edge công khai và riêng tư |
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ột máy chủ phụ trợ đã bật TLS trong điểm cuối đích. | Người dùng Edge công khai và riêng tư |
Cấu hình máy chủ mục tiêu 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 công khai và riêng tư |
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ủ lưu trữ ảo được định cấu hình để sử dụng SSL và thay vào đó sẽ nhận yêu cầu HTTP.
Chẩn đoán
Vì vấn đề này xảy ra trên Điểm cuối hướng bắc và các yêu cầu API không thành công tại điểm tương tác điểm vào giữa ứng dụng khách và Bộ định tuyến, những thông báo lỗi này không được ghi lại trong bộ định tuyến NGINX nhật ký truy cập. Do đó, những yêu cầu này sẽ không được ghi nhận trong các công cụ như Giám sát API và công cụ Theo dõi.
-
Xác minh yêu cầu API của bạn và xem liệu bạn có đang thực hiện yêu cầu HTTP cho bí danh máy chủ lưu trữ hay không đượ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
443
. Nếu có, thì đó là nguyên nhân của vấn đề.Ví dụ về yêu cầu API 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.net
trên cổng bảo mật443
. Đây là nguyên nhân dẫn đến400 Bad Request
lỗi.
Độ phân giải
Bạn cần xác minh xem máy khách có đang sử dụng HTTP thay vì HTTP hay không và đưa ra yêu cầu chính xác như được hiển thị 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 đích đượ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 cho một phần phụ trợ có bật TLS trong điểm cuối đích của Proxy API.
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 trong giao diện người dùng Apigee cho Proxy API bị ảnh hưởng.
- Gửi yêu cầu đến Proxy API.
- Chọn một trong các yêu cầu API không thực hiện được bằng mã phản hồi
400
. - Xem 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
từ máy chủ phụ trợ. Tức là bạn sẽ thấy phản hồi lỗi400
trong giai đoạn Phản hồi đã nhận được từ máy chủ mục tiêu 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 AX biểu tượng (Đã ghi dữ liệu Analytics) trong dấu vết.
- Hãy lưu ý rằng target.url chứa giao thức, bí danh máy chủ lưu trữ của máy chủ phụ trợ,
và đôi khi là số cổng. Cổng được dùng cho
URL mục tiêu là
443
nhưng giao thức là HTTP. - Xem định nghĩa về điểm cuối mục tiêu để nắm được cấu hình.
-
Xác minh rằng máy chủ lưu trữ của máy chủ phụ trợ được bảo mật và theo dõi trên một cổng bảo mật, chẳng hạn như
443
. Nếu bạn đang sử dụng giao thức làhttp
trong phần tử<URL>
, thì đó là nguyên nhân gây ra vấn đề này.Cấu hình thiết bị đầu cuối đích 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 sử dụng là cổng bảo mật cổng
443
. Việc này khiến máy chủ phụ trợ phản hồi400 Bad Request
và 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ó hỗ trợ TLS/bảo mật, hãy đảm bảo rằng bạn sử dụng giao thức
https
trong phần tử<URL>
của điểm cuối mục tiêu như minh hoạ trong ví dụ sau:Cấu hình thiết bị đầu cuối đích 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 bảo mật, thì:
- Đừng đề cập đến số cổng an toàn như
443
. - Bạn không cần phải đề cập đến số cổng nếu máy chủ phụ trợ của bạn nghe 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 thiết bị đầu cuối đích mẫu:
<HTTPTargetConnection> <Properties/> <URL>http://somehost.org/get</URL> </HTTPTargetConnection> or <HTTPTargetConnection> <Properties/> <URL>http://somehost.org:9080/get</URL> </HTTPTargetConnection>
- Đừng đề cập đến số cổng an toàn như
Nguyên nhân: Cấu hình máy chủ mục tiêu 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ì Dịch vụ này sẽ khiến Trình xử lý tin nhắn của Apigee Edge gửi yêu cầu HTTP đến một
Máy chủ đích được định cấu hình TLS dẫn đến sự cố 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 trong giao diện người dùng Apigee cho Proxy API bị ảnh hưởng.
- Gửi yêu cầu đến Proxy API.
- Chọn một trong các yêu cầu API không thực hiện được bằng mã phản hồi
400
. - Xem 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
400
phản hồi lỗi từ máy chủ phụ trợ. Tức là bạn sẽ thấy phản hồi lỗi400
trong giai đoạn Phản hồi đã nhận được từ máy chủ mục tiêu 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 AX biểu tượng (Đã ghi dữ liệu Analytics) trong dấu vết.
-
Hãy lưu ý rằng target.name, đại diện cho tên điểm cuối mục tiêu.
Trong tệp theo dõi mẫu ở trên, target.name là mặc định. Điều này cho biết rằng điểm cuối đích dùng cho yêu cầu này là mặc định.
-
Xem định nghĩa về điểm cuối mục tiêu để nắm được cấu hình.
Cấu hình thiết bị đầu cuối đích 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 mục tiêu mẫu ở trên cho thấy rằng bạn đang sử dụng máy chủ mục tiêu có tên là
faulty-target
. -
Sau khi có tên máy chủ mục tiêu, bạn có thể sử dụng một trong các phương pháp sau để kiểm tra cấu hình máy chủ mục tiêu:
- 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ủ mục tiêu.
- Chọn máy chủ mục tiêu cụ thể được xác định từ proxy API và 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 của vấn đề này.Như bạn có thể thấy trong ảnh chụp màn hình ở trên, cổng được sử dụng là
443
nhưng SSL thì không được bật cho cổng đó trong cấu hình máy chủ mục tiêu. Việc này dẫn đến Tin nhắn của Apigee Edge Bộ xử lý gửi yêu cầu HTTP đến cổng bảo mật443
. Do đó, bạn sẽ nhận được lỗi400 Bad Request
với thông báoThe plain HTTP request was sent to HTTPS port
.
API quản lý
-
Thực thi Tải API máy chủ mục tiêu để nhận thông tin chi tiết về cấu hình máy chủ mục tiêu cụ thể như minh hoạ dưới đây:
Người dùng Cloud 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 Cloud riêng tư:
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ầnSSLInfo
không được xác định hoặc không được bật, thì đó là nguyên nhân vấn đề này.Cấu hình máy chủ mục tiêu mẫu:
{ "host" : "somehost.org", "isEnabled" : true, "name" : "faulty-target", "port" : 443 }
Trong kết quả 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
.Việc này khiến Trình xử lý tin nhắn của Apigee Edge gửi yêu cầu HTTP đến cổng bảo mật
443
. Do đó, bạn gặp lỗi400 Bad Request
vớ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 theo TLS, thì bạn cần bật SSL cho máy chủ đích.
Bạn có thể thực hiện việc này bằng cách sử dụng một trong các tuỳ chọn 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ủ mục tiêu trên Edge UI > Quản trị > Môi trường > Máy chủ mục tiêu.
- 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 bảo mật và sử dụng một cổng như
443
, hãy bật SSL bằng cách hãy chọn hộp kiểm bên cạnh tuỳ chọn SSL. - Định cấu hình Truststore, Ciphers và protocols (Giao thức). (Chỉ khi cần)
API quản lý
Sử dụng API quản lý để định cấu hình máy chủ mục tiêu theo mô tả trong Cập nhật tài liệu về cấu hình máy chủ đích.
Phải thu thập thông tin chẩn đoán
Nếu sự cố vẫn tiếp diễn ngay cả sau khi đã làm theo các hướng dẫn trên, hãy thu thập những thông tin sau thông tin chẩn đoán rồi liên hệ với Bộ phận hỗ trợ Apigee Edge.
- Nếu bạn là người dùng Public Cloud, 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 hiện lỗi
- Kết quả đầu ra của công cụ theo dõi (nếu bạn có thể thu thập dữ liệu cho yêu cầu không thành công)
- Nếu bạn là người dùng Đám mây riêng tư, hãy cung cấp các thông tin sau:
- Đã phát hiện thấy thông báo lỗi hoàn chỉnh
- 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ủ đích trong điểm cuối)
- Kết quả đầu ra của công cụ theo dõi (nếu bạn có thể thu thập dữ liệu cho yêu cầu không thành công)