1.Web基础 -HTTP协议
1.Web基础 - HTTP协议
1.1 HTTP协议概述
1.2 HTTP工作原理
1.3 HTTP请求响应
1.4 Web 的结构组成
1.5 HTTP访问流程
补充
DNS解析过程
域名
http协议的重点:
http协议的报文
通用
动作
返回码
请求
响应
url
DNS解析过程
http协议的完整过程
1.1 HTTP协议概述
HTTP 全称 HyperText Transfer Protocol 中文名为超文本传输协议
1.什么是超文本?
包含有超链接(Link)和各种多媒体元素标记的文本。这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page)。这些链接使用 URL 表示。最常见的超文本格式是超文本标记语言HTML。
由html文件->包含各种各样的元素(URL链接)->形成web页面
2.那超文本传输 HTTP 协议是什么?
是一种按照 URL 指示,将超文本文档从一台主机(Web服务器)传输到另一台主机(浏览器)的应用层协议,
以实现超链接的功能。
3.有哪些Web资源?
text/html,html格式的文本文档
text/plain,普通的ASCII文本文档
image/jpeg,JPEG格式图片
image/gif,GIF格式图片
video/quicktime,Apple的QuickTime电影
application/vnd.ms-powerpoint,微软的PowerPoint演示文件
1.2 HTTP工作原理
HTTP请求/响应交互模式
用户通过浏览器访问URL为http://www.zmjantastic.com/index.php时,浏览器个Web服务器执行以下动作:
1.浏览器分析链接中的URL
2.浏览器向DNS请求解析
www.zmjantastic.com的IP地址
3.DNS将解析出的IP地址 47.92.239.154返回浏览器
4.浏览器与服务器建立TCP连接
5.浏览器请求文档:GET /index.php
6.服务器给出响应,将文档index.php发送给浏览器
7.释放TCP连接
HTTP的短连接:建立一次tcp的连接,发起一次HTTP的请求,结束,tcp断开
HTTP的长连接:建立一次tcp的连接,发起多次HTTP的请求,结束,tcp断开
1.3 HTTP请求响应
1.HTTP请求报文的方法
get # 获得请求文件信息的数据内容(下载)
post # 用户提交数据至服务器端存储(上传,增资源)
put # 用户提交数据至服务器端存储(上传,改资源)
Request URL:HTTP://10.0.0.7/index.html # 请求的URL
Request Method:GET # 请求的方法
Status Code:200 OK # 当前的状态
Remote Address:10.0.0.7:80 # 远程的主机
2.HTTP返回状态码(Status-Code)以3位数字组成
200 成功
301 永久重定向(redirect)
302 临时重定向(redirect)
304 浏览器缓存
307 内部重定向(redirect)
400 客户端错误
401 认证失败
403 请求不到首页,权限被拒绝
404 资源找不到
500 服务器内部错误,程序代码错误
502 找不到后端的资源 bad gateway
503 服务器过载
504 请求超时
3.用户访问网站携带的参数,以及服务端返回的参数
General:基本信息
Response Headers:响应的头部信息
Request Headers:请求的头部信息
#请求的url
Request URL: HTTPs://www.zmjantastic.com/
#请求方式
Request Method: GET
#状态码
Status Code: 200
#远程主机IP
Remote Address: 39.96.132.69:443
#控制请求头内容
Referrer Policy: no-referrer-when-downgrade
### 请求头信息
```shell
#请求的域名
:authority: www.zmjantastic.com
#请求的方式
:method: GET
#请求的路径
:path: /
#请求的协议:HTTPs
:scheme: HTTPs
#请求资源类型
accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*; q=0.8,application/signed-exchange;v=b3
#压缩
accept-encoding: gzip, deflate, br
#语言
accept-language: zh-CN,zh;q=0.9
#缓存控制(没有做缓存)
cache-control: no-cache
#保持连接:长连接
Connetection:keep-alive
HTTP/1.1版本 #长连接,一次TCP的连接可以发起多次HTTP请求
HTTP/1.0版本 #短连接,一次TCP的连接只能发起一次HTTP请求
还有HTTP/2.0和HTTP/3.0
#请求的域名
Host:www.zmjantastic.com
#登录信息
cookie: wp-settings-1=editor%3Dtinymce%26mfold%3Do%26libraryContent%3Dbrowse;
wp-settings-time-1=1557799119; PHPSESSID=2b8e9773ff24af66ff37e98bc29682dc
#参数:没有缓存
pragma: no-cache
#谷歌自带的(不属于请求头的内容)
upgrade-insecure-requests: 1 #客户端(用户设备)
user-agent:
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/73.0.3683.86 Safari/537.36
响应头信息
#大小
Accept-Range:bytes
#阿里云存储保存时间
ali-swift-global-savetime: 1564813833
#缓存控制
cache-control: no-cache, must-revalidate, max-age=0 #压缩
content-encoding: gzip
#内容长度
content-length: 9410
#返回内容类型及字符集
content-type: text/html; charset=UTF-8
#返回服务器时间
date: Wed, 14 Aug 2019 23:16:43 GMT
#加密id
eagleid: 2dfd119815648138332064260e
#失效时间
expires: Thu, 19 Nov 1981 08:52:00 GMT
#软链接
link: <HTTPs://www.tfantastic.com/wp-json/>; rel="HTTPs://api.w.org/"
#参数:没有缓存
pragma: no-cache
#使用的web软件
server: Nginx
#状态码
status: 200
#指定特定站点允许访问
timing-allow-origin: *
#渲染
vary: Accept-Encoding
#经过各级缓存
via: cache14.l2cm12[99,200-0,M], cache1.l2cm12[101,0], cache13.cn1300[122,200-
0,M], cache4.cn1300[123,0]
------------- 以下都是CDN厂商带的 ----------------
#CDN缓存是否命中
x-cache: MISS TCP_MISS dirn:-2:-2
#缓存版本号
x-powered-by: PHP/7.1.22
#缓存时间
x-swift-cachetime: 0 #保存时间
x-swift-savetime: Sat, 03 Aug 2019 06:30:33 GMT
4.HTTP相关术语 pv 、ip 、uv
PV :页面独立浏览量
UV:独立设备
IP:独立IP
假设公司有一座大厦,大厦有100人,每个人有一台电脑和一部手机,上网都是通过nat转换出口,每个人点击网站2次, 请问对应的pv,uv,ip分别是多少?那么上面的题:
PV: 10022 = 400
UV: 100*2 = 200
IP: 1 (nat转换出口)
日PV千万量级并不大
1.4 Web 的结构组成
web架构组成
基于C/S架构
客户端/服务端
基于B/S架构
浏览器/服务端
- 服务端
Server - 客户端
Client
前面介绍了两个Web应用程序(浏览器和服务器)是如何相互发送报文来实现基本事务处理的。在因特网上,要与很多Web程序进行交互。还有哪些比较重要的应用程序呢?
代理
位于客户端和服务器之间的HTTP中间实体
缓存
HTTP的仓库,使常用页面的副本可以保存在离客户端更近的地方
网关
连接其他应用程序的特殊Web服务器
隧道
对HTTP通信报文进行盲转发的特殊代理
Agent代理
发起自动HTTP请求的半智能Web客户端
1.5 HTTP访问流程
HTTP协议原理
1.用户输入域名->浏览器跳转->DNS解析( 递归查询 | 迭代查询 )
客户端向服务端发起查询->递归查询
服务端向服务端发起查询->迭代查询
2.由浏览器向服务端发起TCP连接(三次握手)
客户端 -->请求包连接-syn=1 seq=x 服务端
服务端 -->向应客户端syn=1 ack=x+1 seq=y 客户端
客户端 -->建立连接 ack=y+1 seq=x+1 服务端
3.客户端发起HTTP请求:
1.请求的方法是什么: Get 获取
2.请求的Host主机是: www.aliyun.com
3.请求的资源是什么: /index.html
4.请求的端口是什么: 默认HTTP是80 HTTPs 443
5.请求携带的参数是: 属性(请求的类型、压缩、认证、等等)
6.请求最后的空行
4.服务端响应的内容是
1.服务端响应使用的WEB服务软件
2.服务端响应请求文件的类型
3.服务端响应请求的文件是否进行压缩
4.服务端响应请求的主机是否进行长连接
5.客户端向服务端发起TCP断开(四次挥手)
客户端 --> 断开请求 fin=1 seq=x --> 服务端
服务端 --> 响应断开 ack=x+1 seq=y --> 客户端
服务端 --> 断开连接 fin=1 ack=x+1 seq=z --> 客户端
客户端 --> 确认断开 ack=z+1 seq=n --> 服务端
用户访问网站整体流程
1.客户端发起HTTP请求,请求会先抵达前端的防火墙
2.防火墙识别用户身份,通过内部交换机将正常的请求通过tcp连接负载均衡,传递用户的HTTP请求
3.负载接收到请求,会根据请求的内容进行下发任务,通过tcp连接web服务器,发送用户的HTTP请求
4.web接收到用户的HTTP请求后,会根据用户请求的内容进行解析,解析分为如下:
静态请求:由web服务器向nfs建立tcp连接,获取对应的图片,最后返回给负衡(负载均衡->防火墙->
用户)
动态请求:有web向后端的动态程序建立TCP连接,将用户的动态HTTP请求传递态程序->由动态程序进行
解析
5.动态程序在解析的过程中,如果碰到查询数据库的请求,则优先和缓存建立tcp接,然后缓存服务发起HTTP
的查询
6.如果缓存没有对应的数据,动态程序再次向数据库建立tcp的连接,然后发起查询。
7.由数据库返回->动态程序->缓存->web服务->负载均衡->防火墙->用户。
用户访问网站流程面试时需注意
按照五层架构模型回答 CDN层->负载层->WEB层->存储层->缓存层->数据库层同时需要注意, 每一层都有对应的缓存机制
补充
URL:统一资源定位
协议://域名:端口/文件路径
协议:http https ftp file cifs
域名:根域、顶级域(一级域、国家域)、二级域、三级域…、主机名
倒状的树根,分布式结构
常用的运营商DNS
武汉电信 202.103.24.68
公共 114.114.114.114
google 8.8.8.8
阿里云 223.5.5.5 223.6.6.6
设置DNS服务器地址
Linux
vim /etc/resolv.conf
添加 nameserver 114.114.144.144
DNS解析过程
递归查询和迭代查询的区别
DNS客户端和本地名称服务器是递归,而本地名称服务器和其他名称服务器之间是迭代。
DNS递归名称解析: 在DNS递归名称解析中,当所配置的本地名称服务器解析不了时,后面的查询工作是由本地名称服务器替代DNS客户端进行的(以“本地名称服务器”为中心),只需要本地名称服务器向DNS客户端返回最终的查询结果即可。
DNS迭代名称解析:(或者叫“迭代查询”)的所有查询工作全部是DNS客户端自己进行(以“DNS客户端”自己为中心)。在条件之一满足时就会采用迭代名称解析方式:
在查询本地名称服务器时,如果客户端的请求报文中没有申请使用递归查询,即在DNS请求报头部的RD字段没有置1。相当于说“你都没有主动要求我为你进行递归查询,我当然不会为你工作了”。
客户端在DNS请求报文中申请使用的是递归查询(也就是RD字段置1了),但在所配置的本地名称服务器上是禁用递归查询(DNS服务器一般默认支持递归查询的),即在应答DNS报文头部的RA字段置0。
域名
mail.cctv.com (mail 是三级域名 cctv是二级域名 com是顶级域名)
这是中央电视台用于手法电子邮件的计算机的域名,它由三个标号组成,其中标号com是顶级域名,标号cctv是二级域名,标号mail是三级域名。
域名只是逻辑概念,并不代表计算机所在的物理地点。据2006年12月统计,现在顶级域名TLD(Top Level Domain)已有265个,分为三大类:
(1)国家顶级域名nTLD:采用ISO3166的规定。如:cn代表中国,us代表美国,uk代表英国,等等。国家域名又常记为ccTLD(cc表示国家代码contry-code)。
(2)通用顶级域名gTLD:最常见的通用顶级域名有7个,即:com(公司企业),net(网络服务机构),org(非营利组织),int(国际组织),gov(美国的政府部门),mil(美国的军事部门)。
(3)基础结构域名(infrastructure domain):这种顶级域名只有一个,即arpa,用于反向域名解析,因此称为反向域名。
www.qq.com
域名是qq.com.
.表示根域
.com表示一级域
qq表示二级域
主机名是www
域名只是逻辑概念,并不代表计算机所在的物理地点。据2006年12月统计,现在顶级域名TLD(Top Level Domain)已有265个,分为三大类:
(1)国家顶级域名nTLD:采用ISO3166的规定。如:cn代表中国,us代表美国,uk代表英国,等等。国家域名又常记为ccTLD(cc表示国家代码contry-code)。
(2)通用顶级域名gTLD:最常见的通用顶级域名有7个,即:com(公司企业),net(网络服务机构),org(非营利组织),int(国际组织),gov(美国的政府部门),mil(美国的军事部门)。
(3)基础结构域名(infrastructure domain):这种顶级域名只有一个,即arpa,用于反向域名解析,因此称为反向域名。