云原生训练营 -Week02

简介: 云原生训练营 -Week02

编写一个 HTTP 服务器:

  1. 接收客户端 request,并将 request 中带的 header 写入 response header
  2. 读取当前系统的环境变量中的 VERSION 配置,并写入 response header
  3. Server 端记录访问日志包括客户端 IP,HTTP 返回码,输出到 server 端的标准输出
  4. 当访问 localhost/healthz 时,应返回 200


package main
import (
  "fmt"
  "log"
  "net/http"
  "os"
)
func ReadUserIP(r *http.Request) string {
  IpAddress := r.Header.Get("X-Real-Ip")
  if IpAddress == "" {
    IpAddress = r.Header.Get("X-Forwarded-For")
  }
  if IpAddress == "" {
    IpAddress = r.RemoteAddr
  }
  return IpAddress
}
func health(w http.ResponseWriter, r *http.Request) {
  w.Write([]byte("working"))
}
func analyseHeader(w http.ResponseWriter, r *http.Request) {
  w.Write([]byte("Hello, this is server"))
  err := os.Setenv("VERSION", "V1.0.0")
  if err != nil {
    log.Fatalf("Setting env VERSION failed")
  }
  version := os.Getenv("VERSION")
  w.Header().Set("VERSION", version)
  fmt.Printf("os version: %s \n", version)
  // 将request中的header依次copy到response中
  for k, v := range r.Header {
    for _, vv := range v {
      fmt.Printf("Header key: %s, Header value: %s \n", k, v)
      w.Header().Set(k, vv)
    }
  }
  fmt.Println(r.RemoteAddr)
  fmt.Printf("Ip is: %s\n", ReadUserIP(r))
  log.Printf("Success! Response code: %d", 200)
}
func main() {
  serveMux := http.NewServeMux()
  serveMux.HandleFunc("/", analyseHeader)
  serveMux.HandleFunc("/healthz", health)
  err := http.ListenAndServe(":8080", serveMux)
  if err == nil {
    log.Fatalf("Starting server failed on port 8080 failed")
  }
}

目录
相关文章
|
3月前
|
多模数据库 Cloud Native NoSQL
Nosql学习之路:云原生多模数据库Lindorm训练营第一弹来啦
Lindorm训练营系列将通过一系列由浅入深的高质量课程和丰富的动手实验,将理论与实践结合,带你从入门到成为高阶开发者。参营学习还有机会获得惊喜彩蛋~
|
Kubernetes Cloud Native Java
云原生训练营大作业
云原生训练营大作业
115 0
|
Kubernetes 负载均衡 Cloud Native
云原生训练营 -Week08-2
云原生训练营 -Week08-2
86 0
|
Cloud Native Docker 容器
云原生训练营 -Week03
云原生训练营 -Week03
58 0
|
11月前
|
人工智能 Kubernetes Cloud Native
火热开营丨快来报名云原生 AI 工程化实践训练营-探索系列
火热开营丨快来报名云原生 AI 工程化实践训练营-探索系列
|
Cloud Native 安全
云原生训练营 - Week12
云原生训练营 - Week12
70 0
|
Prometheus Kubernetes Cloud Native
云原生训练营 -Week10
云原生训练营 -Week10
84 0
|
Kubernetes Cloud Native 网络性能优化
云原生训练营 -Week08
云原生训练营 -Week08
91 0
|
消息中间件 Cloud Native Linux
云原生人才培养计划2.0 之 「消息产品全家桶训练营」开营启动!
2021年8月,阿里云联合Linux基金会发布云原生人才培养计划2.0,协同开源生态力量,为云原生领域提供更具专业性的定向人才培养方式,帮助云原生时代的开发者更好地享受云红利,创造新价值。今年12月,开发者社区与阿里云消息产品团队开设的RocketMQ训练营,在极短时间内就有近万名开发参与,受到开发者的喜爱,基于用户需要,开发者社区发起「消息产品全家桶训练营」,邀请消息产品线负责人隆基出品,10+
139 0
云原生人才培养计划2.0  之 「消息产品全家桶训练营」开营启动!
|
消息中间件 存储 Cloud Native
云原生人才培养计划2.0 之 消息产品「全家桶训练营」重磅来袭
今年12月,开发者社区与阿里云消息产品团队再次联合出品消息产品全家桶训练营,本次训练营覆盖了 RocketMQ、Kafka、RabbitMQ、MNS、EventBridge 多种消息产品及接入场景,10+消息团队专家授课,帮助开发者在不同的业务场景用好消息。
云原生人才培养计划2.0 之 消息产品「全家桶训练营」重磅来袭

热门文章

最新文章