Skip to main content

EnvoyのExternal Processing Server開発時のTroubleshooting

前知識

HTTP Method

HTTP MethodHas Request BodyHas Response Body
GETNOYES
HEADNONO
POSTYESYES
PUTYESNO
DELETEMayMay
CONNECTNOYES
OPTIONSNOYES
TRACENONO
PATCHYESYES

304 Not Modified

  • Response Bodyを返しません。

問題の切り分け方法

  • curl -vコマンドでリクエスト方法を固定すること。
    • ブラウザでアクセスした場合、favicon.ico304キャッシュなど複数のリクエストが飛ぶため問題の切り分けが難しくなります。

トラブルシュート

リクエスト時にEnvoyが停止したパターン

AsyncClient 0x5c217f56b080, stream_id_: 7398715439428432216
&stream_info_:
StreamInfoImpl 0x5c217f56b240, protocol_: 1, response_code_: null, response_code_details_: null, health_check_request_: 0, route_name_:
Http2::ConnectionImpl 0x5c217f55c3d0, max_headers_kb_: 60, max_headers_count_: 100, per_stream_buffer_limit_: 268435456, allow_metadata_: 0, stream_error_on_invalid_http_messaging_: 0, is_outbound_flood_monitored_control_frame_: 0, skip_encoding_empty_trailers_: 1, dispatching_: 1, raised_goaway_: 0, pending_deferred_reset_streams_.size(): 0
&protocol_constraints_:
ProtocolConstraints 0x5c217f55c430, outbound_frames_: 0, max_outbound_frames_: 10000, outbound_control_frames_: 0, max_outbound_control_frames_: 1000, consecutive_inbound_frames_with_empty_payload_: 0, max_consecutive_inbound_frames_with_empty_payload_: 1, opened_streams_: 1, inbound_priority_frames_: 0, max_inbound_priority_frames_per_stream_: 100, inbound_window_update_frames_: 1, outbound_data_frames_: 1, max_inbound_window_update_frames_per_data_frame_sent_: 10
Number of active streams: 1, current_stream_id_: 1 Dumping current stream:
stream:
ConnectionImpl::StreamImpl 0x5c217f4ca780, stream_id_: 1, unconsumed_bytes_: 0, read_disable_count_: 0, local_end_stream_: 0, local_end_stream_sent_: 0, remote_end_stream_: 0, data_deferred_: 1, received_noninformational_headers_: 1, pending_receive_buffer_high_watermark_called_: 0, pending_send_buffer_high_watermark_called_: 0, reset_due_to_messaging_error_: 0, cookies_: pending_trailers_to_encode_: null
absl::get<ResponseHeaderMapPtr>(headers_or_trailers_): null
Dumping corresponding downstream request for upstream stream 1:
UpstreamRequest 0x5c217f409600

以下の原因が考えられます。

  1. Response Bodyを指定してはいけないHTTP Method、HTTP Statusに対してProcessing ModeのBUFFEREDなどを指定している。
    1. curl -IHEAD Methodであるため、ResponseBodyを返してはいけません。

ブラウザのローディングが終わらない

  • headerで指定したcontent-lengthの値が実際のResponseBodyのlengthと大きくずれている
    • Google Chromeだと40byte以上ずれていると終わりません。

画像が表示されない

  1. CSPヘッダー(content-security-policy)が付与されており、アクセス時のホストがそれに対応していない。

表示されていない

  1. Response HeaderにAccept Headerのリストに存在しないcontent-encodingが付与されている。