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

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