Proposal: IDNA Browsers Advertising Capability in User-Agent header

This is a proposal to the major browser producers supporting IDNA to advertise their IDN capabilities. One way of doing it is to include a token in the User-Agent HTTP request header. According to RFC2616, the User-Agent header is used for

“statistical purposes, the tracing of protocol violations, and automated recognition of user agents for the sake of tailoring responses to avoid particular user agent limitations.”

This will serve at least 2 purposes:

1. Allows web sites to encode anchor URLs in the native page encoding or HTML entities (&#xXXXX;) for clients that advertises IDNA support. For other clients, punycode can be used for baseline compatibility.

2. Provides IDN versioning information. There have been sprouts of discussions over the next version of Nameprep profile (or even a new IDNA, maybe even a new IDN solution). This would be a good preparation for things to come, regardless of which direction the future takes us.

Below are some examples of popular browser User-Agent strings I pulled from my logs (and my proposed addition):

Firefox: *
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4 IDN/RFC3490

Googlebot (which I believe is IDNA compliant):
Mozilla/5.0 (compatible; Googlebot/2.1;+http://www.google.com/bot.html) IDN/RFC3490

Internet Explorer 6:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727) IDN/RFC3490

Opera:
Mozilla/4.0 (compatible; MSIE 5.0; Windows ME) Opera 5.11 [en] IDN/RFC3490

Safari:
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/312.8 (KHTML, like Gecko) Safari/312.6 IDN/RFC3490

Other possibilities for advertising this capability exists, such as a custom header X-IDN-Version. The same information could possibly be exported to Javascript via the navigator.userAgent field, or some other custom Javascript API (this is more an example of what should NOT be done rather than a recommendation.)

* To achieve the result in Firefox, type this into the URL bar (in a single line):

javascript:Components.classes["@mozilla.org/preferences-service;1"].getService()
.QueryInterface(Components.interfaces.nsIPrefBranch)
.setCharPref("general.useragent.extra.idna","IDNA/RFC3490");

This should take effect immediately. Go to http://www.wannabrowser.com/ and verify that “IDNA/RFC3490” is displayed in the “HTTP User Agent” box.



Comments are closed.