• Rust配置crates.io国内镜像,加速依赖更新

    在中国做软件开发,往往需要特殊的技能,这点非常麻烦。crates.io经常因为网络问题会卡在

    $ cargo update
      Updating crates.io index
    

    幸运的话可以通过,最头疼的是等了相当长的时间过后因为网络问题的终止,解决这个问题可以配置crates.io国内镜像,这里以清华大学开源软件镜像站做例子,编辑~/.cargo/config文件,添加以下内容

    [source.crates-io]
    replace-with = 'tuna'
    
    [source.tuna]
    registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"
    

    ...

    READ ALL

  • 关于img标签referrerpolicy属性与请求头Referer

    在制作本博客时,有一个文章页生成二维码的一个小需求,简单来说就是传入一个URL返回一个二维码图片。于是自然的就想起了浏览器在发出HTTP请求时通常会默认把来源URL添加到HTTP的请求头Referer字段的这么一个特性

    GET /qrcode HTTP/1.1
    Host: www.qttc.net
    Referer: https://www.qttc.net/about.html
    

    于是页面上显示二维码的代码这么写

    index.html

    <img src="https://static.qttc.net/qrcode" />
    

    ...

    READ ALL

  • Nginx配置项underscores_in_headers

    full nginx logo

    遇到一个比较奇怪的问题,发现经过Nginx反向代理到服务器端时部分头字段被过滤掉了。经过查阅资料,得知HTTP头字段名称在标准下是使用中划线拼接的,例如

    Custom-Header: QTTC

    假如你想使用下划线拼接

    Custom_Header: QTTC

    这是不符合HTTP标准的,默认在Nginx下进行会被drop掉,担心跟CGI变量混淆,以下是官方说明

    missing-disappearing-http-headers

    ...

    READ ALL

  • Rust编译到WebAssembly例子

    full rust webassembly

    随着WebAssembly越来约完善,很多Web应用可以利用它解决性能计算的业务场景,甚至WebAssembly未来还有计划实现调用外部JavaScript方法的计划。

    目前官方推荐使用四种语言编写WebAssembly的源码,它们分别是

    • C/C++ 所有人都知道的语言
    • Rust 我最喜欢的语言
    • AssemblyScript 如果你写C/C++,Rust不舒服,这是最佳的选择
    • WebAssembly 直接编写WebAssembly的格式,难度比较大

    ...

    READ ALL

  • Rust中String与&str互转

    在Rust中字符串是个复杂的概念,String和&str的性质不一样,&str可以使用to_string()转换

    let str: String = "琼台博客".to_string();
    

    如果要把String转回&str,可以使用切片的引用模式

    let str: &str = &"琼台博客".to_string()[..];
    

    ...

    READ ALL

  • JavaScript中encodeURI和encodeURIComponent区别

    在JavaScript中encodeURIencodeURIComponent不少人容易混淆两个的区别与正确用法,从英文单词上理解的话很容易看出来关键性区别的地方,即一个带Component,另一个不带。也就是说带ComponentencodeURIComponent就把输入当作一个完整的部件全部编码。另一个encodeURI则是对URI进行编码,为了保证返回的参数仍然是一个有效的URIhttp://或者https://://不会被编码,来看看例子。

    https://www.qttc.net/Hello World作为入参,分别测试两个函数的返回值

    ...

    READ ALL

  • Chrome加载资源错误ERR_CONTENT_LENGTH_MISMATCH

    full chrome_err_content_length_mismatch.jpg

    异常错误

    今天,像正常一样访问网页时,发现页面空白,没有渲染任何元素,感觉有异常。

    于是打开开发者工具一看,果然发现有一条网络错误,

    xxxx.js net::ERR_CONTENT_LENGTH_MISMATCH

    如以上截图,这个错误我还是第一次遇见,有点懵,光从错误代号上大概就能直到意思,在接收这条脚本内容时实际字节数与HTTP协议头字段Content-Length不匹配。

    ...

    READ ALL

  • 通过HTTP协议读取Gitlab仓库里的某个文件

    full Gitlab

    需求

    因为要基于Gitlab的基础上去做一个每当有仓库push的时候会自动触发Docker自动打包Image的功能,Gitlab有System Hooks功能,System Hooks简单来说就是可以定义每当有仓库有一些动作,这些动作包括

    • Push events
    • Tag push events
    • Repository update events
    • Merge request events

    当发生以上任意一种事件时,就会以POST请求预定好的一个URL,并且带着本次事件的具体详情以JSON格式作为请求体。

    ...

    READ ALL

  • 为什么我放弃使用Helm安装stable/Jenkins

    full helm jenkins

    在Kubernetes中,利用helm部署应用非常的方便,它就类似于Debian/Ubuntu中的apt,在Helm Hub中找到你需要的程序,然后快速部署。我使用它安装了Jenkins,用了一段时间之后,发现以下两个问题实在是让人无法接受,我决定放弃使用Helm部署,改用Deployment的方式。

    重启时间特别长

    初次安装的时间稍长,我觉得可以忍受,但重启的时候基本要花10分钟才能到Jenkins主服务启动,因为在主服务启动之前initContainer有一些工作要做,等到最后主服务启动之后我看了以下Age字段,基本接近十分钟。

    ...

    READ ALL

  • 简单场景下k8s的CronJob与容器内Crontab计划任务对比

    full k8s docker crontab

    背景

    需求是这样的,需要部署一批静态站点在Kubernetes上,这批静态站点的所有静态资源全都推送在Git仓库的某个固定分支下,比如master分支下。对部署的要求特别简单,只需要把仓库克隆到本地,然后Nginx的root参数值修改到仓库目录位置即可,例子如下

    rm -rf /var/www/html
    git clone --depth=1 https://github.com/lizhongit/static.git /var/www/html
    

    ...

    READ ALL