為何瀏覽器不支援 SRV Record?

前言

這問題在唸書時期也曾困擾我,前陣子被客戶問到這問題,雖然可以以 out of scope 打發他,不過實在太好奇了還是幫他找了一下。

什麼是 SRV Record

DNS Record 的一種 Type,定義在 RFC 2782,描述了 服務名稱、使用的協定、port、優先權、權重等等。

_service._proto.name. ttl IN SRV priority weight port target.

聽起來很美好,在 SIP 協議中經常使用,那對於目前最常用的 HTTP 協定為何卻很少人用呢?

IETF Draft

其實在 2000 年時 IETF 就有一份草稿 HTTP host and port selection using URIs and SRV RRs,2002 年時更新為 Use of SRV records in conjuction with HTTP and URIs,2014 年又有更新 Use of SRV records in conjuction with HTTP and URIs" draft-andrews-http-srv-02。在 2014 年這份就寫出了一些原因,但我覺得仍不太充分。

我自己的看法

使用 Virtual Hosting 技術,只需要看 Host Header、SNI 就可以知道該對應到哪個網站,使得目前有限的 IPv4 地址仍組以應付當前 10 億多個網站的架站需求(IPv4 總共 42 億個地址,還得扣掉保留的),自然減少了對 SRV record 的需求。

事實上,cURL 有個 SRV record 的 TODO 但一直沒人去實作,我想 Chrome、Firefox 也可以實作只是沒有太大的需求。

如果有興趣的人,或許可以先嘗試送一個 PR 給 cURL 看看,但主流瀏覽器我想不會接受,因為目前用 SRV 的案例實在不多,如果每次查完 A、AAAA、CNAME 後看到 NXDOMAIN 後,還得多查 SRV 其實有點浪費時間。

網路上其他人的看法


comments powered by Disqus