1、http协议
0、监听(扩展)
bash
yum install nc
#双端安装
nc -l 80
#服务器监听80端口
nc 192.168.64.100 80
#客户端访问80端口
1、http概念
互联网 :是网络的网络,是所有类型网络的母集
因特网 :世界上最大的互联网网络
万维网 (www):是一个大规模的、联机式的信息贮藏库
URL :是万维网使用的统一资源定位符,用于来标志 万维网上的各种文档
HTTP :超文本传送协议,应用层协议,使用TCP传输层协议进行可靠的传送
HTML : 通过使用超文本标记语言,使万维网页面设计者可以很方便地用链接从页面的某处链接到因特网的任何一个万维网页面,访问者点击链接即可快速访问另一个网站
2、http访问过程
1、建立连接
接收或拒绝连接请求
2、接受请求
接收客户端请求报文中对某资源的一次请求的过程(常用多进程I/O模型 和复用的多进程I/O模型)
-
单进程I/O模型 :启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应
-
多进程I/O模型 :并行启动多个进程,每个进程响应一个连接请求
-
复用I/O结构 :启动一个进程,同时响应N个连接请求
-
复用的多进程I/O模型 :启动M个进程 ,每个进程响应N个连接请求,同时接收M*N个请求
3、处理请求
服务器对请求报文 进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理
4、访问资源
服务器获取请求报文 中请求的资源web服务器 ,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源
(资源可以分为静态和动态资源,区别静态和动态资源:看源代码,静态资源就是文件,动态资源需要占用cpu内存 )
5、构建响应报文
一旦Web服务器识别,就执行请求方法中描述的动作,并返回响应报文,响应报文中包含有响应状态码、响应首部,如果生成了响应主体的话,还会包含响应主体
wed语言:html,css,js
mime类型:将文件格式写入mime配置文件 中,当你网页访问文件时,如果该文件的格式存在于mime配置文件中,就在网页上显示 ,如果不存在,则进行下载(配置文件 /etc/mime.types)
URI 重定向:分为 URL URN URN:提供文件名称(比如p2p下载磁力链接)
URL:提供文件位置
6、发送响应报文
在响应报文构建完成后进行发送,当发送完成后,服务器会断开该链接,防止资源被占用,若该连接为持久连接,则保持连接,并根据content-length头部,分辨什么时候断开连接
7、记录日志
当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务
3、报文结构
http 版本和其功能
- 0.9 只能下载
- 1.0 可以上传也可以下载
- 1.1 支持长连接(默认长连接)
http 协议:stateless 无状态(默认 ),不知道你是谁,无法持续追踪访问者来源
解决 http 协议无状态方法
-
cookie 客户端存放
-
session 服务端存放
http 事务:一次访问的过程
-
请求:request
-
响应:response
1、请求报文
方法:这个报文的目的
URL:指明这个文件的具体位置
2、响应报文
2、配置
rpm -qc httpd
主配置文件:/etc/httpd/conf/httpd.conf
子配置文件:/etc/httpd/
查看配置文件格式是否有错:httpd -t
隐藏服务器版本信息:
持久连接:默认开启,关闭后,下载一个直接关闭连接
虚拟机:
-
基于ip:为每个虚拟主机准备至少一个ip地址
-
基于port:为每个虚拟主机使用至少一个独立的port
-
基于FQDN:为每个虚拟主机使用至少一个FQDN,请求报文中首部 Host:<www.kgc.com>
基于ip
bash
vim /etc/httpd/conf.d/test.conf
<VirtualHost 192.168.64.100:80>
ServerAdmin support@jfedu.net
DocumentRoot "/var/www/html/accp"
ServerName www.accp.com
ErrorLog "logs/www.accp.com_error_log"
CustomLog "logs/www.accp.com_access_log" common
</VirtualHost>
<VirtualHost 192.168.64.200:80>
ServerAdmin support@jfedu.net
DocumentRoot "/var/www/html/accp"
ServerName www.accp.com
ServerAlias www.dummy-host.example.com
ErrorLog "logs/www.accp.com_error_log"
CustomLog "logs/www.accp.com_access_log" common
</VirtualHost>
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
vim /etc/httpd/conf/httpd.conf
Listen 192.168.64.100:80
Listen 192.168.64.200:80
基于端口
bash
vim /etc/httpd/conf.d/test.conf
<VirtualHost 192.168.64.100:80>
ServerAdmin support@jfedu.net
DocumentRoot "/var/www/html/acp"
ServerName www.acp.com
ErrorLog "logs/www.acp.com_error_log"
CustomLog "logs/www.acp.com_access_log" common
</VirtualHost>
<VirtualHost 192.168.64.200:8080>
ServerAdmin support@jfedu.net
DocumentRoot "/var/www/html/acp"
ServerName www.acp.com
ServerAlias www.dumy-host.example.com
ErrorLog "logs/www.acp.com_error_log"
CustomLog "logs/www.acp.com_access_log" common
</VirtualHost>
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
vim /etc/httpd/conf/httpd.conf
Listen 192.168.64.100:80
Listen 192.168.64.200:80
基于域名
bash
vim /etc/httpd/conf.d/test.conf
<VirtualHost 192.168.64.100:80>
ServerAdmin support@jfedu.net
DocumentRoot "/var/www/html/kc"
ServerName www.kc.com
ErrorLog "logs/www.kc.com_error_log"
CustomLog "logs/www.kc.com_access_log" common
</VirtualHost>
<VirtualHost 192.168.64.200:80>
ServerAdmin support@jfedu.net
DocumentRoot "/var/www/html/accp"
ServerName www.accp.com
ServerAlias www.dummy-host.example.com
ErrorLog "logs/www.accp.com_error_log"
CustomLog "logs/www.accp.com_access_log" common
</VirtualHost>
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
mkdir -p /var/www/html/kc
mkdir -p /var/www/html/accp
echo "<h1>www.kc.com</h1>" /var/www/html/kc/index.html
echo "<h1>www.accp.com</h1>" /var/www/html/accp/index.html
3、cookie session
场景需要状态:购物、会话等
用cookie session让http保持状态
cookie:在请求和响应报文中写入cookie信息
session:把cookie信息留在本地,用session提取其中的信息传给web
cookie缺点:
1、使用cookie来传递信息,随着cookie个数的增多和访问量的增加,它占用的网络带宽也很大,试想假如cookie占用200字节,如果一天的PV有几个亿,那么它要占用多少带宽?
2、cookie并不安全,因为cookie是存放在客户端的,所以这些cookie可以被访问到,设置可以通过插件添加、修改cookie。所以从这个角度来说,我们要使用sesssion,session是将数据保存在服务端的,只是通过cookie传递一个sessionId而已,所以session更适合存储用户隐私和重要的数据
session 缺点:
1、不容易在多台服务器之间共享,可以使用session绑定,session复制,session共享解决
2、session存放在服务器中,所以session如果太多会非常消耗服务器的性能cookie和session各有优缺点,在大型互联网系统中,单独使用cookie和session都是不可行的