M63-第十三周作业

1、ansible-playbook实现MySQL的二进制部署

1.1 安装ansible

# yum -y install ansible

1.2 配置主机清单文件

# vi /etc/ansible/hosts

[local]

10.0.0.7    ansible_connection=local    #指定连接类型为本地,无需通过ssh连接

[mysql]

10.0.0.17

10.0.0.27

10.0.0.37

1.3 mysql配置文件

# cat /apps/mysql/my.cnf

[mysqld]

user=mysql

datadir=/data/mysql

socket=/data/mysql/mysql.sock

innodb_file_per_table=on

skip_name_resolve = on #禁止主机名解析,建议使用

[client]

port=3306

socket=/data/mysql/mysql.sock

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/data/mysql/mysql.pid

2、ssh免密授权

2.1 使用脚本实现

# bash ssh_key.sh

Generating public/private rsa key pair.

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:laHw87m60FI35AeBGdv5NhU8PW4Ol77WFPssLZK+LEY root@7-1

The key's randomart image is:

+---[RSA 2048]----+

|      . .+o  ... |

|      oo+ =  oo.|

|        = B  o.o|

|        * + o * |

|        S * = * o|

|      o .E= . +.|

|      o ...  . ++|

|      o .o.o oo=|

|        oo o+o.o |

+----[SHA256]-----+

sshpass-1.06-2.el7.x86_64

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

Number of key(s) added: 1

Now try logging into the machine, with:  "ssh -o 'StrictHostKeyChecking=no' '10.0.0.7'"

and check to make sure that only the key(s) you wanted were added.

ssh: connect to host 10.0.0.3 port 22: Connection refused

lost connection

ssh: connect to host 10.0.0.3 port 22: Connection refused

lost connection

known_hosts                                                  100% 1195  619.5KB/s  00:00   

known_hosts                                                                                                                                                100% 1195    1.1MB/s  00:00   

known_hosts                                                                                                                                                100% 1195  604.3KB/s  00:00   

known_hosts                                                                                                                                                100% 1195    1.8MB/s  00:00   

known_hosts                                                                                                                                                100% 1195    1.6MB/s  00:00   

known_hosts                                                                                                                                                100% 1195    1.5MB/s  00:00   

known_hosts                                 

2.2 ssh健康性检查

# ansible mysql -m ping

10.0.0.7 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

10.0.0.17 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

10.0.0.37 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

10.0.0.27 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

2.创建mysql角色相关的文件

[root@ansible mysql]#pwd

/data/ansible/roles/mysql

[root@ansible mysql]#tree

.

├── files

│  ├── my.cnf

│  └── mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz

├── tasks

│  ├── config.yml

│  ├── data.yml

│  ├── group.yml

│  ├── install.yml

│  ├── linkfile.yml

│  ├── main.yml

│  ├── path.yml

│  ├── script.yml

│  ├── secure.yml

│  ├── service.yml

│  ├── unarchive.yml

│  └── user.yml

└── vars

    └── main.yml

3 directories, 15 files

[root@ansible mysql]#ls files/

my.cnf  mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz

[root@ansible mysql]#vim files/my.cnf

[mysqld]

explicit_defaults_for_timestamp=true

server-id=1

log-bin

datadir=/data/mysql

socket=/data/mysql/mysql.sock

[mysqld_safe]

log-error=/data/mysql/mysql.log

pid-file=/data/mysql/mysql.pid

[client]

socket=/data/mysql/mysql.sock

[root@ansible mysql]#vim vars/main.yml

mysql_version: 5.7.36

mysql_file: mysql-{{mysql_version}}-linux-glibc2.12-x86_64.tar.xz

mysql_root_password: 123456

#main.yml 是task的入口文件

[root@ansible mysql]#vim tasks/main.yml

- include: install.yml

- include: group.yml

- include: user.yml

- include: unarchive.yml

- include: linkfile.yml

- include: data.yml

- include: config.yml

- include: script.yml

- include: path.yml

- include: service.yml

- include: secure.yml

[root@ansible mysql]#vim tasks/install.yml

- name: install packages

  yum:

    name:

      - libaio

      - numactl-libs

[root@ansible mysql]#vim tasks/group.yml

- name: create mysql group

  group: name=mysql gid=306

[root@ansible mysql]#vim tasks/user.yml

- name: create mysql user

  user: name=mysql uid=306 group=mysql shell=/sbin/nologin system=yes create_home=no home=/data/mysql

[root@ansible mysql]#vim tasks/unarchive.yml

- name: copy tar to remote host and file mode

  unarchive: src=/data/ansible/roles/mysql/files/mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz dest=/usr/local/owner=root group=root copy=yes

[root@ansible mysql]#vim tasks/linkfile.yml

- name: create linkfile /usr/local/mysql

  file: src=/usr/local/mysql-5.7.36-linux-glibc2.12-x86_64 path=/usr/local/mysql state=link

[root@ansible mysql]#vim tasks/data.yml

- name: data dir

  shell: /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/data/mysql

  tags: data

[root@ansible mysql]#vim tasks/config.yml

- name: config my.cnf

  copy: src=/data/ansible/roles/mysql/files/my.cnf dest=/etc/my.cnf

[root@ansible mysql]#vim tasks/script.yml

- name: service script

  shell: /bin/cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

[root@ansible mysql]#vim tasks/path.yml

- name: PATH variable

  copy: content='PATH=/usr/local/mysql/bin:$PATH' dest=/etc/profile.d/mysql.sh

[root@ansible mysql]#vim tasks/service.yml

- name: enable service

  shell: chkconfig --add mysqld;/etc/init.d/mysqld start

  tags: service

[root@ansible mysql]#vim tasks/secure.yml

- name: change password

  shell: /usr/local/mysql/bin/mysqladmin -uroot password {{mysql_root_password}}

3.在playbook中调用角色

[root@ansible ansible]#vim role_mysql.yml

---

- hosts: webservers

  remote_user: root

  gather_facts: no

  roles:

    - mysql

4.运行playbook

[root@ansible ansible]#ansible-playbook -C role_mysql.yml

[root@ansible ansible]#ansible-playbook  role_mysql.yml

PLAY [webservers] ****************************************************************************************************

TASK [mysql : install packages] **************************************************************************************

ok: [10.0.0.17]

TASK [create mysql group] ********************************************************************************************

ok: [10.0.0.17]

TASK [create mysql user] *********************************************************************************************

ok: [10.0.0.17]

TASK [mysql : copy tar to remote host and file mode] *****************************************************************

changed: [10.0.0.17]

TASK [create linkfile /usr/local/mysql] ******************************************************************************

ok: [10.0.0.17]

TASK [mysql : data dir] **********************************************************************************************

changed: [10.0.0.17]

TASK [mysql : config my.cnf] *****************************************************************************************

changed: [10.0.0.17]

TASK [mysql : service script] ****************************************************************************************

changed: [10.0.0.17]

TASK [mysql : PATH variable] *****************************************************************************************

changed: [10.0.0.17]

TASK [mysql : enable service] ****************************************************************************************

changed: [10.0.0.17]

TASK [mysql : change password] ***************************************************************************************

changed: [10.0.0.17]

PLAY RECAP ***********************************************************************************************************

10.0.0.17                  : ok=11  changed=7    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

[root@centos7 ~]#ss -ntl

State      Recv-Q Send-Q              Local Address:Port                            Peer Address:Port

LISTEN    0      128                            *:22                                          *:*

LISTEN    0      100                    127.0.0.1:25                                          *:*

LISTEN    0      80                          [::]:3306                                    [::]:*

LISTEN    0      128                          [::]:22                                      [::]:*

LISTEN    0      100                        [::1]:25                                      [::]:*

[root@centos7 ~]#mysql --version

mysql  Ver 14.14 Distrib 5.7.36, for linux-glibc2.12 (x86_64) using  EditLine wrapper

[root@centos7 ~]#mysql -uroot -p123456 -Dmysql

mysql> show databases;

+--------------------+

| Database          |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| sys                |

+--------------------+

2、Ansible playbook实现apache批量部署,并对不同主机提供以各自IP地址为内容的index.html

1、基于key验证免密授权

1.1 生成kekgen

# ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Created directory '/root/.ssh'.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:6XyhlugUDjs1ntsb4GCu0fPuwBCSEOhrPjU56RJ6xxE root@8-2

The key's randomart image is:

+---[RSA 3072]----+

|+.              |

|o.              |

|+ .              |

| o .E    .      |

|  o *.= S .      |

| + %.O O o .    |

|+ [email protected] B .      |

|.+.+oB + o      |

| .+. o* o.      |

+----[SHA256]-----+

1.2 复制到远程客户端

# ssh-copy-id [email protected]

# ssh-copy-id [email protected]

# ssh-copy-id [email protected]

# ssh-copy-id [email protected]

# ssh-copy-id [email protected]

2、ansible服务器配置

2.1 使用yum仓库安装

# yum -y install ansible

2.2 配置主机清单

# vi /etc/ansible/hosts

[local]

10.0.0.7    ansible_connection=local    #指定连接类型为本地,无需通过ssh连接

[webserver]

10.0.0.17

10.0.0.27

10.0.0.37

10.0.0.8

10.0.0.18

2.3 检查服务端到远程主机的健康性

# ansible all -m ping  #显示绿色表示健康

10.0.0.7 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

10.0.0.37 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

10.0.0.8 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/libexec/platform-python"

    },

    "changed": false,

    "ping": "pong"

}

10.0.0.18 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/libexec/platform-python"

    },

    "changed": false,

    "ping": "pong"

}

10.0.0.27 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

10.0.0.17 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

2.4 准备工作

# cd /apps/httpd

# wget https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.51.tar.bz2 --no-check-certificate

# wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.7.0.tar.bz2  --no-check-certificate

# wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.6.1.tar.bz2 --no-check-certificate

# vi /apps/httpd/httpd.service

[Unit]

Description=The Apache HTTP Server

After=network.target remote-fs.target nss-lookup.target

Documentation=man:httpd(8)

Documentation=man:apachectl(8)

[Service]

Type=forking

ExecStart=/apps/httpd/bin/apachectl start

ExecReload=/apps/httpd/bin/apachectl graceful

ExecStop=/apps/httpd/bin/apachectl stop

# We want systemd to give httpd some time to finish gracefully, but still want

# it to kill httpd after TimeoutStopSec if something went wrong during the

# graceful stop. Normally, Systemd sends SIGTERM signal right after the

# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give

# httpd time to finish.

KillSignal=SIGCONT

PrivateTmp=true

[Install]

WantedBy=multi-user.target

EOF

systemctl daemon-reload

systemctl enable --now httpd.service

# ls  #最终准备好四个文件

apr-1.7.0.tar.bz2  apr-util-1.6.1.tar.bz2  httpd-2.4.51.tar.bz2  httpd.service

2.5 准备playbook

# cat install_httpd.yml

---

# install httpd

# 需要将相关文件放到如下目录

# tree /apps/httpd/

# apps/httpd/

# ├── apr-1.7.0.tar.bz2

# ├── apr-util-1.6.1.tar.bz2

# ├── httpd-2.4.51.tar.bz2

# └── httpd.service

- hosts: webserver

  remote_user: root

  gather_facts: no

  vars:

    data_dir: /usr/local/src

    base_dir : /apps/httpd

    install_dir: /apps/httpd

    httpd_version: httpd-2.4.51

    apr_version: apr-1.7.0

    apr_util_version: apr-util-1.6.1

    httpd_url: https://mirrors.tuna.tsinghua.edu.cn/apache/httpd

    apr_url: https://mirrors.tuna.tsinghua.edu.cn/apache/apr

  tasks :

    - name : install packages

      yum : name=gcc,make,pcre-devel,openssl-devel,expat-devel,bzip2 state=installed

    - name : download httpd file

      unarchive :

        src: "{{ base_dir }}/{{ httpd_version }}.tar.bz2"

        dest: "{{ data_dir }}"

        owner: root

        copy: yes

    - name : download apr file

      unarchive :

        src: "{{ base_dir }}/{{ apr_version }}.tar.bz2"

        dest: "{{ data_dir }}"

        owner: root

        copy: yes

    - name : download apr_util file

      unarchive :

        src: "{{ base_dir }}/{{ apr_util_version }}.tar.bz2"

        dest: "{{ data_dir }}"

        owner: root

        copy: yes

    - name : prepare apr dir

      shell: mv {{ apr_version }} {{ httpd_version }}/srclib/apr

      args:

        chdir: "{{ data_dir }}"

    - name : prepare apr_util dir

      shell : mv {{ apr_util_version }} {{ httpd_version }}/srclib/apr-util

      args:

        chdir: "{{ data_dir }}"

    - name : build httpd

      shell : ./configure --prefix={{ install_dir }} --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-enablempms-shared=all --with-mpm=prefork && make -j && make install

      args:

        chdir: "{{ data_dir }}/{{ httpd_version }}"

    - name : create group

      group : name=apache gid=80 system=yes

    - name : create user

      user : name=apache uid=80 group=apache shell=/sbin/nologin system=yes create_home=no home={{ install_dir }}/conf/httpd

    - name : set httpd user

      lineinfile : path={{ install_dir }}/conf/httpd.conf regexp='^User' line='User apache'

    - name : set httpd group

      lineinfile : path={{ install_dir }}/conf/httpd.conf regexp='^Group' line='Group apache'

    - name : set variable PATH

      shell : echo PATH={{ install_dir }}/bin:$PATH >> /etc/profile.d/httpd.sh

    - name : copy service file to remote

      copy:

        src: "{{ base_dir }}/httpd.service"

        dest: /usr/lib/systemd/system/httpd.service

    - name : start service

      service : name=httpd state=started enabled=yes

2.6 批量安装

# ansible-playbook install_httpd.yml

PLAY [webserver] ****************************************************************************************************************************************************************************

TASK [install packages] *********************************************************************************************************************************************************************

changed: [10.0.0.8]

changed: [10.0.0.37]

changed: [10.0.0.17]

changed: [10.0.0.27]

changed: [10.0.0.18]

TASK [download httpd file] ******************************************************************************************************************************************************************

changed: [10.0.0.17]

changed: [10.0.0.27]

changed: [10.0.0.37]

changed: [10.0.0.18]

changed: [10.0.0.8]

TASK [download apr file] ********************************************************************************************************************************************************************

changed: [10.0.0.17]

changed: [10.0.0.37]

changed: [10.0.0.27]

changed: [10.0.0.18]

changed: [10.0.0.8]

TASK [download apr_util file] ***************************************************************************************************************************************************************

changed: [10.0.0.37]

changed: [10.0.0.17]

changed: [10.0.0.27]

changed: [10.0.0.8]

changed: [10.0.0.18]

TASK [prepare apr dir] **********************************************************************************************************************************************************************

changed: [10.0.0.37]

changed: [10.0.0.27]

changed: [10.0.0.17]

changed: [10.0.0.18]

changed: [10.0.0.8]

TASK [prepare apr_util dir] *****************************************************************************************************************************************************************

changed: [10.0.0.27]

changed: [10.0.0.37]

changed: [10.0.0.17]

changed: [10.0.0.18]

changed: [10.0.0.8]

TASK [build httpd] **************************************************************************************************************************************************************************

changed: [10.0.0.17]

changed: [10.0.0.37]

changed: [10.0.0.27]

changed: [10.0.0.18]

changed: [10.0.0.8]

TASK [create group] *************************************************************************************************************************************************************************

changed: [10.0.0.27]

changed: [10.0.0.37]

changed: [10.0.0.17]

changed: [10.0.0.18]

changed: [10.0.0.8]

TASK [create user] **************************************************************************************************************************************************************************

changed: [10.0.0.27]

changed: [10.0.0.37]

changed: [10.0.0.17]

changed: [10.0.0.8]

changed: [10.0.0.18]

TASK [set httpd user] ***********************************************************************************************************************************************************************

changed: [10.0.0.27]

changed: [10.0.0.17]

changed: [10.0.0.37]

changed: [10.0.0.8]

changed: [10.0.0.18]

TASK [set httpd group] **********************************************************************************************************************************************************************

changed: [10.0.0.37]

changed: [10.0.0.27]

changed: [10.0.0.17]

changed: [10.0.0.18]

changed: [10.0.0.8]

TASK [set variable PATH] ********************************************************************************************************************************************************************

changed: [10.0.0.17]

changed: [10.0.0.27]

changed: [10.0.0.37]

changed: [10.0.0.18]

changed: [10.0.0.8]

TASK [copy service file to remote] **********************************************************************************************************************************************************

changed: [10.0.0.27]

changed: [10.0.0.37]

changed: [10.0.0.17]

changed: [10.0.0.18]

changed: [10.0.0.8]

TASK [start service] ************************************************************************************************************************************************************************

changed: [10.0.0.17]

changed: [10.0.0.8]

changed: [10.0.0.18]

changed: [10.0.0.37]

changed: [10.0.0.27]

PLAY RECAP **********************************************************************************************************************************************************************************

10.0.0.17                  : ok=14  changed=14  unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

10.0.0.18                  : ok=14  changed=14  unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

10.0.0.27                  : ok=14  changed=14  unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

10.0.0.37                  : ok=14  changed=14  unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

10.0.0.8                  : ok=14  changed=14  unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

2.7 测试

# curl 10.0.0.17

It works!

# curl 10.0.0.27

It works!

# curl 10.0.0.37

It works!

# curl 10.0.0.8

It works!

# curl 10.0.0.18

It works!

# 测试完成,批量安装成功


3、http的报文结构和状态码总结

HTTP的报文分为请求报文和响应报文

HTTP请求报文:由三个部分组成,即开始行、首部行和实体主体

在请求报文中,开始行就是请求行。

request报文格式:

HTTP响应报文:开始行是状态行

状态行包括三项内容,即HTTP的版本,状态码以及解释状态码的简单短语

response报文格式:

Method方法:

请求方法,标明客户端希望服务器对资源执行的动作,包括以下:

GET: 从服务器获取一个资源

HEAD: 只从服务器获取文档的响应首部

POST: 向服务器输入数据,通常会再由网关程序继续处理

PUT: 将请求的主体部分存储在服务器中,如上传文件

DELETE: 请求删除服务器上指定的文档

TRACE: 追踪请求到达服务器中间经过的代理服务器

OPTIONS:请求服务器返回对指定资源支持使用的请求方法

CONNECT:建立一个到由目标资源标识的服务器的隧道

PATCH:用于对资源应用部分修改

version版本:

HTTP/.

如:HTTP/1.1

reason-phrase:原因短语,状态码所标记的状态的简要描述

headers首部字段头:首部字段包含的信息最为丰富。首部字段同时存在于请求报文和响应报文内,并涵盖 HTTP 报文相关的内容信息。使用首部字段是为了给客户端和服务器端提供报文主体大小、所使用的语言、认证信息等内容。

首部字段是由首部字段名和字段值构成的,中间用冒号":”分隔字段值对应,即key/value 键/值对单个HTTP首部字段可以有多个值。

entity-body:实体,请求时附加的数据或响应时附加的数据,例如:登录网站时的用户名和密码,博客的上传文章,论坛上的发言等。

一、首部的分类:

1、通用首部:请求报文和响应报文两方都会使用的首部

2、请求首部:从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、请求内容相关优先级等信息

3、响应首部:从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息

4、实体首部:针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的的信息

5、协商首部:某资源有多种表示方法时使用

1.1通用首部:

Date:报文的创建时间

Connection:连接状态,如keep-alive, close

Via:显示报文经过的中间节点(代理,网关)

Cache-Control:控制缓存,如缓存时长

MIME-Version:发送端使用的MIME版本

Warning:错误通知

1.2请求首部:

Accept:通知服务器自己可接受的媒体类型

Accept-Charset: 客户端可接受的字符集

Accept-Encoding:客户端可接受编码格式,如gzip

Accept-Language:客户端可接受的语言

Client-IP:请求的客户端IP

Host:请求的服务器名称和端口号

Referer:跳转至当前URI的前一个URL

User-Agent:客户端代理,浏览器版本

条件式请求首部:

Expect:允许客户端列出某请求所要求的服务器行为

If-Modified-Since:自从指定的时间之后,请求的资源是否发生过修改

If-Unmodified-Since:与上面相反

If-None-Match:本地缓存中存储的文档的ETag标签是否与服务器文档的Etag不匹配

If-Match:与上面相反

安全请求首部:

Authorization:向服务器发送认证信息,如账号和密码

Cookie:客户端向服务器发送cookie

代理请求首部:

Proxy-Authorization:向代理服务器认证

1.3响应首部:

信息性:

Age:从最初创建开始,响应持续时长

Server:服务器程序软件名称和版本

安全响应首部:

Set-Cookie:向客户端设置cookie

WWW-Authenticate:来自服务器对客户端的质询列表

1.4实体首部:

Allow:列出对此资源实体可使用的请求方法

Location:告诉客户端真正的实体位于何处

Content-Encoding:对主体执行的编码

Content-Language:理解主体时最适合的语言

Content-Length:主体的长度

Content-Location:实体真正所处位置

Content-Type:主体的对象类型,如text

1.5协商首部:

Accept-Ranges:服务器可接受的请求范围类型

Vary:服务器查看的其它首部列表

缓存相关:

ETag:实体的扩展标签

Expires:实体的过期时间

Last-Modified:最后一次修改的时间

二、HTTP状态码

status:状态码,HTTP状态码是用来表示网页服务器HTTP响应状态的3位数字代码。

http协议状态码分类:

1xx:100-101 信息提示

2xx:200-206 成功

3xx:300-307 重定向

4xx:400-415 错误类信息,客户端错误

5xx:500-505 错误类信息,服务器端错误

2.1常见的HTTP状态码

200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。

301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。

302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。

400 (错误请求) 服务器不理解请求的语法。

401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。

403 (禁止) 服务器拒绝请求。

404 (未找到) 服务器找不到请求的网页。

500 (服务器内部错误) 服务器遇到错误,无法完成请求。

502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。

503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。

504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。

你可能感兴趣的:(M63-第十三周作业)