FrankKai

Results 350 comments of FrankKai

### 101交换协议 HTTP的101交换协议意味着client向server发送的消息中包含了Upgrade请求头,server会根据client发送的这个请求头切换协议。 server会在response中添加一个Upgrade响应头,来指示server切换到的协议。 用一句话来说就是:**client通过在请求头中添加Upgrade告诉server切换协议,server在响应头中添加upgrade说明切换后的协议。** 再简单一点就是:客户端告诉服务端去切换协议。 #### General ``` Request URL: wss://foo.bar Request Method: GET Status Code: 101 Switching Protocols ``` #### Request Headers ``` Connection: Upgrade Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits...

### 协议升级机制 HTTP1.1版本的协议有一个特殊的机制:**升级一个已经建立的连接为另外一个协议,一般是通过Upgrade头来实现。** 这个机制是可选的,它**不能强制协议改变**。虽然实现支持新协议,但是也可以选择不升级。在实际应用中,通常这个机制用于**引导WebSocket进行连接**。 **注意,HTTP2.0版本明确禁止使用这个机制。只能用于HTTP1.1。** #### 升级HTTP/1.1连接 client可以使用Upgrade头去邀请服务器去切换为协议列表中的某一项,按照降序。 因为Upgrade是一个逐跳头,因此它需要一个Connection头。 这也就意味着一个典型的包含Upgrade报文头的请求为: ``` GET /index.html HTTP/1.1 Host: www.example.com Connection: upgrade Upgrade: example/1, foo/2 ``` 其他的头一般是依赖请求协议的;例如,WebSocket升级允许额外的头去配置WebSocket连接,并在打开时就有一定的安全性。 如果服务器决定去升级连接,分为升级成功和升级失败两种情况: - 升级成功:它会返回一个**101 Switching Protocols**响应状态,并且Upgrade头中指明它切换后的协议。 - 升级失败:如果服务端不能升级连接,它会忽略Upgrade头,然后返回一个常规的响应(例如...

参考资料: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/101 https://developer.mozilla.org/en-US/docs/Web/HTTP/Protocol_upgrade_mechanism https://stackoverflow.com/questions/6984139/how-can-i-get-the-sha1-hash-of-a-string-in-node-js https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings https://stackoverflow.com/questions/10918983/how-can-decode-sha1-code

### 初识data URL - data URL是一种特殊格式的url,它的前缀是`data:` - data URL允许内容的创建者将小文件嵌入在documents中 - 过去被叫做data URIs,直到WHATWG将其更名为data URL(s) #### data URL与传统的url有什么区别? 现代浏览器将data url视作唯一的不透明来源,而不是负责导航的url。 如何理解这句话呢?看一下这个例子: ```js // data URL data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAADklEQVQYV2NkgAJGGAMAAC0AA03DhRMAAAAASUVORK5CYII= // 传统的URL https://www.google.com ``` 由上面的结果可以看出: data...

### data URL语法 #### data URL由哪四部分组成? ```js data:[][;base64], ``` |组成|含义| |--|--| |`data:`|前缀| |`[]`| [MIME type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) 代表数据的类型| |`[;base64]` |可选的base64标识| |``| 数据本身| #### `[]`详情 - mediatype是一个MIME type的字符串,比如'image/jpeg'。 - 如果忽略的话,默认是"text/plain;charset=US-ASCII"。 - canvas.toDataURL()并没有忽略,默认MIMIE type为"image/png"。...

### 字符串base64编解码的多种语言实现 #### 为什么要用base64来表示data URL中的``? - base64字符串是用64进制来表示二进制数据的,它是一个ASCII字符串。 - 由于仅仅是通过ASCII字符组成的,所以**base64字符串是url-safe的,因此才将base64应用于data URL的``中。** #### unix,javascript,node,python,php,java,.net实现base64编码 ```js "[email protected]" "Zm9vQGdtYWlsLmNvbQ==" ``` ##### 1.unix (author: Peng Zhao) 解码:`echo "Zm9vQGdtYWlsLmNvbQ==" | base64 -D` 编码:`echo "[email protected]" | base64`...

### data URL常见问题 罗列一些在创建和使用data URL时的常见问题。 ``` data:text/html,lots of text...bottom?arg=val ``` 其实它代表的是: ``` lots of text...bottom?arg=val ``` - 语法 - HTML中的格式 - 长度限制 - 异常处理的缺失 - 不支持字符串查询 - 安全问题 #### 语法...

参考资料: - https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL - https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs

### require类型问题 #### require不生效 读取项目中文件(require("./foo.js"))的话,需要采用非webpack模式的打包,否则会引入失败 #### require.cache 需要手动delete require.cache["xxxx"],否则会导致引入文件为缓存文件,获取不到最新文件。 本质上是因为nodejs的require有缓存机制。

### 查看打包后的插件内容 vsix包中的打包文件,受到.vscodeignore的影响,有两种方式查看即将生成的vsix包中的文件:vsce ls 和 将vsix后缀改为zip,解压后查看