Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 19072] ファイルの概要

このコミットは、Go言語の公式ドキュメントの一部である doc/go1.3.html ファイルに対する変更です。具体的には、Go 1.3 リリースで導入された net/http パッケージの二つの重要な新機能、Response.TLS フィールドと Server.ErrorLog フィールドに関する記述を追加しています。これは、Go 1.3 のリリースノートにこれらの機能が正式に記載されるようにするためのドキュメント更新コミットです。

コミット

  • コミットハッシュ: 4f193cdc5d828a246d6a8cab3c34e8c5b89d6f08
  • 作者: Brad Fitzpatrick bradfitz@golang.org
  • コミット日時: 2014年4月8日 火曜日 19:46:33 -0700
  • コミットメッセージ:
    doc: add a couple net/http go1.3 items

    LGTM=r
    R=r
    CC=golang-codereviews
    https://golang.org/cl/85760043

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/4f193cdc5d828a246d6a8cab3c34e8c5b89d6f08

元コミット内容

doc: add a couple net/http go1.3 items

LGTM=r
R=r
CC=golang-codereviews
https://golang.org/cl/85760043

変更の背景

このコミットの背景には、Go 1.3 のリリースに向けた準備があります。Go言語の開発チームは、新しいバージョンがリリースされる際に、そのバージョンで導入された新機能や変更点を公式ドキュメント(リリースノート)にまとめる作業を行います。このコミットは、net/http パッケージにおける重要な機能追加である Response.TLSServer.ErrorLog が Go 1.3 で利用可能になったことをユーザーに知らせるために、そのドキュメントを更新するものです。

以前のバージョンでは、HTTPクライアントがTLS(HTTPS)接続を行った際に、その接続の詳細情報(使用されたTLSバージョン、暗号スイート、サーバー証明書など)を直接取得する方法が提供されていませんでした。また、HTTPサーバーのエラーロギングも、標準エラー出力に限定されており、開発者がカスタムのロギングメカニズムを導入する際の柔軟性が不足していました。Go 1.3 ではこれらの点が改善され、その変更が公式にアナウンスされる必要がありました。

コミットメッセージ中の TODO コメントは、これらの機能が既に実装されているか、実装が完了に近づいており、Go 1.3 のリリースノートに含めるべき項目としてマークされていたことを示唆しています。

前提知識の解説

Go言語

Go(Golang)は、Googleによって開発されたオープンソースのプログラミング言語です。静的型付け、コンパイル型言語でありながら、動的言語のような開発のしやすさを目指しています。並行処理を言語レベルでサポートする「Goroutine」や「Channel」といった特徴を持ち、ネットワークサービスや分散システムの開発に強みを発揮します。

net/http パッケージ

net/http パッケージは、Go言語の標準ライブラリの一部であり、HTTPクライアントとサーバーの実装を提供します。これにより、開発者はWebアプリケーションやAPIサーバーを簡単に構築できます。このパッケージは、HTTP/1.1のフルサポートに加え、HTTP/2のサポートも提供し、TLS(HTTPS)通信も容易に扱えます。

TLS (Transport Layer Security)

TLSは、インターネット上で安全な通信を行うための暗号化プロトコルです。WebブラウザとWebサーバー間の通信(HTTPS)や、電子メール、VoIPなどの様々なアプリケーションで利用されています。TLSは、通信の盗聴、改ざん、なりすましを防ぐために、暗号化、認証、データ整合性の機能を提供します。TLSハンドシェイクと呼ばれるプロセスを通じて、クライアントとサーバーは安全な通信チャネルを確立します。

ロギング

ロギングは、ソフトウェアの実行中に発生するイベント(エラー、警告、情報など)を記録するプロセスです。これにより、開発者や運用担当者は、アプリケーションの動作状況を把握し、問題の診断やデバッグを行うことができます。適切なロギングは、システムの安定性と信頼性を確保するために不可欠です。

技術的詳細

このコミットは、Go 1.3 で導入された net/http パッケージの二つの重要な拡張機能に関するドキュメントの追加です。

Response.TLS フィールド

Go 1.3 以降、net/http パッケージの http.Response 構造体には、新たに TLS フィールドが追加されました。このフィールドは *crypto/tls.ConnectionState 型であり、クライアントがHTTPリクエストを行う際に使用されたTLS接続の詳細なプロパティを公開します。

crypto/tls.ConnectionState 構造体には、以下のような情報が含まれます。

  • Version: 使用されたTLSプロトコルのバージョン(例: TLS 1.2、TLS 1.3)。
  • CipherSuite: TLS接続で使用された暗号スイート(例: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256)。
  • PeerCertificates: サーバーから提示された証明書のチェーン。これにより、サーバーの身元を確認し、証明書の有効性や発行元を検証できます。
  • VerifiedChains: 信頼されたルート証明書によって検証された証明書チェーン。
  • HandshakeComplete: TLSハンドシェイクが完了したかどうかを示すブール値。

この Response.TLS フィールドの導入により、GoのHTTPクライアントは、HTTPS通信のセキュリティパラメータをプログラム的に検査できるようになりました。例えば、特定のTLSバージョンや暗号スイートが使用されているかを確認したり、サーバー証明書の詳細を検証したりすることが可能になります。これは、セキュリティ監査や、より厳格なセキュリティポリシーを適用する必要があるアプリケーションにとって非常に有用です。

Server.ErrorLog フィールド

Go 1.3 以降、net/http パッケージの http.Server 構造体には、新たに ErrorLog フィールドが追加されました。このフィールドは *log.Logger 型であり、HTTPサーバーが内部で発生したエラーを記録するためのオプションのロガーを設定できます。

以前のバージョンでは、http.Server はエラーを常に標準エラー出力(stderr)に直接出力していました。ErrorLog フィールドが導入されたことで、開発者は独自の log.Logger インスタンスを http.Server に設定し、エラーログの出力先、フォーマット、および処理方法をカスタマイズできるようになりました。

Server.ErrorLog にエラーが記録される典型的なシナリオには、以下のようなものがあります。

  • 新しい接続を受け入れる際のエラー。
  • HTTPハンドラ内で発生したパニック。
  • 基盤となるファイルシステムの問題。
  • TLSハンドシェイク中のエラー。
  • 接続がハイジャックされた後に、レスポンスに非空のデータを書き込もうとした場合。
  • 無効な Content-Length ヘッダー。
  • 同じレスポンスに対して WriteHeader(code int) を複数回呼び出した場合。

ErrorLog を設定しない場合(デフォルト値は nil)、エラーは引き続き log パッケージの標準ロガー(デフォルトではstderrに出力)を使用して記録されます。この機能により、開発者はアプリケーション全体のロギング戦略とHTTPサーバーのエラーロギングを統合し、ログの集約、監視、分析を容易に行えるようになります。

コミットメッセージ中のCL番号について

コミットメッセージ中に記載されている CL 52660047CL 70250044 は、Goプロジェクトの内部的な変更リスト(Change List)番号であると考えられます。これらの番号は、GoのコードレビューシステムであるGerritで変更を追跡するために使用されます。公開されているGoのコミット履歴やGerritの検索では、これらの特定のCL番号が直接 net/http の関連変更として見つからない場合があります。これは、CL番号が内部的に再割り当てされたり、特定の変更が複数のCLに分割されたり、あるいは単に公開されていない内部的な参照であるためと考えられます。このコミットの目的は、これらの機能がGo 1.3で利用可能になったことをドキュメントに反映させることであるため、個々のCLの具体的な内容を追跡することは、このドキュメント更新の文脈では二次的な重要性しか持ちません。

コアとなるコードの変更箇所

このコミットは、doc/go1.3.html ファイルの以下の部分を変更しています。

--- a/doc/go1.3.html
+++ b/doc/go1.3.html
@@ -227,9 +227,18 @@ The formatted print functions of the <code>fmt</code> package now define <code>%\n as a synonym for <code>%f</code> when printing floating-point values.\n </li>\n \n-<li> TODO: net/http: add Request.TLS (CL 52660047)</li>
+<li>
+The <a href="/pkg/net/http/"><code>net/http</code></a> package now exposes the
+the properties of a TLS connection used to make a client request in the new
+<a href="/pkg/net/http/#Response"><code>Response.TLS</code></a> field.
+</li>
 \n-<li> TODO: net/http: add Server.ErrorLog; log and test TLS handshake errors (CL 70250044)</li>
+<li>
+The <a href="/pkg/net/http/"><code>net/http</code></a> package now
+allows setting an optional server error logger
+with <a href="/pkg/net/http/#Server"><code>Server.ErrorLog</code></a>.
+The default is still that all errors go to stderr.
+</li>
 \n <li> TODO: net/http: add Server.SetKeepAlivesEnabled (CL 69670043)</li>
 \n 

具体的には、以下の2つの TODO コメントが、実際の機能説明のHTMLスニペットに置き換えられています。

  1. TODO: net/http: add Request.TLS (CL 52660047) が、Response.TLS フィールドに関する説明に置き換えられました。
    <li>
    The <a href="/pkg/net/http/"><code>net/http</code></a> package now exposes the
    the properties of a TLS connection used to make a client request in the new
    <a href="/pkg/net/http/#Response"><code>Response.TLS</code></a> field.
    </li>
    
  2. TODO: net/http: add Server.ErrorLog; log and test TLS handshake errors (CL 70250044) が、Server.ErrorLog フィールドに関する説明に置き換えられました。
    <li>
    The <a href="/pkg/net/http/"><code>net/http</code></a> package now
    allows setting an optional server error logger
    with <a href="/pkg/net/http/#Server"><code>Server.ErrorLog</code></a>.
    The default is still that all errors go to stderr.
    </li>
    

コアとなるコードの解説

このコミットにおける「コアとなるコード」は、Go 1.3 のリリースノートを構成するHTMLファイル doc/go1.3.html の変更です。このHTMLファイルは、Go言語の公式ウェブサイトで公開されるGo 1.3 の新機能の概要ページの一部となります。

変更されたHTMLスニペットは、以下の重要な情報をユーザーに伝えます。

  • Response.TLS の導入: net/http パッケージが、クライアントリクエストに使用されたTLS接続のプロパティを新しい Response.TLS フィールドを通じて公開するようになったこと。これにより、開発者はHTTPS通信の詳細をプログラムで検査できるようになります。
  • Server.ErrorLog の導入: net/http パッケージが、オプションのサーバーエラーロガーを Server.ErrorLog フィールドで設定できるようになったこと。これにより、サーバーのエラー処理の柔軟性が向上し、カスタムロギングシステムとの統合が容易になります。また、デフォルトの動作(エラーが引き続き標準エラー出力に送られること)も明記されています。

これらの変更は、Go 1.3 のリリースノートの重要な一部として機能し、Goユーザーが新しいAPIの存在と基本的な目的を迅速に理解できるようにします。これにより、開発者はこれらの新機能を自身のアプリケーションに組み込むための第一歩を踏み出すことができます。

関連リンク

参考にした情報源リンク