Web基础入门-http协议

http协议

http:超文本传输协议

超文本

包含有超链接(Link)和各种多媒体元素标记(Markup)的文本。这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page)。这些链接使用URL表示。最常见的超文本格式是超文本标记语言HTML。

什么是URL

http://	blog.51cto.com:80	/baicia/5301136
协议			主机(域名):端口		 站点目录下的文件名

URL:统一资源定位符(唯一)
URL组成:协议、主机(域名)和端口、文件名
URI:/baicia/5301136

超文本传输协议工作原理

# 当我们在浏览器中输入:http://blog.51cto.com/baicia/5301136后
1.浏览器请求DNS服务器
	- 本地DNS(local DNS)优先级高
		如果本地DNS有blog.51cto.com的域名解析则将IP地址返回给浏览器
	- 远程DNS服务器
		寻找13个根域:
			.com
			.cn
			.org
			.edu
			.xyz
			.net
			.gov
			...
		递归查询
			51cto.com
			blog.51cto.com --> A记录:203.107.44.140
		迭代查询
			服务器查找
2.DNS将域名解析成IP地址(203.107.44.140)返回给浏览器
3.浏览器与该IP地址的80端口(网站的应用)建立TCP/IP
	-三次握手
4.发送GET(不绝对)请求下载/5301136到浏览器中
5.服务端将在目录中找到的5301136文件返回给浏览器
6.断开TCP/IP连接
	四次挥手
7.浏览器展示web页面(超文本传输协议,将页面下载到浏览器中)

浏览器分析超链接中的URL

一个URL有可能会很长,以&为分隔符,每一个&后面都是一个参数,如下所示:

http://www.baidu.com/
s?ie=utf8
&f=8
&rsv_bp=1
&tn=baidu
&wd=%E6%9B%BE%E5%BF%97%E9%AB%98%E7%BF%94
&oq=%25E6%259B%25BE%25E8%2580%2581%25E6%25B9%25BF
&rsv_pq=f865f8990001586e
&rsv_t=ab36Jk%2Ba1Jpw9wdHyY0ARobg0ghcOw9FYXOWMNGAhYXuzSg1irXvqbY7DwY
&rqlang=cn
&rsv_enter=1
&rsv_dl=tb
&rsv_btype=t
&inputT=8396
&rsv_sug3=54
&rsv_sug1=42
&rsv_sug7=100
&rsv_sug2=0
&rsv_sug4=8396

用抓包分析http请求

image.png

image.png

分析浏览器中的请求响应信息

## General
# 1.请求的URL
Request URL: http://blog.51cto.com/baicia
# 2.请求方法:GET
Request Method: GET
# 3.状态码
Status Code: 200 
# 4.远端地址
Remote Address: 203.107.44.140:443
# 5.referrer规则
Referrer Policy: strict-origin-when-cross-origin
## referrer:从哪里跳转到网站

## 响应头部信息
# 1.缓存控制:取值
cache-control: no-store, no-cache, must-revalidate
# 2.压缩
content-encoding: gzip
# 3.响应主题的类型
content-type: text/html; charset=UTF-8
# 4.日期
date: Sat, 28 May 2022 16:44:30 GMT
# 5.失效时间
expires: Thu, 19 Nov 1981 08:52:00 GMT
# 6.
load-balancing: blog-003
# 7.参数:没有缓存
pragma: no-cache
# 8.服务端信息
server: nginx
# 9.登录信息
set-cookie: pub_sauth1=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; domain=.51cto.com
set-cookie: pub_sauth2=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; domain=.51cto.com
set-cookie: pub_sauth3=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; domain=.51cto.com; HttpOnly
# 10.强制安全传输
strict-transport-security: max-age=63072000
# 11.渲染
vary: User-Agent

x-request-id: eadb77c638532768005e0f6b15f63c43

## 请求头部信息
# 1.请求的域名
:authority: blog.51cto.com
# 2.请求的方式
:method: GET
# 3.请求的路径
:path: /baicia
# 4.请求的协议:https
:scheme: https
# 5.允许请求的主体类型
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
# 6.压缩
accept-encoding: gzip, deflate, br
# 7.允许的语言
accept-language: zh-CN,zh;q=0.9
# 8.缓存:没有开启缓存
cache-control: no-cache
# 9.登录信息
cookie: _uab_collina=165375063657496390408837; showMsgOver=1; _bl_uid=zXlO03FCqwn0IIgzmb48ib2np3p1; www51cto=22F1D73A1F78C9CE747C3E3E76E07CB1LPwc; Hm_lvt_2283d46608159c3b39fc9f1178809c21=1653750637,1653752892,1653753219,1653753975; Hm_lvt_110fc9b2e1cae4d110b7959ee4f27e3b=1653754161; _uab_collina=165375419880744520551556; Hm_lpvt_110fc9b2e1cae4d110b7959ee4f27e3b=1653754253; callback_api_url=https%3A%2F%2Fblog.51cto.com%2F; pub_cookietime=2592000; pub_wechatopen=Vlx9IlRRdVVwBHd3IgxQAXALDF0kcQMIUSICUnRSVXJobTBVU1AEVQYAAQdW; pub_wechatnick=%E7%99%BD%E8%8F%9C%7E; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215000677%22%2C%22first_id%22%3A%221810b38229ca04-07b787ef8f6fad-39645d14-1327104-1810b38229dbb8%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%221810b38229ca04-07b787ef8f6fad-39645d14-1327104-1810b38229dbb8%22%7D; PHPSESSID=ttm0vh3ok4voiq4kfkq5fhjg4e; once_p=555fd7; page_url=https%3A//home.51cto.com/index%3Fiframe%3D1%26from_service%3Dblog%26scene%3DPrivateletter2%26reback%3Dhttps%253A%252F%252Fblog.51cto.com%252Fbaicia%252Ffollowers; login_from=blog.51cto.com; reg_from=blog.51cto.com; acw_tc=276077a516537562303197204e0f8eafcafb8d63fe4c2cf9804a898e791fec; Hm_lpvt_2283d46608159c3b39fc9f1178809c21=1653756264; ssxmod_itna=eq0xgD0D9i=iq0dyDtWG8DuDUgfDRA7giD11Zax0y0PeGzDAxn40iDtx=T+DZhlg444kWoQTP=3WrihqF3a622befSED4GLDmKDyRmfeGGUxBYDQxAYDGDDPDogPD1D3qDkD7h6CMy1qGWDm4kDWPDYxDrjOKDRxi7DDHQCx07DQ5koRawcagCOmBDq0KD91oDs1xfY0FmEU34Mp7Aw3A3Ix0kg40Oya5szaoDUlFsBoANNZreZlroH0bKP7GqYmhTbnR5klxuzDrKKA0KKQ05K7i3WnqMDDcDY0zB4D; ssxmod_itna2=eq0xgD0D9i=iq0dyDtWG8DuDUgfDRA7giD11ZxnFf9PDsezDLmOAYTm1gBtYwYwvNG4pgMTXsnb4QqupqphQSWptESSwrA3d4eE9wNZ3=E7j8k/ejb9fwzcfLQRhNXZTvEg/=VSjBPPOarnsr6hsDxid5P+dQ3qmtxOsd3IpRAGd7+evD3gIrSTCiFaEh4SzItSszSuE7Z3L2FHG+FKFzfPAnFg6U6mfopf6esf0S+v0nZ9Xs39Uj3QRtuQUBr5j3X695ypdtBCXdpZORPZcpI4DwhGdDjKD+gt4kjrK8tG/tYD=
# 10.参数:没有缓存
pragma: no-cache
# 11.从哪里跳转到网站
referer: https://blog.51cto.com/baicia/followers
# 12.防止泄露详细信息
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="102", "Google Chrome";v="102"
# 13.谷歌自带(不属于请求头的内容)
upgrade-insecure-requests: 1
# 14.客户端(用户设备)
user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.62 Safari/537.36

http请求方法

http请求报文中,是对所请求对象进行的操作,也就是一些命令。请求报文中的操作有:

方法 含义
GET 请求读取一个web页面
POST 明文提交数据,读取页面
DELETE 调用后端接口删除功能的页面
PUT 调用后端,存储、上传功能页面
CONNECT 代理服务器
HEAD 读取web页面的头部信息
TRACE 测试服务器请求
OPTION 查询特定选项

http状态码

状态码是响应报文状态行中包含的一个3位数字,指明特定的请求是否被满足,如果没满足,原因是什么。状态码分为以下五类:

状态码 含义 例子
1xx 通知信息 100=服务器正在处理客户请求
2xx 成功 200=请求成功(ok)
3xx 重定向 301=页面改变了位置
4xx 客户错误 403=禁止的页面;404=页面找不到
5xx 服务器错误 500=服务器内部错误;503=稍等再试
状态码 含义
200 页面访问成功
301 永久重定向
302 临时重定向
304 浏览器缓存
307 内部重定向
400 客户端错误
401 认证失败
403 权限不足
404 找不到页面
500 服务器内部错误(代码问题,服务器的问题)
502 Bad Gateway,后端服务报错(哪台服务器上的日志出现502,就检查该服务器后端的服务)
503 服务器过载,访问频率过快
504 后端服务超时

http及架构请求访问流程

image.png

## 在浏览器中输入:http://blog.51cto.com/baicia
1.浏览器向local DNS发起域名解析请求,本地DNS(/etc/hosts)文件没有
2.浏览器向DNS根域服务器发起请求,解析域名blog.51cto.com
3.DNS进行递归查询和迭代查询:
	客户端向服务端发起查询 -> 递归查询
	服务端向客户端发起查询 -> 迭代查询
	
	先向.com根域服务器发起查询
	然后向.com根域服务器 -> .51cto.com
	之后.51cto.com  -> blog.51cto.com A记录 203.107.44.140
	最后将 A记录:203.107.44.140返回给浏览器
4.浏览器和203.107.44.140所在的服务器的80端口建立TCP/IP连接
	防火墙的规则不允许你的IP地址访问该服务器的80端口,则拒绝连接,报错返回给用户
	防火墙的规则允许你的IP地址访问服务器的80端口,则放行
		- 建立连接(TCP/IP 三次握手)
				syn(建立信号)
		客户端 --------------------> 服务端
			syn+ack(我收到了建立连接的请求)
		服务端 --------------------> 客户端
			ack(告诉服务端,我知道你收到建立连接的请求)
		客户端 --------------------> 服务端
		
5.向服务端的web服务发起http请求(负载均衡)
	- 请求头部信息
		(1)请求的方法是什么:	GET获取
		(2)请求的host主机是:	blog.51cto.com
		(3)请求的资源是什么:	/index.html
		(4)请求的端口是什么:	默认http是80 https是443
		(5)请求携带的参数是什么:	属性(请求类型、压缩、认证、浏览器信息、等等)
		(6)请求最后的空行
6.将请求根据调度算法(rr 轮询) 将请求下发给后端的web服务器
7.读取web服务器上的nginx配置文件,找到站点目录
8.找到对应的代码文件
	- 静态请求:web服务器将静态请求下发到共享存储服务器上,找到对应的静态资源返回给用户
	- 动态请求:
		(1)将请求发送给后端代码,处理
		(2)先找数据库的缓存(Redis,memcache)
		(3)如果缓存中有数据,则直接将数据返回给用户
		(4)如果缓存没有数据,则找后端数据库
		(5)从数据库中取出数据后,先存入缓存一份,然后再返回给用户
9.返回对应的状态码和响应头部信息给浏览器
10.断开TCP/IP
	- 四次挥手
11.浏览器展示网站页面

三次握手示意图

image.png

四次挥手示意图

image.png

了解CDN

CDN:分布式静态缓存服务器

静态资源:html、css、js、MP3、MP4、avi、jpg、png.....

CDN解决的问题:
  • 提升网站访问速度
  • 减少后端服务器的压力

http相关术语

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

## 练习题
假设公司有一座大厦,大厦有100人,每个人有一台电脑和一部手机,上网都是通过nat转换出口,每个人点击网站2次,请问对应的pv,uv,ip分别是多少?

pv:100 * 2 * 2 = 400
uv:100 * 2
IP:1

SOA松耦合架构

面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。

开发网站为了解耦,做出SOA架构

image.png

# 一个电商公司,他的网站页面功能会有很多
注册
登录
首页
详情页
购物车
价格标签
留言
客服
支付中心
物流
仓储信息
订单相信
图片