http服务介绍
http协议,全称Hyper Text Transfer Protocol,中文名为超文本传输协议,是互联网中最常用的一种网络协议。HTTP的重要应用之一是WWW服务。设计HTTP协议最初的目的就是提供一种发布和接收HTML(一种页面标记语言)页面的方法。
www全称World Wide Web,常称为web,中文译为“万维网”
http协议版本
http/1.0规定浏览器和服务器只保持短暂的连接(TCP短连接)
http/1.1支持持久连接,在一个TCP连接上可以传输多个HTTP请求和响应,减少了建立和关闭连接的消耗和时间延迟(TCP长连接)
http协议原理
在linux系统中查看报文的方法
[root@agent conf]# curl -v http://www.baidu.com
* About to connect() to www.baidu.com port 80 (#0)
* Trying 61.135.169.125...
* Connected to www.baidu.com (61.135.169.125) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: www.baidu.com
> Accept: */*
>
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: Keep-Alive
< Content-Length: 2381
< Content-Type: text/html
< Date: Sun, 20 Jan 2019 12:24:47 GMT
< Etag: "588604c4-94d"
< Last-Modified: Mon, 23 Jan 2017 13:27:32 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
>表示http请求报文
<表示http响应报文
http请求方法
HTTP请求方法 | 作用描述 |
---|---|
GET | 客户端请求指定资源,服务器返回指定资源 |
HEAD | 只请求响应报文中的HTTP首部 |
POST | 将客户端的数据提交到服务器,例:注册表单 |
PUT | 用从客户端向服务器传送的数据取代指定的文档内容 |
DELETE | 请求服务器删除Request-URI所表示的资源 |
MOVE | 请求服务器将指定的页面移至另一个网络地址 |
http请求过程
请求报文格式 | 报文信息 | 说明 |
---|---|---|
请求行 | GET/HTTP/1.1 | 请求的起始行(请求什么信息;协议版本) |
请求头 | > User-Agent: curl/7.29.0 > Host: www.baidu.com > Accept: / | 请求头部信息(客户端有关信息说明) |
空行 | 空行信息(隔离上下文,说明请求结束) | |
请求报文主体 | 请求主体内容(只有POST方法可以提交主体) |
请求头信息说明
请求头内容 | 说明 |
---|---|
Host | 接受请求的服务器地址,可以是IP:PORT,也可以是域名 |
User-Agent | 发送请求的应用程序名称 |
Connection | 指定与连接相关的属性,如Connection:Keep-Alive |
Accept-Charset | 通知服务端可以发送的编码格式 |
Accept-Encoding | 通知服务端可以发送的数据压缩格式
http响应过程
响应报文格式 | 报文信息 | 说明 |
---|---|---|
起始行(响应行) | HTTP/1.1 200 OK | 响应的起始行(响应状态码,状态信息) |
响应头部 | Accept-Ranges: bytes Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform Connection: Keep-Alive Content-Length: 2381 Content-Type: text/html Date: Sun, 20 Jan 2019 12:24:47 GMT Etag: "588604c4-94d" Last-Modified: Mon, 23 Jan 2017 13:27:32 GMT Pragma: no-cache Server: bfe/1.0.8.18 Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/ |
响应头部信息(服务器有关信息介绍) |
空行 | 空行信息(隔离上下文,说明响应头结束) | |
响应报文主体 | ... |
响应主体内容(请求后进行响应的返回的内容信息) |
响应头信息说明
响应头 | 说明 |
---|---|
Server | 服务器应用程序软件的名称和版本 |
Content-Type | 响应一方面文的类型(图片还是二进制字符串) |
Content-Length | 响应正文长度 |
Content-Charset | 响应正文使用的编码 |
content-encoding | 响应正文使用的数据压缩格式 |
Content-Language | 响应正文使用的语言 |
HTTP协议状态码
HTTP状态码(HTTP Status Code)是用来表示web服务器响应HTTP请求状态的数字代码。每当web客户端向web服务器发送一个HTTP请求时,web服务器都会返回一个状态响应代码。这个状态码是一个三位数字代码,作用是告知web客户端此次请求是否成功,或者是否要采取其他的动作方式。
不同范围的状态码及其对应的作用
状态码范围 | 作用描述 |
---|---|
100-199 | 用于指定客户端相应的某些动作 |
200-299 | 用于表示请求成功 |
300-399 | 用于已经移动的文件,并且常被包含在定位头信息中指定新的地址信息 |
400-499 | 用于指出客户端的错误 |
500-599 | 用于指出服务端的错误 |
常见的状态码
代码 | 代码说明 |
---|---|
301 Moved Permanently(永久跳转) | 请求的网页已永久跳转到新位置 |
403 Forbidden(禁止访问) | 服务器拒绝请求 |
404 Nout Found | 服务器找不到请求的页面 |
500 | 内部服务器错误 |
502 | 网关错误,一般是网关服务器请求后端服务时,后端服务没有按照http协议正确返回结果 |
503 Service Unavailable | 可能因为超载或停机维护 |
504 Gateway Timeout | 一般是网关服务器请求后端服务时,后端服务没有在特定的时间内完成服务 |
网站流量度量术语
PV | 独立IP数度量值 |
---|---|
PV | 页面流量次数 |
UV | 独立访客数 |
cookie和session区别
-
cookie存放在浏览器缓存中
-
cookie的格式信息是由开发人员进行定义,所以不同的网站所生成的cookie信息内容不太一致
-
cookie数据存放在客户的浏览器上
-
cookie不是很安全,别人可以分析存放在本地cookie并进行cookie欺骗
-
cookie不占用服务器端资源,提升了服务器性能
-
cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie
-
session存放在服务器的内存中
-
session数据放在服务器上
-
session从数据库的安全应用方面会更安全些
-
session会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能
httpd基于用户的访问控制
创建文件/etc/httpd/conf.d/basic.conf,内容如下
<Directory "var/www/html">
Options Indexes
AllowOverride None
AuthType Basic
AuthName "Please Enter Password:"
AuthUserFile "/etc/httpd/user"
Require valid-user
</Directory>
创建用户
htpasswd -c /etc/httpd/user tom
打开网页测试,需要输入用户名、密码
虚拟主机
基于IP的虚拟主机
创建虚拟主机配置文件
<VirtualHost 192.168.2.72:80>
DocumentRoot "/data/www/sitea"
ServerName www1.example.com
<Directory "/data/www/sitea" >
Options FollowSymLinks
AllowOverride None
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
<VirtualHost 192.168.2.172:80>
DocumentRoot "/data/www/siteb"
ServerName www2.example.org
<Directory "/data/www/siteb" >
Options FollowSymLinks
AllowOverride None
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
增加IP地址,创建文件略去,测试结果
[root@localhost conf.d]# curl http://192.168.2.72/index.html
aaaaaaaaaaaa
[root@localhost conf.d]# curl http://192.168.2.172/index.html
bbbbbbbbbbbbbbbb
~
基于端口的虚拟主机
创建虚拟主机配置文件:
Listen 8080
<VirtualHost 192.168.2.72:80>
DocumentRoot "/data/www/sitea"
ServerName www1.example.com
<Directory "/data/www/sitea" >
Options FollowSymLinks
AllowOverride None
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
<VirtualHost 192.168.2.72:8080>
DocumentRoot "/data/www/siteb"
ServerName www2.example.org
<Directory "/data/www/siteb" >
Options FollowSymLinks
AllowOverride None
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
测试结果:
[root@localhost conf.d]# curl http://192.168.2.72/index.html
aaaaaaaaaaaa
[root@localhost conf.d]# curl http://192.168.2.72:8080/index.html
bbbbbbbbbbbbbbbb
基于域名的虚拟主机
创建虚拟主机配置文件:
<VirtualHost *:80>
DocumentRoot "/data/www/sitea"
ServerName www.sitea.com
<Directory "/data/www/sitea" >
Options FollowSymLinks
AllowOverride None
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/data/www/siteb"
ServerName www.siteb.com
<Directory "/data/www/siteb" >
Options FollowSymLinks
AllowOverride None
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
测试结果:
[root@localhost conf.d]# curl http://www.sitea.com/index.html
aaaaaaaaaaaa
[root@localhost conf.d]# curl http://www.siteb.com/index.html
bbbbbbbbbbbbbbbb
sitea.com实现https访问
创建私有CA
(umask 077 ; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
生成根证书
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3653
创建必须的文件
~]# touch /etc/pki/CA/index.txt
~]# echo 01 > /etc/pki/CA/serial
为sitea提供证书
创建服务器的私钥文件
~]# mkdir /etc/httpd/conf/ssl
~]# cd /etc/httpd/conf/ssl
ssl]# (umask 077 ; openssl genrsa -out httpd.key 4096)
生成证书请求文件
ssl]# openssl req -new -key httpd.key -out httpd.csr -days 3653
在CA上为sitea签发证书
ssl]# openssl ca -in httpd.csr -out httpd.crt -days 365
安装mod_ssl模块
修改ssl配置文件如下
SSLCertificateFile /etc/httpd/conf/ssl/httpd.crt
<directory "/data/www/sitea">
AllowOverride None
Options None
Require all granted
</Directory>
DocumentRoot "/data/www/sitea"
ServerName www.sitea.com:443
SSLCertificateKeyFile /etc/httpd/conf/ssl/httpd.key
测试访问
[root@localhost ssl]# curl -k https://www.sitea.com
aaaaaaaaaaaa