一、用户常用关于web的信息
1、什么是www
- www是world wide web的缩写,及万维网,也就是全球信息广播的意思
- 通常说的上网就是使用www来查询用户所需要的信息。
- www可以结合文字、图形、影像以及声音等多媒体,超链接的方式将信息以Internet传递到世界各处去。
- 当你连接www网站,该网站会提供一些数据,客户端要使用可以解析这些数据的软件来处理,那就是浏览器
2、网址
URI:Uniform Resource Identifier 统一资源标识,分为URL和URN
- URN:Uniform Resource Naming,统一资源命名,P2P下载使用的磁力链接是URN的一种实现
- URL:Uniform Resorce Locator,统一资源定位符用于描述某服务器某特定资源位置
两者区别:而URL提供查找该事物的方法。URN仅用于命名,而不指定地址
3、URL组成
URL组成结构如下:
<scheme>://<user>:<password>@<host>:<port>/<path>:<params>?<query>#<frag>
每部分的定义为:
scheme
|
方案
|
访问服务器以获取资源时要使用哪种协议
|
user
|
用户
|
某些方案访问资源时需要的用户名
|
password
|
密码
|
用户对应的密码,中间用“
: ”
分隔
|
scheme
|
方案
|
访问服务器以获取资源时要使用哪种协议
|
host
|
主机
|
资源宿主服务器的主机名或
IP
地址
|
port
|
端口
|
资源宿主服务器正在监听的端口号
,
很多方案有默认端口号
|
path
|
路径
|
服务器资源的本地名,由一个“
/ ”
将其与前面的
URL
组件分隔
|
params
|
参数
|
指定输入的参数,参数为名
/
值对,多个参数,用“
; ”
分隔
|
query
|
查询
|
传递参数给程序,如数据库,用“
? ”
分隔
,
多个查询用“
& ”
分隔
|
frag
|
片段
|
一小片或一部分资源的名字,此组件在客户端使用,用“
# ”
分隔
|
二、HTTP简介
1、什么是http
HTTP协议:全称为Hyper Text Transfer Protocol(超文本传输协议)
- 简单来说 http 就是从服务器传输超文本(html)到本地浏览器的传输协议
HTTP协议工作于B/S架构上,浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务端发送请求(Request),Web服务端根据接收到的请求数据后,向客户端发送响应信息(Response)
举例:https://developer.mozilla.org/zh-CN/docs/Web
2、http工作机制
一次http事务包括:
- http请求:http request
- http响应: http response
Web资源: web resource
一个网页由多个资源(文件)构成,打开一个页面,通常会有多个资源展示出来,但是每个资源都要单独请求。因此,一个"Web页面”通常并不是单个资源,而是一组资源的集合
资源类型:
- 静态文件:无需服务端做出额外处理,服务器端和客户端的文件内容相同
- 常见文件后缀:.html,.txt,.jpg,.js,.css,mp3,avi
- 动态文件:服务端执行程序,返回执行的结果,服务器端和客户端的文件内容不相同
- 常见文件后缀:.php,jsp,asp
(一)、web中常用的语言介绍
html语言:超文本标记语言
<html>
<head>
<meta http-equiv = Content-Type content = "text/html; charset = utf-8">
<title>HTML语言</title>
</head>
<body>
<img src = "http://www.xianoupeng.com/uploadfile/2019/0424/20190424115929686.jpg">
<h1 style = "color:red">欢迎</h1>
<p><a href = http://www.xianoupeng.com>个人blog</a>欢迎你</p>
</body>
</html>
css:层叠样式表 表述网站的风格
html网页主体
---
<html>
<head>
<meta http-equiv = Content-Type content = "text/htm1;charset=utf-8">
<link rel = "stylesheet" type = "text/css" href = "mystyle.css" />
</head>
<body>
<h1>这是 heading 1</h1>
<p>这是一段普通的段落。请注意,该段落的文本是红色的。在body选择器中定义了本页面中的默认文本颜色。</p>
<p class = "ex">该段落定义了class = "ex"。该段落中的文本是蓝色的。</p>
</body>
</html>
css文件
--
body {color : red }
h1 {color : yellow }
p.ex {color : blue }
js:实现html和css实现不了的功能比如动画效果
<!DOCTYPE html>
<html>
<head>
<meta http-equiv = Content-Type content = "text/html; charset = utf-8">
</head>
<body>
<h2>我的第一个JavaScript</h2>
<button type = "button"
onclick = "document.getElementById('demo').innerHTML = Date()">
点击这里来显示日期和时间
</button>
<p id = "demo"></p>
</body>
</html>
(二)、.mine(Multipurpose Internet Mail Extensions)多用途因特网邮件扩展
- 它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理
- 为了支持多媒体数据类型,HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识数据类型。
- 其主要功能是让服务器将它们发送的多媒体数据的类型告诉浏览器
- 服务器将MIME标志符放入传送的数据中来告诉浏览器使用哪种插件读取相关文件
- MIME类型存在于HTTP响应报文的响应头部信息里,它是一种文本标记
- MIME格式: type/subtype 文件类型后缀(html txt jpg png... ...)
MIME类型 | 文件类型 |
text/html | html、htm、shtml文本类型 |
text/css | css文本类型 |
text/xml | xml文本类型 |
image/gif
| gif图像类型 |
image/jpeg
| jpeg、jpg图像类型 |
application/javascript | js文本类型 |
text/plain | txt文本类型 |
application/json | json文本类型 |
video/mp4 | mp4视频类型 |
video/quicktime | mov视频类型 |
video/x-flv | flv视频类型 |
video/x-ms-wmv | wmv视频类型 |
video/x-msvideo | avi视频类 |
3、http访问请求完整过程
(一)、建立连接
TCP的3次握手建立链接,向服务器发送http请求,服务器拒绝或允许
(二)、接受请求
接受客户端请求报文对某个资源的一次请求过程web响应访问模型
a).单进程I/O模型:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应
b).多进程I/O模型:并行启动多个进程,每个进程响应一个连接请求
c).复用I/O结构:启动一个进程,同时响应N个连接请求
d).复用的多进程I/O模型:启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求
(三)、处理请求
服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理常用请求Method: GET(获取)、POST(提交)、HEAD(请求首部)、PUT(上传)、DELETE(删除)、TRACE(追踪)、OPTIONS(选择)
(四)、访问资源(影响访问速度)
服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源
(五)、构建响应报文
一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体。
响应实体:如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括:
描述了响应主体MIME类型的Content-Type首部
描述了响应主体长度的Content-Length
实际报文的主体内容
- 2)URL重定向:web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径
- 3)MIME类型:Web服务器要负责确定响应主体的MIME类型。多种配置服务器的方法可将MIME类型与资源管理起来
(六)、发送响应报文
Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束。
4、.http协议报文头部结构
(一)、请求报文
请求报文由三部分组成:开始行(请求行)、首部行、实体主体
- 开始行:请求方法 url 版本 CRLF
- 首部行:通常用键值表示
- 空格(URL)
- 实体主体数据:一般在post动作中可以提看到
开始行中的请求方法:
方法 | 描述 |
GET
|
请求指定页面信息,并返回实体主体
|
HEAD
|
类似
get
要求,只不过返回相应中没有主题内容,用户获取报头
|
POST
|
向指定资源提交数据请求,数据包含在请求中,此请求可能会生成新的资源或修改已
有资源
|
PUT
|
从客户端向服务端传送数据取代指定的文档内容
|
DELETE
|
请求服务器删除指定页面
|
CONNECT
|
HTTP/1.1
协议中预留给弄够将改为管道方式的代理服务器
|
OPTIONS
|
允许客户端查看服务器的性能
|
TRACE
|
回显服务器收到的请求,用于测试和诊断
|
(二)、响应报文
响应报文由三部分组成即:开始行(状态行)、首部行、实体主体
- 开始行:http版本 状态码 短语(解释状态码) CRLF
- 首部行:通常用键值表示
- 空格(状态码)
- 实体主体数据,即获取内容
5、状态代码
状态码 | 含义 | 详解 |
1xx |
指示信息
|
表示请求已接收,继续处理
|
2xx | 成功 |
表示请求已被成功接收、理解、接受
|
3xx | 重定向 |
要完成请求必须进行更进一步的操作
|
4xx |
客户端错误
|
请求有语法错误或请求无法实现
|
5xx |
服务器端错误
|
服务器未能实现合法的请求
|
常见状态代码、状态描述的说明如下:
状态码 | 含义 |
200 OK
|
客户端请求成功
|
400 Bad Request
|
客户端请求有语法错误,不能被服务器所理解
|
401 Unauthorized
|
请求未经授权,这个状态代码必须和
WWW-Authenticate
报头域一起
使用
|
403 Forbidden
|
服务器收到请求,但是拒绝提供服务
|
404 Not Found
|
请求资源不存在,举个例子:输入了错误的
URL
|
500 Internal Server Erro
|
服务器发生不可预期的错误
|
503 Server Unavailable
|
服务器当前不能处理客户端的请求,一段时间后可能恢复正常
|
举例:
# curl -v 192.168.134.131 ### 查看报文结构
创建文件并刷新后再次运行结果:
三、web服务的配置详解
1、web服务的常用种类
- Apache
- Nginx
- openresty
- 大厂自研
2、Nginx的安装
(一)、前置条件(配置软件仓库)
[root@localhost ~]# vim /etc/rc.d/rc.local 【配置开机自动挂载】
[root@localhost ~]# chmod +x /etc/rc.d/rc.local
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# vim rhel9.repo
(二)、安装并运行 Nginx
# dnf install nginx -y ### 安装web服务之nginx
# systemctl enable --now nginx ### 启动nginx
# firewall-cmd --permanent --add-service=http ### 火墙放行
# firewall-cmd --reload
# firewall-cmd --list-all ### list查看是否是http
# cd /usr/share/nginx/html/ ### nginx默认共享的目录
# echo timinglee > index.html ### 输入timinglee进入index.html
# netstat -antlupe |grep nginx ### 可以查看到web服务默认使用端口为80端口
# cat /proc/cpuinfo ### 查看cpu的数量
# ps aux | grep nginx ### 查看aux进程,nginx的cup数量
3、修改端口
# vim /etc/nginx/nginx.conf ### 配置网页文件
修改为: #### 修改端口后一定要加 ;
# nginx -s reload ### 刷新网页
更改端口后无法访问服务器
防火墙放行:
可以正常访问:
4、修改发布文件
# vim test.html ### 修改发布文件内容
# vim /etc/nginx/nginx.conf
# nginx -t ### 检测语法是否正确
# nginx -s reload ### 刷新内容
5、修改默认发布目录
# mkdir /usr/share/nginx/hz ### 创建新的发布目录
# echo hello > /usr/share/nginx/hz/index.html ### 修改发布文件信息
# vim /etc/nginx/nginx.conf
# nginx -s reload ### 刷新
6、创建独立网址
[root@localhost html]# mkdir hz
[root@localhost html]# echo hz > hz/index.html
# vim /etc/nginx/nginx.conf ### 读取有顺序,先读取的不能被后面的覆盖
运行结果:
7、基于用户操作访问认证
# dnf install httpd-tools -y ### 建立文件
# ll /etc/nginx/.htpasswd ### 查看有无建立文件
# htpasswd -cm /etc/nginx/.htpasswd admin ### 建立网址用户
# htpasswd -m /etc/nginx/.htpasswd hz ### -cm 会覆盖文件的用户,所以用 -m
# cat /etc/nginx/.htpasswd 运行结果:
# vim /etc/nginx/nginx.conf ### 配置让网站需要密码访问
# nginx -t 运行结果:
# nginx -s reload ### 刷新内容
# curl 192.168.134.131/hz/
# curl -u hz:321 192.168.134.131/hz/ 运行结果:
8、发布默认测试页
# cd /usr/share/nginx/html/
# ip a a 192.168.134.10/24 dev ens160 ### 添加字ip地址
# ip a a 192.168.134.20/24 dev ens160
# ip a 查看配置
网站查看:
# echo 192.168.134.20 > /usr/share/nginx/virtualhost/bbs/index.html
# echo 192.168.134.10 > /usr/share/nginx/virtualhost/news/index.html
# cd /etc/nginx/conf.d/
# ls ### 确定目录下没有文件
# vim vhosts.conf
网站查看:
9、创建基于域名的虚拟主机
# vim vhosts.conf ### 配置域名
网站访问结果:
# mkdir /usr/share/nginx/virtualhost/haha/ -p
# echo haha > /usr/share/nginx/virtualhost/haha/index.html
# vim vhosts.conf ### 添加网址
# nginx -s reload
# vim /etc/hosts ### 配置子网页
# cat /etc/hosts
网站访问结果:
四、注意事项(安全与优化)
1、安全加固
定期更新 Nginx 版本:sudo yum update nginx 或 sudo apt upgrade nginx。
隐藏版本号:在 nginx.conf 中添加 server_tokens off。
2、性能优化
调整工作进程数:worker_processes auto;(根据 CPU 核心数设置)。
启用 Gzip 压缩:在 nginx.conf 中配置 gzip on。