将 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中数据是如何组织的,从以下两个角度来观察 逻辑设计 搜索应用所要注意的。用于索引和搜索的基本单位是文档,可以将其认为 文档以类型来分组,类型包含若干文档, 类似表格包含若
Mongo创建文档
插入并保存文档 db.foo.insert({"bar": "baz"}) 这个操作会给文档自动增加一个"_id"键(要是原来没有的话),然后将其保存到MongoDB中。 批量插入 如果要向集合中插入多个文档,使用批量插入会快一些。使用批量插
Mongo_Shell基础操作
运行shell MongoDB自带JavaScript shell,可在shell中使用命令行与MongoDB实例交互。 shell是一个功能完备的JavaScript解释器,可运行任意JavaScript
MongoDB基础
文档是MongoDB中数据的基本单元,非常类似于关系型数据库管理系统中的行,但更具表现力。 类似地,集合(collection)可以看作是一个拥有动态模式(dynamic schema)的表。 MongoD
go_mod的使用
Go 的包管理方式是逐渐演进的, 最初是 monorepo 模式,所有的包都放在 GOPATH 里面,使用类似命名空间的包路径区分包,不过这种包管理显然是有问题,由于包依赖可能会引入破坏性更新,生产环境和测试环境会出现运行不一致的问题。 从
count(1)与count(x)的区别
count(1) and count(*) **当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了! ** 从执行计划来看,count(1)和count()的效果是一样的。 但是在表做过分析之后,count
索引
唯一索引 唯一索引是索引具有的一种属性,让索引具备唯一性,确保这张表中,该条索引数据不会重复出现。在每一次insert和update操作时,都会进行索引的唯一性校验,保证该索引的字段组合在表中唯一。 db.containers.createIndex({name: 1},{unique:true,
开启查询日志
开启查询日志 方法一:执行MongoDB命令 这个命令只能设置单个组件的日志等级,如果想要一次性设置多个组件的日志等级,可以使用下面的方法: 新建 start_log.js, 内容如下 db.adminCommand( { setParameter: 1, logComponentVerbosity: { verbosity: 1, query: { verbosity: 2 },