我正在编写 DNS-over-HTTPS 服务器,它应该解析自定义名称,而不仅仅是将它们代理到其他 DoH 服务器,如 Google 的。我无法正确解码请求的正文。
例如,我得到请求正文,即二进制格式,特别是在 Uint8 ArrayBuffer 类型的 javascript 中。我正在使用以下代码来获取数组的 base64 格式:
function _arrayBufferToBase64(buffer) {
var binary = '';
var bytes = new Uint8Array(buffer);
var len = bytes.byteLength;
for (var i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[i]);
}
return btoa(binary);
}
结果我得到了这样的结果:
AAABAAABAAAAAAABCmFwbngtbWF0Y2gGZG90b21pA2NvbQAAAQABAAApEAAAAAAAAE4ADABKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
现在,根据RCF8484标准,这应该被解码为 base64url,但是当我这样解码时,我得到以下信息:
apnx-matchdotomicom)NJ
我还使用了这个“教程”作为参考,但它们也解码了类似格式的 blob,我得到了与以前类似的废话。
互联网上几乎没有关于此类信息的信息,如果有任何帮助,DoH 标准使用应用程序/dns-message 媒体类型作为正文。
如果有人对我做错了什么或如何编辑问题以使其更清楚有一些见解,请帮助我,欢呼:)