kubernetes 安装入门(centos)

这篇文章记录如何使用 kubeadm 安装 kubernetes。

目前官方推荐使用这种方法安装上测试环境,暂时不建议上生产环境。

环境配置

  1. 安装docker

    curl -sSL https://get.docker.com/ | sh
    usermod -aG docker $USER
    systemctl enable docker
    systemctl start docker
    
  2. 关闭系统防火墙

    systemctl stop firewalld && systemctl disable firewalld
    
  3. 关闭SElinux

    $ setenforce 0 (临时关闭)
    $ vi /etc/selinux/config (长久关闭)
    SELINUX=disabled
    
  4. 关闭系统交换区(出于k8s的性能考虑)

    不关闭临时分区的话参考后文,k8s初始化时修改配置文件即可。

    (临时)
    $ swapoff -a && sysctl -w vm.swappiness=0
    
    (长久)
    $ swapoff -a && cat >> /etc/sysctl.conf << EOF 
    vm.swappiness=0
    EOF
    
    $ sysctl -p
    
  5. 配置系统内核参数使流过网桥的流量也进入iptables/netfilter框架中:

    $ cat >> /etc/sysctl.conf<< EOF
    net.ipv4.ip_forward= 1
    net.bridge.bridge-nf-call-ip6tables= 1
    net.bridge.bridge-nf-call-iptables= 1
    EOF
    
    $ sysctl -p
    
  6. 重启docker和daemon

    systemctl daemon-reload
    systemctl restart docker
    

安装

  1. 配置阿里K8S YUM源

     cat <<EOF > /etc/yum.repos.d/kubernetes.repo
     [kubernetes]
     name=Kubernetes
     baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
     enabled=1
     gpgcheck=0
     EOF
    
     yum -y install epel-release
     yum clean all
     yum makecache
    
  2. 安装kubeadm和相关工具包

    yum -y install kubelet kubeadm kubectl kubernetes-cni
    
  3. 修改 kubeadm.conf

    $ vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    # 修改 "cgroup-driver"值 由systemd变为cgroupfs
    # 原因是 cgroup-driver参数要与docker的一致,否则就会出问题
    Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
    
    # 第九行增加swap-on=false
    Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"
    
  4. 启动Docker与kubelet服务

    systemctl enable docker && systemctl start docker
    systemctl enable kubelet && systemctl start kubelet
    
  5. 查看系统日志

    此时kubelet的服务运行状态是异常的,因为缺少主配置文件kubelet.conf。但可以暂不处理,因为在完成Master节点的初始化后才会生成这个配置文件。

    tail -f /var/log/messages
    
  6. kubeadm初始化master节点

    目前最新版是1.10,也可以不用这个配置。

    kubeadm init --kubernetes-version=v1.10.0 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors Swap
    

    最后一段的输出信息,类似于

    kubeadm join ...
    

    需要保存一份,后续添加工作节点还要用到。

  7. 配置kubectl认证信息

    # 对于非root用户
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    # 对于root用户
    export KUBECONFIG=/etc/kubernetes/admin.conf
    也可以直接放到~/.bash_profile
    echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/bash_profile
    echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/bashrc
    
  8. 安装flannel网络

    mkdir -p /etc/cni/net.d/
    cat <<EOF> /etc/cni/net.d/10-flannel.conf
    {
    "name": "cbr0",
    "type": "flannel",
    "delegate": {
    "isDefaultGateway": true
    }
    }
    EOF
    
    mkdir /usr/share/oci-umount/oci-umount.d -p
    mkdir -p /run/flannel/
    
    cat <<EOF> /run/flannel/subnet.env
    FLANNEL_NETWORK=10.244.0.0/16
    FLANNEL_SUBNET=10.244.1.0/24
    FLANNEL_MTU=1450
    FLANNEL_IPMASQ=true
    EOF
    
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml
    
  9. node加入集群(可选)

    将第6步中的最后那个命令在node节点上运行即可。如果需要可以在后边加上跳过swap检测。

    kubeadm join --token xxx --discovery-token-ca-cert-hash sha256:xxx 172.10.1.100:6443  --ignore-preflight-errors Swap
    
    kubeadm join 10.19.0.55:6443 --token yvcyj2.8sx9plzgg0x2pyui --discovery-token-ca-cert-hash sha256:39a0baf9d08046eecbd593049b4d71e47d47478c01b6761c911da9589aed1f73 --ignore-preflight-errors Swap
    

    如果忘记token,在master节点上运行:

    # 确认token是否有效
    kubeadm token list      
    
    kubeadm token create --print-join-command
    

    默认token的有效期为24小时,当过期之后,该token就不可用了。解决方法如下:

    # 重新生成新的token
    kubeadm token create
    kubeadm token list
    
    # 获取ca证书sha256编码hash值
    openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
    
    # 节点加入集群
    kubeadm join --token xxx --discovery-token-ca-cert-hash sha256:xxx  172.10.1.100:6443  --ignore-preflight-errors Swap
    
    kubeadm join 10.19.0.55:6443 --token yvcyj2.8sx9plzgg0x2pyui --discovery-token-ca-cert-hash sha256:39a0baf9d08046eecbd593049b4d71e47d47478c01b6761c911da9589aed1f73 --ignore-preflight-errors Swap
    

    更新 2019年2月26日:

    对于添加节点,如果出现这样的错误提示: [ERROR CRI]: unable to check if the container runtime at "/var/run/dockershim.sock" is running: exit status 1

    有可能是crictl的原因,在节点上并不需要这个东西,删除即可:

    rm /usr/bin/crictl

  10. 将 master 设置为node(可选)

   kubectl taint nodes --all node-role.kubernetes.io/master-
  1. 验证

    # 查看节点状态
    kubectl get nodes
    # 查看pods状态
    kubectl get pods --all-namespaces
    # 查看K8S集群状态
    kubectl get cs
    
  2. 重新安装(可选)

    kubeadm reset
    
  3. 安装UI界面 dashboard

    在k8s中 dashboard可以有两种访问方式:kubeconfig(HTTPS)和token(http)。

    这里只介绍 Token 方式的访问。

    $ git clone https://github.com/gh-Devin/kubernetes-dashboard.git
    $ cd kubernetes-dashboard
    $ ls
    heapster-rbac.yaml  heapster.yaml  kubernetes-dashboard-admin.rbac.yaml  kubernetes-dashboard.yaml
    
    $ vi kubernetes-dashboard.yaml
    # 因为权限问题,要将serviceAccountName: kubernetes-dashboard
    # 改为serviceAccountName: kubernetes-dashboard-admin
    
    $ kubectl  -n kube-system create -f .
    

    查看pod,确定是否已正常running

    kubectl get svc,pod --all-namespaces | grep dashboard
    

简单使用

一些简单的命令行使用说明:

kubectl cluster-info  # 查看集群信息
kubectl get pods      # 查看当前的 Pod
kubectl get services  # 查看应用被映射到节点的哪个端口
kubectl get services,pods --all-namespaces # 查看所有namespaces的应用和pod

kubectl get deployment # 查看副本数
kubectl describe deployment
kubectl get replicaset
kubectl describe replicaset

简单的创建资源:

  1. 用 kubectl 命令直接创建

    # 通过 kubectl 创建 Deployment。
    # Deployment 创建 ReplicaSet。
    # ReplicaSet 创建 Pod。
    kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2
    
    kubectl run kubernetes-bootcamp \
          --image=docker.io/jocatalin/kubernetes-bootcamp:v1 \
          --port=8080
    
  2. 用yml配置文件创建

    kubectl apply 不但能够创建 Kubernetes 资源,也能对资源进行更新,非常方便。

    不过 Kubernets 还提供了几个类似的命令,例如 kubectl createkubectl replacekubectl editkubectl patch

    kubectl apply -f nginx.yml
    
  3. 更新配置

    # 将8080端口映射到主机的随机端口
    kubectl expose deployment/kubernetes-bootcamp \
          --type="NodePort" \
          --port 8080
             
    
    # 更新副本数
    kubectl scale deployments/kubernetes-bootcamp --replicas=3      
    
    # 滚动更新
    kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
    
    # 回退
    kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
    
    # 删除
    kubectl delete pvc mypvc1 --force
    kubectl delete pv mypv1 --force
    
    

    参考资料


CentOS 7 使用代理服务器

这篇文章记录如何在 CentOS 7 下使用代理服务器,以此在国内服务器下载 k8s 的镜像,例如<k8s.gcr.io/defaultbackend:1.3>

代理客户端

代理客户端用来连接本地与服务器。

  1. 安装

    sudo yum -y install epel-release
    sudo yum -y install python-pip
    sudo pip install shadowsocks
    
  2. 配置

    sudo mkdir -p /etc/shadowsocks
    sudo vi /etc/shadowsocks/shadowsocks.json
    

    配置信息如下:

    {
        "server":"x.x.x.x",  # 服务器地址
        "server_port":1035,  # 服务器端口
        "local_address": "127.0.0.1", # 本地IP
        "local_port":1080,  # 本地端口
        "password":"password", # 连接密码
        "timeout":300,  # 等待超时时间
        "method":"aes-256-cfb",  # 加密方式
        "fast_open": false,  # true或false。开启fast_open以降低延迟,但要求Linux内核在3.7+
        "workers": 1  #工作线程数 
    }
    
  3. 自启动

    新建脚本

    touch /etc/systemd/system/shadowsocks.service
    # vi /etc/systemd/system/shadowsocks.service
    
    [Unit]
    Description=Shadowsocks
    [Service]
    TimeoutStartSec=0
    ExecStart=/usr/bin/sslocal -c /etc/shadowsocks/shadowsocks.json
    [Install]
    WantedBy=multi-user.target
    
  4. 启动Shadowsocks

    systemctl enable shadowsocks.service
    systemctl start shadowsocks.service
    systemctl status shadowsocks.service
    
  5. 验证运行状况

    curl --socks5 127.0.0.1:1080 -i http://ip.cn
    

    将会显示ip的具体位置。

privoxy

许多应用没有 socks 的能力。privoxy 用来将 socks5 代理转为 http 代理,就可以给大部分应用提供代理支持了。

  1. 安装

    yum install privoxy -y
    systemctl enable privoxy
    systemctl start privoxy
    systemctl status privoxy
    
  2. 配置

    cat >> /etc/privoxy/config << EOF
    forward-socks5t / 127.0.0.1:1080 .
    EOF
    
  3. 设置http、https代理

    # vi ~/.bashrc 在最后添加如下信息
    PROXY_HOST=127.0.0.1
    export all_proxy=http://$PROXY_HOST:8118
    export ftp_proxy=http://$PROXY_HOST:8118
    export http_proxy=http://$PROXY_HOST:8118
    export https_proxy=http://$PROXY_HOST:8118
    export no_proxy=localhost,172.16.0.0/16,192.168.0.0/16.,127.0.0.1,10.10.0.0/16
    
    # 重载环境变量
    source ~/.bashrc
    
  4. 验证运行状况

    curl -i http://ip.cn
    

    将会显示ip的具体位置。

取消代理,只要将 ~/.bashrc 中的内容取消掉,再 source 加载就好了。

参考资料


kubernetes helm 入门

注:这篇文章已经有一定的年代了,可以查看小站2021年更新的文章。

这篇文章记录如何安装和使用helm。

什么是 helm

Kubernetes是容器集群管理系统,每个成功的软件平台都有一个优秀的打包系统,比如 Debian、Ubuntu 的 apt,Redhat、Centos 的 yum。而 Helm 则是 Kubernetes 上的包管理器。

helm相当于一个应用商店,将一个在云上部署的应用相关的组件全部打包起来,进行安装、升级、管理等。

在kubernetes中,我们部署一个标准的应用,以下的应用基本都会使用到:

  1. Service
  2. Secret
  3. PVC
  4. Deployment
  5. ConfigMap

helm 有几个概念名词:chart,release和repository。chart就是包,而release代表一个运行实例,Repository是用于发布和存储 Chart 的存储库。

helm 的工作,就是将这些yaml配置在更高一个层次,统一起来管理:

  1. 新建chart。
  2. 更新chart。
  3. 在kubernetes中安装和卸载release。
  4. 更新、回滚和测试release。

helm 架构

helm 包含两个组件:helm 客户端 和 tiller 服务器:

  • helm客户端负责管理chart
  • tiller服务器负责管理release
  • Repository 是 Chart 存储库,Helm 客户端通过 HTTP 协议来访问存储库中 Chart 的索引文件和压缩包。

helm安装

  1. helm客户端

    curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash
    helm version
    
    # 安装helm命令补全脚本
    cd ~ && helm completion bash > .helmrc && echo "source .helmrc" >> .bashrc
    
  2. tiller服务器

    创建tiller的serviceaccountclusterrolebinding

    kubectl create serviceaccount --namespace kube-system tiller
    kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
    

    然后安装helm服务端tiller

    helm init -i xxxx/k8s.gcr.io/tiller:v2.9.0
    

    使用-i指定自己的镜像,因为官方的镜像因为某些原因无法拉取。

    为应用程序设置serviceAccount

    kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
    

    检查是否安装成功:

    $ kubectl -n kube-system get pods|grep tiller
    tiller-deploy-f5597467b-wdwfl      1/1       Running   0          2h
    $ helm version
    Client: &version.Version{SemVer:"v2.9.0", GitCommit:"f6025bb9ee7daf9fee0026541c90a6f557a3e0bc", GitTreeState:"clean"}
    Server: &version.Version{SemVer:"v2.9.0", GitCommit:"f6025bb9ee7daf9fee0026541c90a6f557a3e0bc", GitTreeState:"clean"}
    

tips:

安装出问题时使用 helm reset && helm init 重置安装。

  1. 使用第三方的 Chart 存储库

    helm repo add 存储库名 存储库URL
    helm repo update
    

    关于 Helm 相关命令的说明,您可以参阅 Helm 文档

    鉴于国内使用镜像非常不方便Σ(っ °Д °;)っ,请添加国内的镜像进行使用kube-charts-mirror

    helm repo add stable https://burdenbear.github.io/kube-charts-mirror/
    
  2. 使用helm安装应用例子

    • 安装好pv或者storageclass

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: helm-mysql
      spec:
        capacity:
          storage: 8Gi
        accessModes:
          - ReadWriteOnce
        persistentVolumeReclaimPolicy: Retain
        mountOptions:
          - hard
          - nfsvers=4
        nfs:
          path: /helm-mysql
          server: 172.10.1.100
      
      kubectl apply -f helm-mysql-pv.yml
      
    • 安装mysql

      helm install stable/mysql --name helm-mysql
      helm list
      

helm的使用

参考官方文档。https://docs.helm.sh/

自定义chart

创建一个Chart的骨架:

helm create testapi-chart

目录结构如下所示,我们主要关注目录中的这三个文件即可:Chart.yaml、values.yaml和NOTES.txt。

testapi-chart
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── NOTES.txt
│   └── service.yaml
└── values.yaml

打开Chart.yaml,填写应用的详细信息

打开并根据需要编辑values.yaml

对Chart进行校验

helm lint testapi-chart

对Chart进行打包:

helm package testapi-chart --debug

Successfully packaged chart and saved it to: /var/local/k8s/helm/alpine-0.1.0.tgz
[debug] Successfully saved /var/local/k8s/helm/alpine-0.1.0.tgz to /root/.helm/repository/local

安装本地repository中的chart

helm search local
helm install --name example local/mychart --set service.type=NodePort

使用Helm serve命令启动一个repo server,该server缺省使用’$HELM_HOME/repository/local’目录作为Chart存储,并在8879端口上提供服务。

helm serve --address 0.0.0.0:8879 &

启动本地repo server后,将其加入Helm的repo列表。

helm repo add local http://127.0.0.1:8879
"local" has been added to your repositories

现在再查找testapi chart包,就可以找到了。

chart 搜索

helm search

添加源

添加中国的源:

helm repo add stable https://burdenbear.github.io/kube-charts-mirror/

参考 https://github.com/BurdenBear/kube-charts-mirror

常用命令行

helm list
helm search
helm search mysql --versions
helm repo list
helm serve &

monocular 安装

因为没能把nginx-ingress安装成功,最后选择了Træfik-ingress

Træfik-ingress 安装

官网 https://docs.traefik.io/,以下按照 user-guide 进行安装,其实就是两个命令行:

# 创建角色和rbac绑定
$ kubectl apply -f https://raw.githubusercontent.com/containous/traefik/master/examples/k8s/traefik-rbac.yaml

# ServiceAccount, DaemonSet(直接绑定主机端口),service
$ kubectl apply -f https://raw.githubusercontent.com/containous/traefik/master/examples/k8s/traefik-ds.yaml

就可以看到效果了:

curl $(minikube ip)
404 page not found

traefik

参照GitHub的教程进行安装:

config

我创建了一个自己的配置文件,使用 kubernetes helm 国内镜像的配置 custom.yaml

$ cat > custom.yaml <<EOF
ingress:
  hosts:
  - monocular.local
  annotations:
    traefik.frontend.rule.type: PathPrefixStrip
    kubernetes.io/ingress.class: traefik 
api:
  config:
    repos:
      - name: monocular
        url: https://kubernetes-helm.github.io/monocular
        source: https://github.com/kubernetes-helm/monocular/tree/master/charts     
EOF

添加 repo

helm repo add monocular https://kubernetes-helm.github.io/monocular

# 2018年10月12日 更新,上面那个地址已经不能用了,我今天改成了下面这个:
helm repo add monocular https://helm.github.io/monocular

安装pv

apiVersion: v1
kind: PersistentVolume
metadata:
  name: monocular-mongodb
spec:
  capacity:
    storage: 8Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  mountOptions:
    - hard
    - nfsvers=4
  nfs:
    path: /monocular
    server: 172.10.1.100
    
$ kubectl apply -f monocular-pv.yml    

安装 monocular

helm install monocular/monocular --name monocular --set controller.hostNetwork=true -f custom.yaml

如果出现错误,重新来过的话,清空重置:

helm del --purge monocular
kubectl delete pv monocular-mongodb

获得 ingress 地址:

$ kubectl get ingress monocular-monocular

NAME                  HOSTS           ADDRESS   PORTS     AGE
monocular-monocular   monocular.local            80        9s

访问后自定义域名后界面如下:

参考资料


HTML meta标签 | segmentfault

原文:HTML meta标签总结与属性使用介绍

之前学习前端中,对meta标签的了解仅仅只是这一句。

<meta charset="UTF-8">

但是打开任意的网站,其head标签内都有一列的meta标签。比如我博客的。 Lxxyx博客的meta标签

但是自己却很不熟悉,于是把meta标签加入了寒假学习计划的最前方。

简介

在查阅w3school中,第一句话中的“元数据”就让我开始了Google之旅。然后很顺利的在英文版的w3school找到了想要的结果。(中文w3school说的是元信息,Google和百度都没有相关的词条。但元数据在Google就有详细解释。所以这儿采用英文版W3school的解释。)

The tag provides metadata about the HTML document. Metadata will not be displayed on the page, but will be machine parsable.

不难看出,其中的关键是metadata,中文名叫元数据,是用于描述数据的数据。它不会显示在页面上,但是机器却可以识别。这么一来meta标签的作用方式就很好理解了。

用处

Meta elements are typically used to specify page description, keywords, author of the document, last modified, and other metadata.

The metadata can be used by browsers (how to display content or reload page), search engines (keywords), or other web services

这句话对meta标签用处的介绍,简洁明了。 翻译过来就是:meta常用于定义页面的说明,关键字,最后修改日期,和其它的元数据。这些元数据将服务于浏览器(如何布局或重载页面),搜索引擎和其它网络服务。

组成

meta标签共有两个属性,分别是http-equiv属性和name属性。

1. name属性

name属性主要用于描述网页,比如网页的关键词,叙述等。与之对应的属性值为content,content中的内容是对name填入类型的具体描述,便于搜索引擎抓取。 meta标签中name属性语法格式是:

<meta name="参数" content="具体的描述">。

其中name属性共有以下几种参数。(A-C为常用属性)

A. keywords(关键字)

说明:用于告诉搜索引擎,你网页的关键字。 举例:

<meta name="keywords" content="Lxxyx,博客,文科生,前端">

B. description(网站内容的描述)

说明:用于告诉搜索引擎,你网站的主要内容。 举例:

<meta name="description" content="文科生,热爱前端与编程。目前大二,这是我的前端博客">

C. viewport(移动端的窗口)

说明:这个概念较为复杂,具体的会在下篇博文中讲述。 这个属性常用于设计移动端网页。在用bootstrap,AmazeUI等框架时候都有用过viewport。

举例(常用范例):

<meta name="viewport" content="width=device-width, initial-scale=1">

D. robots(定义搜索引擎爬虫的索引方式)

说明:robots用来告诉爬虫哪些页面需要索引,哪些页面不需要索引。 content的参数有all,none,index,noindex,follow,nofollow。默认是all。

举例:

<meta name="robots" content="none">

具体参数如下:

1.none : 搜索引擎将忽略此网页,等价于noindex,nofollow。 2.noindex : 搜索引擎不索引此网页。 3.nofollow: 搜索引擎不继续通过此网页的链接索引搜索其它的网页。 4.all : 搜索引擎将索引此网页与继续通过此网页的链接索引,等价于index,follow。 5.index : 搜索引擎索引此网页。 6.follow : 搜索引擎继续通过此网页的链接索引搜索其它的网页。

E. author(作者)

说明:用于标注网页作者 举例:

<meta name="author" content="Lxxyx,841380530@qq.com">

F. generator(网页制作软件)

说明:用于标明网页是什么软件做的 举例: (不知道能不能这样写):

<meta name="generator" content="Sublime Text3">

G. copyright(版权)

说明:用于标注版权信息 举例:

<meta name="copyright" content="Lxxyx"> //代表该网站为Lxxyx个人版权所有。

H. revisit-after(搜索引擎爬虫重访时间)

说明:如果页面不是经常更新,为了减轻搜索引擎爬虫对服务器带来的压力,可以设置一个爬虫的重访时间。如果重访时间过短,爬虫将按它们定义的默认时间来访问。 举例:

<meta name="revisit-after" content="7 days" >

I. renderer(双核浏览器渲染方式)

说明:renderer是为双核浏览器准备的,用于指定双核浏览器默认以何种方式渲染页面。比如说360浏览器。 举例:

<meta name="renderer" content="webkit"> //默认webkit内核
<meta name="renderer" content="ie-comp"> //默认IE兼容模式
<meta name="renderer" content="ie-stand"> //默认IE标准模式

2. http-equiv属性

介绍之前,先说个小插曲。看文档和博客关于http-equiv的介绍时,有这么一句。

http-equiv顾名思义,相当于http的文件头作用。

一开始看到这句话的时候,我是迷糊的。因为我看各类技术名词,都会习惯性的去记住它的英文全称。equiv的全称是”equivalent”,意思是相等,相当于。然后我脑子里出现了大大的迷惑:“HTTP相等?”

后来还准备去Segmentfault提问来着。结果在写问题的时候,突然反应出equivalent还有相当于的意思。意思就是相当于http的作用。至于文件头是哪儿出来的,估计是从其作用来分析的。我认为顾名思义并不能得出”相当于http的文件头作用”这个论断。

这个我所认为的http-equiv意思的简介。 相当于HTTP的作用,比如说定义些HTTP参数啥的。

meta标签中http-equiv属性语法格式是:

<meta http-equiv="参数" content="具体的描述">

其中http-equiv属性主要有以下几种参数:

A. content-Type(设定网页字符集)(推荐使用HTML5的方式)

说明:用于设定网页字符集,便于浏览器解析与渲染页面 举例:

<meta http-equiv="content-Type" content="text/html;charset=utf-8">  //旧的HTML,不推荐

<meta charset="utf-8"> //HTML5设定网页字符集的方式,推荐使用UTF-8

B. X-UA-Compatible(浏览器采取何种版本渲染当前页面)

说明:用于告知浏览器以何种版本来渲染页面。(一般都设置为最新模式,在各大框架中这个设置也很常见。) 举例:

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/> //指定IE和Chrome使用最新版本渲染当前页面

C. cache-control(指定请求和响应遵循的缓存机制)

用法1.

说明:指导浏览器如何缓存某个响应以及缓存多长时间。这一段内容我在网上找了很久,但都没有找到满意的。 最后终于在Google Developers中发现了我想要的答案。

cache简介

举例:

<meta http-equiv="cache-control" content="no-cache">

共有以下几种用法:

  1. no-cache: 先发送请求,与服务器确认该资源是否被更改,如果未被更改,则使用缓存。
  2. no-store: 不允许缓存,每次都要去服务器上,下载完整的响应。(安全措施)
  3. public : 缓存所有响应,但并非必须。因为max-age也可以做到相同效果
  4. private : 只为单个用户缓存,因此不允许任何中继进行缓存。(比如说CDN就不允许缓存private的响应)
  5. maxage : 表示当前请求开始,该响应在多久内能被缓存和重用,而不去服务器重新请求。例如:max-age=60表示响应可以再缓存和重用 60 秒。

参考链接:HTTP缓存

用法2.(禁止百度自动转码)

说明:用于禁止当前页面在移动端浏览时,被百度自动转码。虽然百度的本意是好的,但是转码效果很多时候却不尽人意。所以可以在head中加入例子中的那句话,就可以避免百度自动转码了。 举例:

<meta http-equiv="Cache-Control" content="no-siteapp" />

D. expires(网页到期时间)

说明:用于设定网页的到期时间,过期后网页必须到服务器上重新传输。 举例:

<meta http-equiv="expires" content="Sunday 26 October 2016 01:00 GMT" />

E. refresh(自动刷新并指向某页面)

说明:网页将在设定的时间内,自动刷新并调向设定的网址。 举例:

<meta http-equiv="refresh" content="2;URL=http://www.lxxyx.win/"> //意思是2秒后跳转向我的博客

F. Set-Cookie(cookie设定)

说明:如果网页过期。那么这个网页存在本地的cookies也会被自动删除。

<meta http-equiv="Set-Cookie" content="name, date"> //格式

<meta http-equiv="Set-Cookie" content="User=Lxxyx; path=/; expires=Sunday, 10-Jan-16 10:00:00 GMT"> //具体范例

最后

暂时总结的就这么多了,meta标签的自定义属性实在太多了。所以只去找了常用的一些,还有像Window-target这样已经基本被废弃的属性,我也没有添加。 一开始以为一两个小时就能学习完毕,结果没想到竟然花了五六个小时,各处查资料,推敲文字。敲击文字的时候,也感觉自己学习了非常多。比如基本的SEO,HTTP协议的再次理解等。

参考资料