### 1 用户访问网站流程
“`sh
输入网址:
用户在浏览器地址栏输入网站的URL(统一资源定位符)。
DNS解析:
浏览器向DNS(域名系统)服务器请求将域名解析为IP地址。
DNS服务器查询其数据库,返回与域名对应的IP地址。
建立连接:
浏览器使用DNS解析得到的IP地址,通过TCP(传输控制协议)向服务器发起连接请求。
服务器响应请求,完成TCP三次握手过程,建立连接。
发送HTTP请求:
浏览器构建HTTP(超文本传输协议)请求,发送到服务器。
请求包含请求方法(如GET或POST)、请求的资源路径、HTTP版本和可能的请求头信息。
服务器处理请求:
服务器接收到HTTP请求后,根据请求的资源路径处理请求。
如果请求的是静态资源(如HTML文件、CSS文件、图片等),服务器直接从文件系统中检索资源。
如果请求的是动态内容,服务器可能会执行服务器端脚本(如PHP、Python、Node.js等),生成响应内容。
返回响应:
服务器将处理结果(可能是HTML页面、图片、视频等)作为HTTP响应返回给浏览器。
响应包含状态码(如200表示成功)、响应头信息和响应体(实际的数据内容)。
渲染页面:
浏览器接收到服务器的响应后,开始解析HTML文档,并根据HTML、CSS和JavaScript文件渲染页面。
浏览器请求页面中引用的其他资源(如CSS、JavaScript文件、图片等),并重复上述过程以获取这些资源。
执行JavaScript:
浏览器执行页面中的JavaScript代码,这可能包括与服务器的进一步交互(如AJAX请求)。
页面交互:
用户与页面进行交互,如点击链接、填写表单等,这些操作可能会触发新的HTTP请求。
关闭连接:
对于非持久连接,每次HTTP请求/响应后,TCP连接会被关闭。
对于持久连接(如HTTP/1.1的keep-alive或HTTP/2),TCP连接可以被重用,减少了建立和关闭连接的开销。
缓存处理:
浏览器可能会缓存一些资源,以便在用户再次访问同一网站时加快加载速度。
“`
### 2 http概述
默认端口是80
HTTP超文本传输协议: 数据请求与响应.
传输:网站的数据如何传递给用户.
超文本:文本,图片,视频….
用户打开网站后:网站如何传递数据给用户.
专业名字:数据请求与响应
请求request:打开网站,访问网站.
响应response:网站显示出,返回给你想要的内容.
“`sh
[root@m01 /server/ans]# curl -v www.baidu.com
* Trying 39.156.66.18:80…
* Connected to www.baidu.com (39.156.66.18) port 80 (#0)
> GET / HTTP/1.1
> Host: www.baidu.com
> User-Agent: curl/7.71.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
>大于号是请求
<小于号是响应
-L 选项可以确保 curl 能够正确地获取到最终的目标资源
用于有跳转的uri
[root@m01 /server/ans]# wget --debug www.baidu.com
```
http1.0:短连接,每次请求都需要重复建立断开连接,占用服务端资源,基于tcp
http1.1:加入长连接功能,80和443,基于tcp
http2.0:增加并发,访问更快,基于https,tcp
http3.0:基于udp,应用于流媒体,
大部分企业还在使用http1.1, 一部分使用http2.0
目前http3.0(*QUIC*) 流媒体直播在使用.
### 3 http请求
#### 1 请求报文起始行
```sh
---request begin--- #请求开始
GET / HTTP/1.1 #请求方法、http协议版本
User-Agent: Wget/1.14 (linux-gnu) #UA头
Accept: */* #
Host: www.baidu.com #请求的uri
Connection: Keep-Alive #连接方式,长连接
---request end---
```
\Typora\005-nginx\image-20250107124519966.png)
\Typora\005-nginx\image-20250107124532202.png)
#### 2 常见的请求方法
| GET | 下载 |
| ------ | ------------------------------------------------------------ |
| POST | 上传 |
| HEAD | 类似于GET,仅仅输出响应头部信息,(查看服务端信息,一般用于检查,)curl -l |
| DELETE | 删除 |
资源的位置(URI): 这个资源在**网站站点目录**的哪个地方,叫什么名字.
这里面写的/lidao.mp4,斜线并非是Linux系统的根目录.这个/叫网站的站点
目录.
URI(统一资源标识符)
站点目录是用于存放网站代码的地方.未来在nginx中我们可以指定与查看
```sh
[root@m01 /server/ans]# curl -I www.baidu.com
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: keep-alive
Content-Length: 277
Content-Type: text/html
Date: Fri, 08 Nov 2024 02:44:04 GMT
Etag: "575e1f60-115"
Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
[root@m01 /server/ans]# wget --method=HEAD --debug www.baidu.com
使用wget和curl发出HEAD请求方法,查看服务端信息,服务端是否可以访问
```
```sh
温馨提示:
GET /lidaoav.mp4 HTTP/1.1 这里的/不是根,是网站站点目录,未来可以在web服
务中进行配置.
/app/code/www/ 站点目录
访问/lidaoav.mp4 === /app/code/www/lidaoav.mp4
```
\Typora\005-nginx\image-20250107124543540.png)
#### 3 请求头
| 字段(关键字) | 含义 |
| -------------- | ---------------------------------------------- |
| User-Agent | UA头,客户端代理(用什么工具访问网站),浏览器 |
| Host | Host头,表示访问的目标网站,域名或ip |
| 。。。 | |
#### 4 其他
空行: 分割请求头与请求报文主体
请求报文主体(body): 一般上传的时候才有
#### 5 浏览器调试查看
浏览器的调试功能DevTools
F12查看网络部分即可
#### 6 小结
核心内容:请求起始行,请求方法,请求uri
核心内容:请求头中,UA头,HOST头
核心请求报文:用户目录,上传下载,资源位置、名字,自报家门(UA)
### 4 http响应
#### 1 响应报文与起始行
\Typora\005-nginx\image-20250107124553870.png)
协议与版本 HTTP/1.1
状态码:数字3位,用户描述服务端是否能找到或处理用户的请求
```sh
HTTP/1.1 200 OK
Cache-Control: no-cache, private
Content-Encoding: gzip
Content-Type: application/json
Date: Fri, 08 Nov 2024 03:09:20 GMT
Server: Apache
Tracecode: 05608097990288220170110811
Vary: Accept-Encoding
Content-Length: 59
```
#### 2 响应头
| 响应头字段 | |
| -------------- | -------------------------------- |
| server | 显示服务端使用的web服务器及版本 |
| content | 媒体类型(文件类型) |
| Content-Length | 大小 |
| location | 跳转之后的新位置,跳转的时候才有 |
| via/cache | 查看是否cdn |
| | |
#### 3 其他
空行
响应报文主体,服务端返回给客户端的数据
#### 4 http协议状态码
| 状态码 | 含义 |
| ------ | ------------------ |
| 2xx | 表示正常 |
| 3xx | 表示需要跳转,正常 |
| 4xx | 异常,客户端问题 |
| 5xx | 异常,服务端问题 |
详细状态码
| 详细的状态码 | 说明 |
| ----------------------------------- | ------------------------------------------------------------ |
| 200ok | 访问正常 |
| 301 moved Permanetly | 永久跳转 |
| 302 found或foundtemporarily | 临时跳转 |
| 304 not modified | 浏览器缓存 |
| 401 | 认证失败 |
| 403 forbidden | 权限拒绝(拒绝访问),1、权限问题 2首页文件问题 |
| 404 notfound | 文件找不到,一般辅助错误日志排查 |
| 405 method not allowed | 不准许的请求方法,一般服务器或安全软件限制 |
| 413 request entity too large | web服务文件大小限制 |
| 500 internal error | 内部错误,selinux,其他原因辅助错误日志排查 |
| 502 bad gateway | 网关错误,一般发生在负载中(类似情况下),请求发送到后面,后面无人处理 |
| 503 service temporarily unavailable | 服务临时不可用,一般人为设置,升级 |
| 504 gateway time-out | 网关超时 |
curl -Lv -L跟随跳转,遇到301/302会读取响应头中的Location头重新访问
http响应代码
[HTTP 响应状态码 - HTTP | MDN (mozilla.org)](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status)
http:用户的请求与响应后格式与定义
http请求报文
请求起始行GET uri http/1.1
请求头head:
User-Agent:客户端代理(浏览器)
Host:域名
空行
请求报文主体(body):POST
http响应报文
响应报文的起始行:http/1.1 状态码
响应头:server(web服务器)
空行
状态码与含义
### 5 web集群-衡量系统访问量指标
概述
| 指标 | 说明 |
| ---------- | --------------------------------------------- |
| 并发访问量 | 同一时间内访问用户的数量,tcp已建立连接的数量 |
| ip | 访问网站的公网ip |
| pv | 页面访问量,page view,用户访问一次,pv+1 |
| 传统网站 | 门户网站,搜索网站 |
| uv | 独立访客数量,接近于用户数量 |
| DAU | 每天用户活跃数量,日活 |
| MAU | 月活 |
| | |
### 6 常见的网站服务(web中间件)
| 网站服务 | 说明 | 官网 |
| --------------------------- | ----------------------------------------- | -------------------------- |
| nginx | 大部分使用,异步模型(epoll) | http://nginx.org/en/docs |
| tengine | 基于nginx二次开发,淘宝开源,更多内置模块 | https://tengine.taobao.ora |
| openresty | 基于nginx二次开发,加强lua功能与模块 | |
| apache(httpd) | 目前较少使用,select模型,同步 | |
| ... | | |
| 特殊环境 | | |
| tomcat/jboss/jetty/weblogic | 运行java环境的,web服务 | |
| php | 预习php,需要nginx(LNMP) | |
| python/golang | | |
| ... | | |
| 国产 | | |
| | | |