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
 posted on 2019-01-20 23:21  feng_land  阅读(566)  评论(0编辑  收藏  举报