改版履歴

Cente HTTPd/c

【HTTPd修正】

・MD5モジュールの変更
MD5モジュールを削除し、Cente Compact Cryptoに置き換えた。

【HTTPc修正】

・WebSocketクライアントに対応。
WebSocketクライアントに対応した。

・HTTPヘッダの設定追加。
HTTPヘッダでAcceptを設定できるようにした。

・MD5モジュールの変更
MD5モジュールを削除し、Cente Compact Cryptoに置き換えた。

Cente HTTPd/c

【HTTPd修正】

・SSL設定をカスタマイズするAPIを追加。
HTTPS接続時に個別にセッションチケットなどを設定するAPIを追加した。

・HTTPヘッダをカスタマイズするAPIを追加。
独自にレスポンスヘッダを付加したり、独自にリクエストヘッダをパースするAPIを追加した。

・使用メモリ低減
SSLを使用しないセッションでもSSL用のメモリを確保していたので修正した。

・認証ヘッダ解析を修正
認証ヘッダ解析が正しく動作しないことがあるのを修正した。

・軽微な修正
軽微なコード修正を行った。実動作には影響ない。

【HTTPc修正】

・HTTPヘッダをカスタマイズするAPIを追加。
独自にリクエストヘッダを付加したり、独自にレスポンスヘッダをパースするAPIを追加した。

・障害情報 Cente010-0004 を修正。
HTTPScがキープアライブ動作中に再接続に失敗することがあるのを修正した。

・軽微な修正。
軽微なコード修正を行った。実動作には影響ない。

HTTPScがキープアライブ動作中に再接続に失敗する現象について

発行番号: Cente010-0004
Rev: 第1版
発行日: 2020/12/21
題名: HTTPScがキープアライブ動作中に再接続に失敗する現象について

適用製品
・Cente HTTPd/c Ver.1.61

【該当するユーザ環境】
以下の関数をまとめて「httpc_XXX_with_sock()」と記述します。
– httpc_get_with_sock()
– httpc_post_with_sock()
– httpc_put_with_sock()
– httpc_delete_with_sock()

以下の条件をすべて満たした場合、httpc_XXX_with_sock()がエラーでリターンすることがあります。
– httpc_XXX_with_sock()で、HTTPキープアライブ有効かつka_retry=1として自動再接続を有効にして通信する。
– usessl=1としてSSL通信する。
– HTTPサーバがHTTPキープアライブタイムアウトでTCPを切断したあと、httpc_XXX_with_sock()で再接続が発生する。
自動再接続が無効の場合や、SSLを使用しない場合は、該当しません。

【障害内容】
HTTPは、TCP接続のオーバヘッドを減らすために、HTTPキープアライブ機能があります。Cente HTTPcは、httpc_XXX_with_sock()でHTTPキープアライブを使用できます。HTTPキープアライブ有効時でも、HTTPサーバは任意のタイムアウトでTCPを切断します。切断後のhttpc_XXX_with_sock()でka_retry=1として自動再接続を有効にしているとAPI内で再接続します。
再接続時には、API内で通信端点の削除と作成を行いますが、この通信端点のIDをSSL使用時に更新しておらず、以前のIDで通信してエラー(HTTPC_E_CON)になることがありました。
このエラーが発生した場合、httpc_disconnect()でHTTPcを切断して、再度httpc_XXX_with_sock()を呼び出す必要がありました。

【回避方法】
ミドルウェアのソースコードを修正し、通信端点のIDをSSLで正しく使用するようにします。
詳細については、営業担当またはsupport_XXXatmarkXXX_cente.jpまでお問い合わせください(_XXXatmarkXXX_は@にしてください)。

Cente HTTPd/c

【HTTPd修正】
・軽微な修正

ワーニング抑制など軽微なコードの修正を行った。実動作には影響ない。

【HTTPc修正】
・SSL設定をカスタマイズするAPIを追加

HTTPS接続時に個別にSSLバージョンや暗号スイートなどを設定するAPIを追加した。
・TLSセッション再開に対応
二回目以降のHTTPS接続時にTLSハンドシェイク時間を短縮するTLSセッション再開(Session resumption)に対応した。
・軽微な修正
ワーニング抑制、処理の効率化など軽微なコード修正を行った。実動作には影響ない。

【その他】
・ctlibモジュールの更新(Cente障害情報:010-0003)
Cente HTTPd/c Ver1.60同梱のctlibモジュールでは、cttime.cが2038年以降の日付を正しく処理できなかった。ctlibモジュールを更新した。

Cente HTTPd/c

【HTTPd修正】

・MD5のソースコード変更。

MD5の計算をCente Compact Cryptoの関数を使用するようにした。

・Cente SSL非対応。

Cente SSLをサポートから外した。

【HTTPc修正】

・MD5のソースコード変更。

MD5の計算をCente Compact Cryptoの関数を使用するようにした。

・Cente SSL非対応。

Cente SSLをサポートから外した。

・プロトコルスタック非依存化。

プロトコルスタックに依存しないようにTCP関連関数はカスタマイズ部に新設したラッピング関数を呼び出すようにした。

・REST API対応。

REST APIに対応した。

・HEADメソッド対応。

HEADメソッドに対応した。

・204応答受信処理修正。(Cente障害情報:010-0002)

204応答受信時、APIが常にタイムアウトエラーを返していたのを修正した。

Cente HTTPd/c

【HTTPd修正】
・Cente Compact SSLd対応。
Cente Compact SSLdと組み合わせて使用できるようにした。
・HTTPdタスク名変数の使用。
ctacre_tsk()でタスク生成時に指定するタスク名に、HTTPD_TASK_NAME変数が使用されていなかったため、使用するように修正。
・特定の環境におけるビルドエラー対応。
HTTPD_DT_FSYS定義の値が0の場合にサンプルコードでビルドエラーしていた問題を修正した。
・特定の環境におけるワーニング対応。
特定のビルド環境でワーニングがでることがあったので修正した。
【HTTPc修正】
・コード整形。
行末の余分なスペースの削除、タブとスペースの混在を修正した。

Cente HTTPd/c

【HTTPd修正】

受信したヘッダのパースに失敗する事があるバグを修正。
受信したヘッダが、someheader: str=valueのように、"が無くかつ改行が続く場合に、パースに失敗するバグを修正。
(http_common_get_data_from_headerの修正)

 

【HTTPc修正】

プロキシサーバ対応。
プロキシサーバ経由で通信を行えるようにした。(認証、SSLにも対応) 

 

受信したヘッダのパースに失敗する事があるバグを修正。
受信したヘッダが、someheader: str=valueのように、"が無くかつ改行が続く場合に、パースに失敗するバグを修正。
(http_common_get_data_from_headerの修正) 

 

Basic認証が失敗した時に、1回余分にアクセスする事があるバグを修正。
Basicに認証に失敗すると、同じユーザー名・パスワードで再度アクセスを行い、計2回の失敗アクセスを行ってしまう。

 

queryがあった時に、Digest認証できないバグを修正。
queryがあった時のDigest値の計算ルーチンのバグ修正。それにともない、Digest値計算用のテンポラリバッファとして、T_HTTPSOCKETにdigest_uriを追加。

 

use_total_tmoを1にしても、指定した時間でリターンしないバグを修正。
httpc_send_dat()で、タイムアウト値を正しく減算していなかった。

 

httpc_get/post/get_with_sock/post_with_sockの引数チェックを強化。
・引数のヌルポインタチェックを追加。
・T_HTTPC_REQHEADERのuriが空文字列かどうかのチェックを追加。 

 

queryの文字として、0x80-0xffの範囲の文字を使えなかったのを修正。
http_common_url_encode()で、0x80-0xffの範囲の文字を正しく変換できるように修正。

 

queryが内部バッファより長くなると、正しく送信できないバグを修正。
queryのトータル長がT_HTTPSOCKET->tmp_bufのサイズより大きくなると 正しくqueryが送られない。(httpc_url_encode_send()の修正) 

 

Cookieを正しくパースできない事があるバグを修正。
httpc_parse_setcookie()の以下の不具合を修正。
・一行に複数のcookieが,で連結されている場合にパースできない。
・expiresの値を正しく取得できない

 

keepalive可能な場合でも、通信を切ってしまう事があるのを修正。
サーバがHTTP1.1でConnectionヘッダを送ってこない場合には、keep-aliveと見なすべきだが、HTTPc側でkeep-aliveを行わずに通信を切っていた。

 

httpc_get_with_sock()/post_with_sock()で認証方法をAUTH_DIGESTからAUTH_BASIC_ONCEに変更すると、アクセスに失敗する。
最初Digest認証を行った後にAUTH_BASIC_ONCEを指定すると、送られるべきAuthorizationヘッダが送られず、アクセスにに失敗する。

 

送信するCookieの後ろに余分な;が付く。
動作に支障は無いと考えられるが、最後の;を送らないように修正。 

Page 1 of 3