幂等设计

概念 幂等这个概念,是一个数学上的概念,即:f……(f(f(x))) = f(x)。用在计算机领域,指的是系统里的接口或方法对外的一种承诺,使用相同参数对同一资源重复调用某个接口或方法的结果与调用一次的结果

日志切割logrotate原理和配置

logrotate 在很多 Linux 发行版上都是默认安装的。系统会定时运行 logrotate,一般是每天一次。系统是这么实现按天执行的。crontab 会每天定时执行 /etc/cron.daily 目录下的脚本,而这个目录下有个文件叫 logrotate。在 centos

Go模板之上下文感知

上下文感知 Go语言的模板引擎可以根据内容所处的上下文改变其显示. 上下文感知的一个显而易见的用途就是对被显示的内容实施正确的转义(escape):这意味着,如果模板显示的是HTML格式的内容,那么模板将

Go模板之动作

Go的模板动作就是嵌入模板的命令 条件动作 {{ if arg }} some content {{ else }} other content {{ end }} 迭代动作 迭代动作可以对数组,切片,映射,或者通道进行迭代, 在迭代循环内部, 点(.) 会被设置正在当前迭代内容 设置动作 设置动作允许为指定

Go的模板引擎

Go的模板都是文本文档(其中Web应用的模板通常都是HTML),它们都嵌入了一些称为动作(action)的指令。从模板引擎的角度来说,模板就是嵌入了动作的文本(这些文本通常包含在模板文件里面),而模板

利用cookie实现闪现消息

为了向用户报告某个动作的执行情况,应用程序有时候会向用户展示一条简短的通知消息, 比如说,如果一个用户尝试在论坛上发表一篇帖子,但是这篇帖子因为某种原因而发表失败了,那么论坛应该向这个用户展示一条帖子发

解析请求头和请求体

解析请求头 // 解析请求头 func headers(w http.ResponseWriter, request *http.Request) { // 获取所欲请求头,Header 是个 map, key 是字符串,value 是字符串切片 headers := request.Header fmt.Printf("所有请求头headers: %v\n", headers) // 获取单个请求头,返回的是字

为什么把某些参数放在请求头中

在HTTP协议中,首部和请求体是分开传输的,将一些认证信息参数放在请求头中,服务端先解析请求头,如果认证不通过,可以直接返回认证失败,不用再传输请求体,从而提高服务器的性能。 下面做实验验证,实验思路:

Cookie操作

将 cookie 发送给至客户端 Cookie结构的string方法可以返回一个经过序列化处理的cookie,其中Set-Cookie响应首部的值就是由这些序列化之后的cookie组成的。 package main import "net/http" func main(){ server := http.Server{ Addr: "127.0.0.1:8080", } http.HandleFunc("/setCookie",setCookie) server.ListenAndServe()

Cookie概览

会话 cookie 与持久 cookie 没有设置Expires字段的cookie通常称为会话cookie或者临时cookie,这种cookie在浏览器关闭的时候就会自动被移除。相对而言,设置了Expires字段的cookie通

设置响应首部及响应体示例

返回体 func writeExample(w http.ResponseWriter, request *http.Request) { // 没有手动设置响应类型,会通过检测响应的前 512 个字节自动判断响应类型 // 这里是 Content-Type: text/html; charset=utf-8 str:= `<html> <head><title>Go Web Programming</title></head> <body><hl>Hello World</hl></body> </html>` w.Write([]byte(str)) } 设置状态码 func writeHeaderExample(w http.ResponseWriter, request *http.Request) { // 设置HTTP 状态码, WriteHeader 方法名有误导,只能设置状态码,而不是

生成证书及服务端私钥

package main import ( "crypto/rand" "crypto/rsa" "crypto/x509" "crypto/x509/pkix" "encoding/pem" "math/big" "net" "os" "time" ) func main(){ max := new(big.Int).Lsh(big.NewInt(1), 128) serialNumber, _ := rand.Int(rand.Reader,max) subject := pkix.Name{ Organization: []string {"YX"}, OrganizationalUnit: []string {"YX"}, CommonName: "DC", } template := x509.Certificate{ SerialNumber: serialNumber, Subject: subject, NotBefore: time.Now(), NotAfter: time.Now().Add(365 * 24 * time.Hour), KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, IPAddresses: []net.IP{net.ParseIP("127.0.0.1")}, } pk, _ := rsa.GenerateKey(rand.Reader,2048) derBytes , _ := x509.CreateCertificate(rand.Reader, &template, &template, &pk.PublicKey, pk) cerOut, _ := os.Create("cert.pem") pem.Encode(cerOut, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes}) cerOut.Close() keyOut , _ := os.Create("key.pem") pem.Encode(keyOut, &pem.Block{Type: "RAS PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(pk)}) keyOut.Close() }

HTTP概览

什么是无状态 因为HTTP是一种无连接协议(connection-less protocol),通过这种协议发送给服务器的请求对服务器之前处理过的请求一无所知,所以应用程序才会以cookie的方式在客户端

Linux_nobody用户

nobody在linux中是一个不能登陆的帐号,一些服务进程如apache,aquid等都采用一些特殊的帐号来运行,比如nobody,news,games等等,这是就可以防止程序本身有安全问题的时候,

ElasticSearch认知

概览 为了理解Elasticsearch中数据是如何组织的,从以下两个角度来观察 逻辑设计 搜索应用所要注意的。用于索引和搜索的基本单位是文档,可以将其认为 文档以类型来分组,类型包含若干文档, 类似表格包含若