一、网站访问流程
1.客户端请求域名解析-DNS
2.客户端与服务端进行三次握手,建立TCP连接
3.客户端发送HTTP请求报文
4.服务端发送HTTP响应报文
5.客户端与服务端进行四次挥手,拆除TCP连接
url与uri
url:统一资源定位符-表示域名部分
uri:统一资源标识符-表示资源请求部分
|
二、HTTP协议报文结构
Curl---文本HTTP请求工具 用法:curl domain #以文本形式显示指定域名的响应文件 参数 -L 追踪HTTP重定向
-v 显示HTTP请求信息
-H 指定参数添加至HTTP请求头
-s 静默请求(不显示请求过程)
-o 文件名 将请求结果写入指定文件
-I 仅返回HTTP Response头部信息
-i 返回HTTP Response头部信及页面内容
用例:curl -vLH host:domain IP_address |
[root@web01 ~]# curl -vLH host:jd.com 182.92.169.193
* About to connect() to 182.92.169.193 port 80 (#0)
* Trying 182.92.169.193...
* Connected to 182.92.169.193 (182.92.169.193) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Accept: */*
> host:jd.com
>
< HTTP/1.1 302 Moved Temporarily
< Server: nginx
< Date: Wed, 01 Dec 2021 02:43:43 GMT
< Content-Type: text/html
< Content-Length: 138
< Connection: keep-alive
< Location: https://www.aspenhan.com/
<
...
[root@Blog-Han ~]# curl -IL jd.com
HTTP/1.1 301 Moved Permanently
Date: Wed, 13 Dec 2023 13:31:29 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: https://www.jd.com
Server: jfe
Cache-Control: no-cache
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 13 Dec 2023 13:31:30 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
......
1.HTTP请求报文
- 请求行
1.请求方法:Get/Post
2.请求内容
3.协议信息
Get-获取信息 Post-提交信息 |
> GET / HTTP/1.1 #GET-请求方法 /-请求内容 HTTP/1.1-请求协议及版本
- 请求头
1.用户客户端信息
2.请求的服务端虚拟主机配置文件
3.接受信息
> User-Agent: curl/7.29.0 #请求客户端信息
> Host: jd.com #请求的服务端虚拟主机配置文件
> Accept: */* #接受信息
-
空行
-
请求主体:Get请求不存在请求主体,Post请求存在请求主体
2.HTTP响应报文
-
起始行
1.协议信息
2.状态码(状态码列表见附件)
< HTTP/1.1 302 Moved Temporarily #HTTP/1.1-协议信息 302 Moved Temporarily-状态码
- 响应头
1.Web服务程序
2.响应时间(格林威治时间)
3.响应数据信息类型
4.响应数据的容量
5.TCP连接类型
6.指定跳转地址
7.证书有效期(HTTPS特性)
长链接:客户端请求数据传输完成后,等待一段时间,等待时间结束以前没有任何数据传输后,再断开TCP连接 短链接:客户端请求数据传输 完成后,立即断开TCP连接 |
< Date: Fri, 26 Jul 2019 07:19:37 GMT #请求响应时间(格林威治时间)
< Content-Type: text/html #响应数据信息类型
< Content-Length: 165 #响应数据的容量
< Connection: keep-alive #TCP连接类型
< Location: http://www.jd.com #指定跳转地址
- 空行
- 响应主体:HTML代码信息
<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>JengineD/1.7.2.1</center>
</body>
</html>
[root@web01 /etc/nginx/conf.d]# curl -v jd.com
* About to connect() to jd.com port 80 (#0)
* Trying 120.52.148.118...
* Connected to jd.com (120.52.148.118) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: jd.com
> Accept: */*
>
< HTTP/1.1 302 Moved Temporarily
< Date: Fri, 26 Jul 2019 07:19:37 GMT
< Content-Type: text/html
< Content-Length: 165
< Connection: keep-alive
< Location: http://www.jd.com
< Server: jfe
<
<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>JengineD/1.7.2.1</center>
</body>
</html>
* Connection #0 to host jd.com left intact
三、资源信息
1、静态资源
- 定义:将网站的代码文件信息、图片、视频、音频、附件等信息直接传输给用户,用户收到信息由浏览器进行解析,显示在浏览器页面上
- 优势:便于被搜索引擎收录
2、动态资源
- 定义:由动态数据处理网站代码文件信息处理完并且和数据库进行交互后,将结果传输给用户
- 优势:
1.动态调整页面显示信息,便于维护
2.可以与数据库交互
3.提供用户交换功能
四、网站的度量方式
IP:独立IP数量-用户访问网站的源IP地址数量
PV:页面访问量-同一用户针对同一网站不同页面的访问数量
UV: 记录用户独立访客数量(利用cookie和session)
cookie:网站分配给用户的标识信息 session:网站记录每个用户的会话信息 |
五、测量HTTP请求各阶段耗时
示例: curl https://www.baidu.com -so /dev/null -w'\ndns_resolution: %{time_namelookup}\nconnect_time: %{time_connect}\nappconnect_time: %{time_appconnect}\npretransfer_time: %{time_pretransfer}\nstarttransfer_time: %{time_starttransfer}\ntotal_time: %{time_total}\n' |
curl 域名 \ > -so /dev/null \ > -w ' > dns_resolution: %{time_namelookup} > connect_time: %{time_connect} > appconnect_time: %{time_appconnect} > pretransfer_time: %{time_pretransfer} > starttransfer_time: %{time_starttransfer} > total_time: %{time_total}\n |
- %{time_namelookup}:DNS解析所需的时间
- %{time_connect}: TCP连接所需的时间
- %{time_appconnect}:SSL/SSH等连接/握手所需的时间
- %{time_pretransfer}:从请求开始到文件传输即将开始所需的时间
- %{time_starttransfer}:从请求开始到第一个字节被客户端接收所需的时间
- %{time_total}:整个请求所需的时间
[root@web01 ~]# curl https://www.baidu.com \
> -so /dev/null \
> -w '
> dns_resolution: %{time_namelookup}
> connect_time: %{time_connect}
> appconnect_time: %{time_appconnect}
> pretransfer_time: %{time_pretransfer}
> starttransfer_time: %{time_starttransfer}
> total_time: %{time_total}\n'
dns_resolution: 0.004
connect_time: 0.009
appconnect_time: 0.125
pretransfer_time: 0.125
starttransfer_time: 0.131
total_time: 0.131
六、HTTP状态码列表
状态码 | 含义 | 说明 |
---|---|---|
100 | 继续 | 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分 |
101 | 切换协议 | 请求者已要求服务器切换协议,服务器已确认并准备切换 |
200 | 服务器成功返回网页 | 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页 |
201 | 已创建 | 请求成功并且服务器创建了新的资源 |
202 | 已接受 | 服务器已接受请求,但尚未处理 |
203 | 非授权信息 | 服务器已成功处理了请求,但返回的信息可能来自另一来源 |
204 | 无内容 | 服务器成功处理了请求,但没有返回任何内容 |
205 | 重置内容 | 服务器成功处理了请求,但没有返回任何内容 |
206 | 部分内容 | 服务器成功处理了部分 GET 请求 |
300 | 多种选择 | 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择 |
301 | 永久跳转 | 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置 |
302 | 临时跳转 | 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求 |
303 | 查看其它位置 | 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码 |
304 | 未修改 | 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容 |
305 | 使用代理 | 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理 |
307 | 临时重定向 | 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求 |
400 | 请求错误 | 服务器不理解请求的语法 |
401 | 未授权 | 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应 |
403 | 禁止访问 | 服务器拒绝请求 |
404 | 服务器找不到请求的页面 | 服务器找不到请求的网页 |
405 | 方法禁用 | 禁用请求中指定的方法 |
406 | 不接受 | 无法使用请求的内容特性响应请求的网页 |
407 | 需要代理授权 | 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理 |
408 | 请求超时 | 服务器等候请求时发生超时 |
409 | 冲突 | 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息 |
410 | 已删除 | 如果请求的资源已永久删除,服务器就会返回此响应 |
411 | 需要有效长度 | 服务器不接受不含有效内容长度标头字段的请 |
412 | 未满足前提条件 | 服务器未满足请求者在请求中设置的其中一个前提条件 |
413 | 请求实体过大 | 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力 |
414 | 请求的URI过长 | 请求的 URI(通常为网址)过长,服务器无法处理 |
415 | 不支持的媒体类型 | 请求的格式不受请求页面的支持 |
416 | 请求范围不符合要求 | 如果页面无法提供请求的范围,则服务器会返回此状态代码 |
417 | 未满足期望值 | 服务器未满足”期望”请求标头字段的要求 |
500 | 内部服务器错误 | 服务器遇到错误,无法完成请求 |
501 | 尚未实施 | 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码 |
502 | 错误网关 | 后端服务不可用或没有完成响应的网关服务器 |
503 | 服务当前不可用 | 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态 |
504 | 网关超时 | 服务器作为网关或代理,但是没有及时从上游服务器收到请求 |
505 | HTTP版本不受支持 | 服务器不支持请求中所用的 HTTP 协议版本 |
表格内容转载自:oldboy博客