概述
HTTP (HyperText Transfer Protocol) 超文本传输协议
什么是超文本?
-
包含有超链接(Link)和各种多媒体元素标记的文本。
-
这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page),这些链接用 URL 表示
- 什么是 URL?统一资源定位
- 最常见的超文本格式 HTML(超文本标记语言)
什么是超文本协议?
- 按照URL指示,将超文本文档从一台主机(web服务器),传输到另一台主机( 浏览器)的应用层协议。
http
简单说http工作原理:
- 用户通过浏览器输入URL,http://www.baidu.com
- DNS解析,将域名解析为IP
- 用户通过IP和web服务器建立TCP连接
- 通过 HTTP 发送请求报文
- 服务器解析请求,响应报文
- 浏览器收到响应报文,将代码解析为我们能看懂的页面
- TCP断开
http短连接、长连接
# http是建立在tcp之上的,tcp连接成功才有http
短连接:建立一次tcp连接,发起一次http请求,结束,tcp断开
长连接:建立一次tcp连接,发起多次http请求,结束,tcp断开
http请求报文的方法
get # 获得请求文件信息的数据内容(下载)
post # 用户提交数据到服务器端存储(上传)
http返回状态码
200 成功
301 永久重定向(redirect),不支持修改
302,307 临时重定向(redirect),支持修改
304 浏览器缓存
403 请求不到首页,权限被拒绝
404 资源找不到
500 服务器内部错误,程序代码错误
502 找不到后端资源
504 请求超时
重定向:
我们访问 http://www.baidu.com,跳转到 https://www.baidu.com,状态307
用户访问网站携带的参数,以及服务端返回的参数
# 1、概况
Request URL: http://192.168.190.58/index.html # 请求的URL地址
Request Method: GET # 请求的方法(获取)
Status Code: 200 OK
Remote Address: 192.168.190.58:80 # 请求的地址
# 2、客户端请求的头部信息
Accept: text/html # 请求类型
Accept-Encoding: gzip, deflate # 是否进行压缩
Accept-Language: zh-CN,zh;q=0.9 # 请求的语言
Cache-Control: max-age=0 # 缓存
Connection: keep-alive # 长连接
Host: 192.168.190.58 # 请求的域名
If-None-Match: "b-5a1b8c1b8ff0e" # 标记
Upgrade-Insecure-Requests: 1 # 在 http和https之间起的一个过渡作用,浏览器加的
User-Agent: Mozilla/5.0 # 请求浏览器的工具
"=== 请求一个空行 ==="
"=== 请求内容主体 ==="
# 3、服务端响应的头部信息
Accept-Ranges: bytes
Connection: Keep-Alive # TCP长连接
Content-Length: 11
Content-Type: text/html; charset=UTF-8
Date: Thu, 26 Mar 2020 03:03:40 GMT # 返回服务器的时间
ETag: "b-5a1b8c1b8ff0e" # 验证客户端标记
Keep-Alive: timeout=5, max=100
Last-Modified: Thu, 26 Mar 2020 02:29:39 GMT
Server: Apache/2.4.6 (CentOS) # 返回服务器使用的软件
"=== 返回一个空行 ==="
"=== 返回内容主体 ==="
http相关术语 pv、ip、uv
假设公司有一座大厦,大厦100人,每个人有一台电脑和一部手机,都是通过公司的宽带接入上网,上网都是通过 nat 转换(网络地址转换)出口,每个人点击网站 2 次,请问对应的 pv 、uv 、ip 分别是多少?
PV:页面浏览量 400
uv:独立的客户端 200
ip:独立ip(公网地址) 1个
步骤
步骤一:DNS解析过程
- 本地缓存
- 本地 hosts
- 通过递归查询,将DNS解析请求发送至本地DNS
- ISP DNS
- 网关(本身能上网,实现缓存)
- 自己搭建的 Cache DNS
- 看自己的缓存
- 通过迭代查询,将 DNS 解析请求发送至互联网,DNS服务器
- 13台根域服务器
- 域名解析的记录指针
- NS记录 name server ,负责解析的DNS服务器信息
- MX记录 mail server,负责收发邮件服务器信息
- A记录 主机记录,正向解析,域名->IP
- PTR记录 反向解析 IP->域名
- 域名结构
步骤二:客户端请求
步骤三:服务器响应
http协议原理
1、用户输入域名 -> 浏览器跳转 -> app缓存 -> DNS解析(递归查询 | 迭代查询)
客户端向运营商域名服务端发起查询 -> 递归查询
运营商域名服务端向internet域名服务端(根域名等)发起查询 -> 迭代查询
Cache DNS: 规模较大公司会配一个,缓存 DNS 记录
2、由浏览器向服务端发起 TCP 连接(三次握手)
客户端 --> 请求包连接 syn=1 seq=x(序列号) 服务端
服务端 --> 响应客户端 syn=1 ack=x+1(确认号=序列号+1) seq=y(序列号) 客户端
客户端 --> 建立连接 ack=y+1 seq=x+1 服务端
3、客户端发起 http 请求
1、请求的方法是什么:get
2、请求的Host主机是:www.baidu.com (其实是:www.baidu.com.)
3、请求的资源是什么:/index.html
4、请求的端口是是什么:默认http是80 https是443
5、请求携带的参数是:属性(请求类型、压缩、认证...)
6、请求最后的空行
4、服务端响应的内容是
1、服务端响应使用的 WEB 服务软件
2、服务器响应请求文件的类型
3、服务端响应请求的文件是否进行压缩
4、服务端响应请求的主机是否进行长连接
5、客户端向服务端发起tcp断开(四次挥手)
客户端 --> 断开请求 fin=1 seq=x --> 服务端
服务端 --> 响应断开 fin=1 ack=x+1 seq=y --> 客户端
服务端 --> 断开连接 fin=1 ack=x+1 seq=z --> 客户端
客户端 --> 确认断开 fin=1 ack=z+1 seq=n --> 服务端
用户访问网站整体流程
- 用户打开浏览器 -> 输入URL
- 查找浏览器缓存,没有缓存,开始正常流程
- 通过 DNS 解析 URL 对应的 ip 地址
- 通过 ip 地址向 web 服务器发送 tcp 连接请求
- 网络设备(交换机、路由器),转发数据
- 网站所在平台的私网防火墙,访问控制(用户识别,什么能进什么不能进)
- 负载均衡调度器,实际上是和调度器建立三次握手后,将http请求发送给调度器
- 调度器将 http 请求发送给 web 服务器
- http 的工作原理
- http 服务器响应数据的过程
- 静态
- nfs
- 动态
- mysql
- redis
- 静态
- 返回数据 数据库 -> redis -> web -> LB(负载,高可用HA)-> network -> 浏览器