MIME是一种互联网标准,是一种用于标识文件类型的方法。
MIME类型由一个主类型和一个子类型组成,用斜杠(/)分隔,MIME类型的作用是告诉接收方如何解释和处理接收到的文件
#常见范例
text/plain #纯文本文件
text/html #HTML网页文件
text/css #CSS媒体文件
image/jpeg #JPEG格式图片文件
image/png #PNG格式图片文件
video/mp4 #MP4格式音频文件
audio/mpeg #MP3格式音频文件
URI: Uniform Resource Identifier 统一资源标识,分为URL 和 URN
URL:Uniform Resorce Locator,统一资源定位符,用于描述某服务器某特定资源位置
定义范围:URI是一个广义的概念,用于标识和命名互联网上的资源,可以是URL、URN或其他形式。URL是URI的一种具体实现形式,用于资源的定位和访问。
功能重点:URI强调资源的标识性,用于唯一标识和命名资源。URL则更注重资源的位置性,其中包含了定位和访问资源所需的详细信息。
URL格式范例:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#
scheme:方案,访问服务器以获取资源时要使用哪种协议
user:用户,某些方案访问资源时需要的用户名
password:密码,用户对应的密码,中间用:分隔
Host:主机,资源宿主服务器的主机名或IP地址
port:端口,资源宿主服务器正在监听的端口号,很多方案有默认端口号
path:路径,服务器资源的本地名,由一个/将其与前面的URL组件分隔
params:参数,指定输入的参数,参数为名/值对,多个参数,用;分隔
query:查询,传递参数给程序,如数据库,用?分隔,多个查询用&分隔
frag:片段,一小片或一部分资源的名字,此组件在客户端使用,用#分隔
静态和动态资源的区别在于需不需要服务器进行二次加工
静态资源无需二次加工即直接使用
但动态资源需要二次加工
静态资源指的是在服务器上保存的文件,其内容在请求和传输过程中不发生变化。
静态资源可以是图片、CSS样式表、JavaScript文件、HTML文件等。
静态资源的请求一般是通过URL直接访问,当客户端发送请求时,服务器直接将这些文件返回给客户端,不进行任何处理。
动态资源则是在服务器端通过执行脚本或程序生成的内容,需要占用服务器的资源。
服务器会根据请求中的参数和数据,执行相应的脚本或程序来生成动态内容,然后将生成的内容返回给客户端。
动态资源可以是动态网页、API接口等。
超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应
http 0.9 :服务器只能回应HTML格式字符串,不能回应别的格式
http 1.0 :每个TCP连接只能发送一个请求,发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接引入了POST命令和HEAD命令头信息是 ASCII 码,后面数据可为任何格式
http 1.1 :支持持久连接,即在一个TCP连接里面完成多个http请求和响应,但是每个请求和响应是按照顺序一一对应的
http 2.0 :支持完全多路复用,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应( 也支持压缩,服务端主动推送)
HTTP定义了一组请求方法,用于指定客户端对资源的操作方式
方法名 | 作用 |
---|---|
GET | 获取资源 |
HEAD | 获取报文首部,主要用于确认 URL 的有效性以及资源更新的日期时间等 |
POST | 传输实体主体 (比如传输 用户名密码) |
PUT | 上传文件(比如写博客) |
PATCH | 对资源进行部分修改 |
DELETE | 删除文件 |
OPTIONS | 查询支持的方法(查看服务端可以支持哪些方法) |
CONNECT | 要求在与代理服务器通信时建立隧道(类似加密) |
TRACE | 追踪路径 |
接收或拒绝连接请求
接收客户端请求报文中对某资源的一次请求的过程
服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理
服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源
一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文
Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束
最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务
1xx:100-101 信息提示
2xx:200-206 成功
3xx:300-307 重定向
4xx:400-415 错误类信息,客户端错误
5xx:500-505 错误类信息,服务器端错误
状态码 | 含义 |
---|---|
200 | 成功,请求数据通过响应报文的entity-body部分发送;OK |
301 | 请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved Permanently |
302 | 响应报文Location指明资源临时新位置 Moved Temporarily |
304 | 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not Modified |
307 | 浏览器内部重定向 |
401 | 需要输入账号和密码认证方能访问资源;Unauthorized |
403 | 请求被禁止;Forbidden |
404 | 服务器无法找到客户端请求的资源;Not Found |
500 | 服务器内部错误;Internal Server Error,比如:cgi程序没有执行权限 |
502 | 代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad Gateway |
503 | 服务不可用,临时服务器维护或过载,服务器无法处理请求, |
504 | 网关超时 |
#request 报文格式
<method> <request-URL> <version>
<headers>
<entity-body>
第一行为请求行,包含请求方法、请求目标和HTTP协议版本号
第二行为请求头部,包含与请求相关的各种元数据信息
空行用于分隔头部和请求体的空行
第四行为请求体,可选项,包含实际的请求数据
示例:
curl 192.168.67.100|head
#状态行
> GET / HTTP/1.1
#HTTP GET请求,即获取指定路径的内容,请求的路径为根路径("/"),表示请求服务器的默认页面
#头部字段
> User-Agent: curl/7.29.0
#指定客户端使用的User-Agent,该请求由curl/7.29.0发送
> Host: 192.168.67.100
#指定了要访问的服务器的主机地址
> Accept: */*
#指定了客户端可以接受的响应内容的类型,表示客户端可以接受任何类型的内容
response报文格式
<version> <status> <reason-phrase>
<headers>
<entity-body>
第一行为状态行,状态行由协议版本,状态码,状态码描述三部分组成。
第二行为响应头部,响应头包含与响应相关的各种元数据信息。
第三行为空行,用于分隔头部和响应体的空行。
第四行为响应体,可选项,包含实际的响应数据。
示例:
curl -v 192.168.67.100|head
#响应状态行
HTTP/1.1 403 Forbidden
#表示请求被拒绝 状态403表示请求被禁止
头部字段
Date: Thu, 24 Aug 2023 06:13:43 GMT
#报文的创建时间
Server: Apache/2.4.6 (CentOS)
#服务器程序软件名称和版本
Last-Modified: Thu, 16 Oct 2014 13:20:58 GMT
#表示所请求资源的最后修改日期和时间
ETag: "1321-5058a1e728280"
#表示所请求资源的实体标签
Accept-Ranges: bytes
#服务器可接受的请求范围类型
Content-Length: 4897
#响应实体主体的长度。
Content-Type: text/html; charset=UTF-8
#实体主体的类型和字符编码,表示响应内容是以UTF-8编码的HTML文本。
1)并行连接:并行连接通过同时建立多个连接 ,使得客户端可以并发地发送多个请求,以提高并发性和响应速度。
2)持久连接 :持久连接允许客户端和服务器之间在单个连接上发送多个HTTP请求和响应 ,而不是每个请求都要重新建立连接。
3) 管道化连接:管道化连接是一种在持久连接上发送多个请求而无需等待服务器响应 的机制。
yum install -y httpd
/etc/httpd/conf/httpd.conf #主配置文件
/etc/httpd/conf.d/*.conf #子配置文件
/etc/httpd/conf.d/conf.modules.d/ #模块加载的配置文件
检查配置语法:httpd -t
或 apache2 -t
站点网页文档根目录:/var/www/html
服务单元文件
/usr/lib/systemd/system/httpd.service
配置文件:/etc/sysconfig/httpd
主服务器程序文件
/usr/sbin/httpd
/etc/httpd/modules
/usr/lib64/httpd/modules
开机自启和关闭开机自启
systemctl enable httpd.service #开机自启
systemctl disable httpd.service #关闭开机自启
开启服务
systemctl start httpd.service
apachectl start
service httpd start
关闭服务
systemctl stop httpd.service
apachectl stop
service httpd stop
重新加载
systemctl restart httpd.service
apachectl restart
service httpd restart
查看服务状态
systemctl status httpd
配置文件语法检查
apachectl configtest
service httpd configtest
httpd虚拟主机的作用是通过一个物理服务器来托管多个域名或网站,实现资源共享、个性化配置和多域名指向不同网站的功能,提高服务器资源利用率和降低成本。
原理
为每个虚拟主机准备至少一个ip地址,并通过服务器软件来指定每个虚拟主机使用的IP地址
示例:
前置准备
#关闭防火墙和selinux
systemctl stop firewalld
setenforce 0
rpm -q httpd
#查看软件是否安装
systemctl start httpd #开启服务
cd /var/www/html/ #进入httpd站点文件目录
vim index.html #设定默认主页,默认主页名字必须为index.html
systemctl resgtart httpd #重启服务
mkdir ip1
#创建新目录
vim .ip1/index.html
#新的测试网页
#新建一个除了IP地址不同的配置文件
vim /etc/httpd/conf.d/ipv.conf
注:网址是需要真实存在的
httpd -t
#测试是否有错误
vim /etc/httpd/conf/httpd.conf #编辑主配置文件
ServerName www.example.com:80 #添加到主配置文件中
保存后再次尝试
httpd -t
示例
配置192.168.67.101为示例
vim /etc/httpd/conf/httpd.conf
mkdir /var/www/html/scj #创建所需目录
httpd -t
vim /var/www/html/scj/index.html #编辑主页
systemctl restart httpd
#重新加载
原理
每个虚拟主机使用同一个IP地址,但使用不同的端口号来区分。
这种方法不需要分配额外的IP地址或端口,可以在同一个IP地址上承载多个虚拟主机。
示例
前置准备
systemctl stop firewalld
setenforce 0
#关闭防火墙和selinux
yum install httpd -y
systemctl start httpd
#安装并启动httpd服务
vim /etc/httpd/conf/httpd.conf
#编辑配置文件
vim scj1/index.html
#编辑主页
httpd -t
#查看是否有错误
systemctl restart httpd
#重启服务
curl 192.168.67.100:80
curl 192.168.67.10:8080
原理
服务器软件根据请求头中的主机名(域名)来区分虚拟主机。
这种方法不需要分配额外的IP地址或端口,可以在同一个IP地址上承载多个虚拟主机。
示例
前置准备
systemctl stop firewalld
setenforce 0
#关闭防火墙和selinux
yum install httpd -y
systemctl start httpd
#安装并启动httpd服务
vim /etc/httpd/conf/httpd.conf
#编辑配置文件
vim scj2/index.html
#添加新路径
httpd -t
#排错
vim /etc/hosts
#编辑本地hosts文件,添加地址映射
systemctl restart httpd
#重启服务
curl www.scj1.com
curl www.scj2.com
①prefork:一对一模式,处理一个请求开启一个进程,缺点是httpd服务进程数有上限。
②worker:一对多模式,规定一个进程处理多少个请求,缺点是处理完自己的请求空闲不会告知服务器。
③event:一对多模式,且有一个监听进程,若有处理完请求的空闲进程会通知服务器分配新的请求。
Cookie和Session用于解决http协议无状态。
Cookie是一种在客户端(通常是Web浏览器)存储数据的小文件。它由服务器在HTTP响应中发送给客户端,并在后续的请求中由客户端发送回服务器。Cookie通常用于跟踪和标识用户会话,以提供个性化的服务或记录用户在网站上的活动。
Session是指在一段时间内,用户与某个系统或应用之间的交互过程。在Web开发中,会话通常用于跟踪用户在网站上的活动状态,以便提供个性化的服务、记录用户的操作等。