Life Lab

Life Lab

Thoughts, stories and ideas.

javascript

unicode in JS

写的是unicode in JS,实际in js的部分不多,更多的是unicode原理。 两个重要概念 * code point:在Unicode空间中,一个具体的字符所在位置 * code unit:用来编码一个code point的数量,例如UTF8,使用1-4个code unit来编码一个Unicode code point。 Unicode now 现在的Unicode共占用21个二进制位,它们被分割成了17个plane,每个plane占用16个二进制位。举例几个plane: plane 0: 0x0000-0xFFFF,Base Multilingual Plane (BMP) plane 1: Supplementary Multilingual Plane (SMP) plane 2: Supplementary Ideographic Plane (SIP) UTF-x UTF-32,使用32个二进制位表示unicode code point,
1 min read
javascript

number in Javascript

最近在看《Impatient JS》,熟悉的地方快快略过,看到了JS中的数字,现在来看有: * number * bigint number number很神奇,可以是整数,也可以是浮点数,所以number的实现,其实是浮点数,而且是double类型的浮点数,范围是64个二进制位,符合IEEE 754……以前在看到float的时候基本都会带出来IEEE 754这个标准。这里面具体讲了什么我完全没看过,但今天在《impatient JS》中,简单了解到了一些。 说是64位,实际可用来表示数字的有53位,这53位中还有1位被用作表示符号(正负号);除了53位,剩下的11位被用作了指数部分(科学计数法),范围-1023~1024。 bigint Bigint is a new primitive data type for integers. Bigints don’t have a
1 min read
http2

如何触发Chrome的ERR_HTTP2_FRAME_SIZE_ERROR

本文的最终目的是构造一个支持HTTP2的webserver, 当使用Chrome访问的时候触发ERR_HTTP2_FRAME_SIZE_ERROR,这比单纯写“对”代码更复杂。 日常使用的工具基本都是高层的语言、库,目的是为了简化开发者的使用体验,这些语言、库经过长时间验证,会自动处理各种异常,尽量避免让开发者出错。但这可能会让我们天然的对某些知识了解不够深入,例如写一个RST攻击Demo所需要的网络知识,就比单纯的能写基于socket的C/S通信要更深入、能写一个让JVM崩溃的Java代码就比单纯会写Java要了解的东西更多等等。 ERR_HTTP2_FRAME_SIZE_ERROR 这个错误可以从Chrome的dev tools中的Network或者Console中看到,从名字上可以看出是和HTTP2协议有关的错误,Frame是HTTP2中专属的概念,是Http2通信中的最小单位。 Chrome有一个记录更详细日志的机制:chrome://net-export/,记录下来的JSON文件可以通过这里查看 HTTP2 继续深入这个错误就不得不了解一些HTTP2的基础知识
11 min read