[インデックス 17727] ファイルの概要
このコミットは、Go言語の標準ライブラリである net/http
パッケージのドキュメントファイル src/pkg/net/http/doc.go
に変更を加えています。
コミット
net/http: be clear that HTTPS is supported
Fixes #6443.
R=golang-dev, iant
CC=golang-dev
https://golang.org/cl/14231045
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/1b0bffa9737b906ebf9da3f5062c881431aa6397
元コミット内容
net/http: be clear that HTTPS is supported
Fixes #6443.
R=golang-dev, iant
CC=golang-dev
https://golang.org/cl/14231045
変更の背景
このコミットの背景には、Go言語の net/http
パッケージがHTTPだけでなくHTTPSもサポートしていることを、より明確にドキュメントに記載する必要があるという認識があります。コミットメッセージにある Fixes #6443
は、GoのIssueトラッカーにおける特定の課題(Issue 6443)を解決することを示しています。
当時の net/http
パッケージのドキュメントでは、Get, Head, Post, and PostForm make HTTP requests:
と記述されており、HTTPリクエストのみを扱っているかのような印象を与える可能性がありました。しかし、実際には net/http
パッケージはHTTPSリクエストも透過的に処理する能力を持っていました。
ユーザーや開発者がドキュメントを読んだ際に、HTTPSのサポートについて誤解したり、不明瞭に感じたりするのを避けるため、この記述を修正し、HTTPSもサポートしていることを明示することが目的でした。これにより、パッケージの機能がより正確に伝わり、利用者が安心してHTTPS通信を実装できるようになります。
前提知識の解説
- HTTP (Hypertext Transfer Protocol): ウェブ上でデータを交換するためのプロトコルです。クライアント(ウェブブラウザなど)とサーバー(ウェブサイトなど)の間で情報をやり取りする際のルールを定めています。通常、ポート80を使用します。
- HTTPS (Hypertext Transfer Protocol Secure): HTTPにSSL/TLSプロトコルを組み合わせることで、通信を暗号化し、セキュリティを強化したものです。データの盗聴、改ざん、なりすましを防ぐことができます。通常、ポート443を使用します。
- SSL/TLS (Secure Sockets Layer / Transport Layer Security): インターネット上でデータを安全に送受信するための暗号化プロトコルです。通信の暗号化、サーバーの認証、データの完全性保証を提供します。HTTPSはTLSの上に構築されています。
- Go言語の
net/http
パッケージ: Go言語の標準ライブラリの一部で、HTTPクライアントとサーバーの実装を提供します。このパッケージを使用することで、ウェブサーバーの構築や、他のウェブサービスへのHTTP/HTTPSリクエストの送信を簡単に行うことができます。Goのnet/http
パッケージは、内部的にcrypto/tls
パッケージを利用してTLS/SSL通信を処理するため、HTTPSのサポートは組み込まれています。 - Goのドキュメント (
doc.go
): Go言語のパッケージには、doc.go
というファイルが含まれることがあります。このファイルは、パッケージ全体の概要や使用方法、主要な関数や型の説明などを記述するためのもので、go doc
コマンドやGoの公式ドキュメントサイトで表示される情報源となります。
技術的詳細
Goの net/http
パッケージは、その設計上、HTTPとHTTPSの両方を透過的に扱うことができます。これは、http.Get
や http.Post
といった関数が、与えられたURLスキーム(http://
または https://
)に基づいて自動的に適切なプロトコルを選択するためです。
具体的には、URLが https://
で始まる場合、net/http
パッケージは内部的にGoの crypto/tls
パッケージを利用してTLSハンドシェイクを行い、暗号化された通信チャネルを確立します。このプロセスは、開発者が明示的にTLS設定をカスタマイズしない限り、自動的に行われます。
このコミットが行われた2013年時点でも、net/http
パッケージはHTTPSをサポートしていました。しかし、ドキュメントの記述が HTTP requests
となっていたため、新規ユーザーや既存ユーザーがHTTPSのサポートについて疑問を持つ可能性がありました。この変更は、コードの動作を変更するものではなく、あくまでドキュメントの正確性を向上させ、ユーザーの混乱を避けるためのものです。
ドキュメントの修正は、パッケージの機能が完全に理解され、適切に利用されるために非常に重要です。特にセキュリティに関わるHTTPSのサポートは、明示的に記載されることで、開発者が安全なアプリケーションを構築する際の信頼性を高めます。
コアとなるコードの変更箇所
--- a/src/pkg/net/http/doc.go
+++ b/src/pkg/net/http/doc.go
@@ -5,7 +5,7 @@
/*
Package http provides HTTP client and server implementations.
-Get, Head, Post, and PostForm make HTTP requests:
+Get, Head, Post, and PostForm make HTTP (or HTTPS) requests:
resp, err := http.Get("http://example.com/")
...
コアとなるコードの解説
変更は src/pkg/net/http/doc.go
ファイルの1行のみです。
- 変更前:
Get, Head, Post, and PostForm make HTTP requests:
- 変更後:
Get, Head, Post, and PostForm make HTTP (or HTTPS) requests:
この変更は、net/http
パッケージの主要なクライアント関数である Get
, Head
, Post
, PostForm
が、HTTPリクエストだけでなく、HTTPSリクエストも処理できることを明確に示しています。括弧内に (or HTTPS)
を追加することで、パッケージの機能がより包括的であることを一目で理解できるようになりました。
これは、コードの振る舞いを変更するものではなく、既存の機能に対するドキュメントの記述を改善し、ユーザーがパッケージの能力を正確に把握できるようにするための、純粋なドキュメントの修正です。
関連リンク
- Go Issue #6443: https://github.com/golang/go/issues/6443 (このコミットが解決したIssue)
- Go Code Review (CL) 14231045: https://golang.org/cl/14231045 (このコミットのコードレビューページ)
参考にした情報源リンク
- Go
net/http
package documentation: https://pkg.go.dev/net/http - Go
crypto/tls
package documentation: https://pkg.go.dev/crypto/tls - medium.com - Go HTTP Server with TLS: https://medium.com/@jasonhaxstuff/go-http-server-with-tls-1-2-and-1-3-a92a7202274c
- opensource.com - How to set up an HTTPS server in Go: https://opensource.com/article/20/10/go-https-server
- go.dev - HTTP/2 support in Go: https://go.dev/blog/http2
- stackoverflow.com - Go dynamic certificate reloading: https://stackoverflow.com/questions/41094469/golang-hot-reload-tls-certificate