[toc]

HTTP协议介绍

HTTP

  • 什么是HTTP
    • HTTP 全称:Hyper Text Transfer Protocol 中文名:超文本传输协议
  • 什么是超文本传输协议
    • 是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另一台主机(浏览器)的应用层协议,以实现超链接的功能。
  • 什么是超文本
    • 包含有超链接(Link)和各种多媒体元素标记(Markup)的文本。
    • 这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page),这些链接使用URL表示。
    • 最常见的超文本格式是超文本标记语言HTML。
    • html文件->包含各种各样的元素(URL链接)->形成WebPage简称web页面

URL

  • 什么是URL
    • URL即统一资源定位符(Uniform Resource Locator),用来唯一地标识万维网中的某一个文档。
  • URL结构
    • URL由:协议、主机和端口(默认80) 文件名,三部分构成:

image-20230616182847874

HTTP工作原理

15648078730283

在浏览器中输入一个网址的时候https://www.chenlin.cloud/

  1. 浏览器分析URL
    • 浏览器会帮你分析,输入的这个URL
  2. 浏览器向DNS请求解析URL(本地解析优先级最高)
  3. DNS从URL解析出IP并返回给浏览器
    • DNS服务器,会将解析出来的IP地址110.111.112.113并返回给浏览器。
  4. 浏览器与IP建立TCP(80端口)连接
    • 浏览器接收到DNS返回的IP地址,立即与该IP所在的服务器建立TCP连接(80端口)。
  5. 浏览器发出HTTP请求报文
    • 浏览器请求文档,也就是咱们常说的html页面,GET /index.html,并发出HTTP请求报文。
  6. 服务器响应HTTP请求报文
    • 服务器给出响应,将请求的index.html文档返回给浏览器,也就是响应HTTP请求的报文。
  7. 响应完成,释放TCP连接
    • TCP连接响应完之后,释放TCP连接。
  8. 浏览器展示web页面
    • 最后就能显示出,你请求的这个页面了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# 在浏览器中输入网址blog.driver..... .com

# 浏览器向local dns发起域名解析,如果本地没有浏览器向DNS服务器发起域名解析,解析域名blog..... .com
客户端向服务端发起查询--递归查询
服务端向客户端发起查询--迭代查询
.com根域发起查询
.com根域--> driverzeng.com
.driverzeng.com --> blog class test download---> blog.... A记录 39.104.203.184
blog.driverzeng.com

# 防火墙规则不允许你的IP地址访问该服务器的80端口,则拒绝连接,报错返回给用户
# 防火墙规则允许你的IP地址刚问该服务的80端口,则放行

# 浏览器和39.104.203.184所在的服务器的端口发起TCP/IP连接
- 建立连接 三次握手
syn(建立连接型号)
客户端----服务端
syn+ack(我收到了建立连接的请求了)
服务端---客户端
ack(告诉服务端,我知道你收到建立连接请求了)
客户端---服务端

# 向服务端的web发起http请求(负载均衡)
-请求的头部信息
-请求的方法 GET
-请求的主机 blog.driver....com
-请求的资源 /index.html
-请求的端口是什么 默认http80 https443
-请求的参数是什么 属性(请求类型,压缩,认证,浏览器等)
-请求的空行

# 将请求更具调度算法(rr轮询)将请求下发给后端的web服务器
# 读取web服务器上的nginx的配置文件,找到站点目录
# 找到对应的代码文件
-静态请求 web服务器将静态请求下发给共享存储服务器上,找到对应的静态资源返回给用户
-动态请求

# 将请求发送给后端代码,处理
# 先找到数据库中的缓存(Redis,menchache)
# 如果缓存中有数据,则直接返回给用户
# 如果缓存中没有数据,则找后端数据库
-从数据库中取出数据,先放入缓存一份,再返回给用户

# 返回对应的状态码和响应头部信息给浏览器
# 断开TCP/IP连接
- 四次挥手

# 浏览器展示网站页面

访问网站分析

浏览器分析超链接中的URL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 一个URL有可能会很长,以 & 为分隔符每一个&后面都是一个参数,如下所示:

https://www.baidu.com/s
?ie=utf-8
&f=8
&rsv_bp=1
&rsv_idx=1
&tn=baidu
&wd=%E6%9B%BE%E8%80%81%E6%B9%BF
&rsv_pq=c177c4df0026ba3e
&rsv_t=e001VxO8FQ8I6s1o1i0km8IYEX2%2F7PwwkwTB6FC%2FXU9Mmwz24Z4i%2BnYoP0I&rqlang=cn&rsv_enter=1
&rsv_dl=tb
&rsv_sug2=0
&inputT=1729
&rsv_sug4=1728

请求DNS

1
PC向DNS服务器110.111.112.113发出DNS QUERY请求,请www.chenlin.cloud的A记录。

image-20221207160048291

DNS回复

1
DNS服务器,回复 DNS response,解析出www.chenlin.cloud域名对应的 A 记录

image-20221207160106264

image-20221207160110038

HTTP请求方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# HTTP请求报文
是对所请求对象所进行的操作,也就是一些命令

# 请求报文中的操作有:
GET # 请求读取一个web界面
POST # 明文读取一个web界面
DELETE # 删除web界面
PUT # 调用后端,存储和上传

了解即可
HEAD # 请求头部
TRACE # 测试
OPTION # 查询特定选项
CONNECT # 代理

HTTP响应方法(状态码)

  • 响应报文中的状态码

    • 状态码(status-code)是响应报文状态行中的一个3位数字,指明请求是否被满足,如果没有满足,原因是什么。
  • 状态码分为以下五类:

    1
    2
    3
    4
    5
    1XX(通知信息)		# 100=服务器正在处理客户请求
    2XX(成功) # 200=请求成功(OK)
    3XX(重定向) # 301 =页面改变了位置
    4XX(客户错误) # 403=禁止的页面; 404=页面未找到
    5XX(服务器错误) # 500=服务器内部错误; 503=以后再试
  • 各状态码的含义

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # 2XX(成功)
    200 # 页面访问正常

    # 3XX(重定向)
    301 # 永久重定向
    302 # 临时重定向
    304 # 浏览器缓存
    307 # 内部重定向

    # 4XX(客户错误)
    400 # 客户端错误,bad request
    401 # 认证失败
    403 # 权限不足
    404 # 找不到页面

    # 5XX(服务器错误)
    500 # 服务内部问题,(代码问题,服务器的问题)
    502 # bad gatway 后端服务报错
    503 # 服务器过载,访问评率过快
    504 # 后端服务超时

头部信息

image-20221207174029308

PV UV IP

1
2
3
PV # 独立的页面浏览量(一条日志,一个请求)
UV # 独立设备
IP # 独立的IP地址

Chrome浏览器开发者工具

General

1
2
3
4
5
6
7
8
9
10
11
12
13
14
## 常规信息
# General

## 请求的URl
Request URL: https://blog.driverzeng.com/driverzeng/2053.html
## 请求的方式 GEt
Request Method: GET
## 状态码
Status Code: 200 3xx 4xx 5xx
## 远端的地址
Remote Address: 122.228.74.136:443
## Referrer规则
Referrer Policy: strict-origin-when-cross-origin
referrer 从哪里跳转的网站

Response Header

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
## 响应头部信息
# Response Header

ali-swift-global-savetime: 1670486003
content-encoding: gzip
content-type: text/html; charset=UTF-8
date: Thu, 08 Dec 2022 07:53:23 GMT
eagleid: 7ae45f9916704860023241086e
link: <https://blog.driverzeng.com/?p=2053>; rel=shortlink
server: Tengine
timing-allow-origin: *
vary: Accept-Encoding
via: cache59.l2cn3037[843,843,200-0,M], cache33.l2cn3037[845,0],
kunlun7.cn250[917,917,200-0,M], kunlun3.cn250[920,0]
x-cache: MISS TCP_MISS dirn:-2:-2
x-frame-options: SAMEORIGIN
x-pingback: https://blog.driverzeng.com/xmlrpc.php
x-powered-by: PHP/7.1.21
x-swift-cachetime: 0
x-swift-savetime: Thu, 08 Dec 2022 07:53:23 GMT

Request header

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
## 请求头部信息
# Request header

:authority: blog.driverzeng.com
:method: GET
:path: /driverzeng/2053.html
:scheme: https
accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng
,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9
cache-control: max-age=0
cookie: dark=0; bgImgSetting=white-bg
referer: https://blog.driverzeng.com/linux/linux%e6%9e%b6%e6%9e%84%e7%af%87/
sec-ch-ua: "Not?A_Brand";v="8", "Chromium";v="108", "Google Chrome";v="108"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
sec-fetch-dest: document
sec-fetch-mode: navigate
sec-fetch-site: same-origin
sec-fetch-user: ?1
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/108.0.0.0 Safari/537.3

松耦合架构SOA