再谈http协议
目录
内容概述
1.http协议
-1.1 什么是http协议
-1.2 什么是URL?
2.http协议的原理
3.访问网站的分析
-3.1 请求报文的格式
-3.2 基本信息 General
-3.3 响应头部 Response Headers
-3.4 请求头部 Request Headers
4.http请求方法
5.http响应方法
6.http请求流程总结
7.http内容补充
8.Nginx Web基础
-8.1 什么是nginx?
-8.2 nginx的特点
-8.3 了解其他的一些web服务
-8.4 nginx应用的场景
-8.5 nginx安装
-8.5.1 epol源安装
-8.5.2 官方源安装
-8.5.3 源码包安装
内容详解
1.http协议
1.1 什么是http协议?
HTTP的全称为"Hyper Text Transfer Protocol",中文名叫做超文本协议
什么是超文本?
# “超文本”是超级文本的中文缩写,超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本,这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page).这些链接使用URL表示.最常见的超文本格式是超文本标记语言HTML.
1.2 什么是URL?
URL,全称是UniformResourceLocator,中文叫统一资源定位符,是互联网上用来标识某一处资源的地址,是一种特殊类型的URI,包含了用于查找某个资源的足够的信息.
一个完整的URL包括以下几部分:
# 1.协议部分:http:// 如果不写,浏览器会自动补全,但必须有.
# 2.www.cnblogs.com:80 也可以使用ip地址作为域名使用
# 3.端口部分:80
# 4.虚拟目录部分:/linhaifeng/articles/ 注意,是虚拟的目录,并不是真实物理服务器上的目录.
# 5.文件名部分:8243379.html
# 6.参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分.
# 7.锚部分:#_label2 从“#”开始到最后,都是锚部分.
http:// www.cnblogs.com:80 /linhaifeng/articles/8243379.html#_label2
客户端请求的/--------------->服务端网站的根目录/var/www/html
/linhaifeng/articles/8243379.html ----> /var/www/html/linhaifeng/articles/8243379.html
http 和 URL 和 html 的关系:
一个完整的html是由很多个URL组成的,而http是将html的内容进行传输和解析的.
2.http协议的原理
1.当我们输入一个网址(https://https://www.cnblogs.com/litianyang/p/15072275.html),浏览器会分析这个URL.
2.浏览器会向DNS服务器请求解析域名,该URL中的域名www.cnblogs.com,解析出博客园服务器所在的ip地址.
3.解析出的ip地址被返回给了浏览器
4.浏览器会立刻与得到的ip地址所在的服务器建立TCP连接(端口默认为80)
5.浏览器请求文档,也就是咱们常说的html页面,GET /index.html,并发出HTTP请求报文.
6.服务器给出响应,将请求的index.html文档返回给浏览器,也就是响应了HTTP请求的报文.
7.TCP连接响应后,会断开连接.(有些情况下并不会立刻断开连接)
8.最后浏览器内部运行得到的index.html,就能显示出我们要访问的页面了.
3.访问网站的分析
3.1 请求报文的格式
完整的请求报文是这样的:
1.GET那一部分内容被称为:请求头信息
2.GET和HTTP之间有一个空行被称为:请求空行
3.HTTP中的信息被称为:回应信息
4.HTTP与faa之间也有个空行被称为:响应空行
5.faa部分被称为:主体
#请求头信息
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: baidu.com
> Accept: */*
> #请求空行
#回应信息
< HTTP/1.1 200 OK
< Date: Wed, 25 Nov 2020 07:53:15 GMT
< Server: Apache
< Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
< ETag: "51-47cf7e6ee8400"
< Accept-Ranges: bytes
< Content-Length: 81
< Cache-Control: max-age=86400
< Expires: Thu, 26 Nov 2020 07:53:15 GMT
< Connection: Keep-Alive
< Content-Type: text/html
< #响应空行
#主体
<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>
3.2 基本信息 General
Request URL: https://www.cnblogs.com/litianyang/ # 请求的URL
Request Method: GET # 请求的方式
Status Code: 200 ok # 请求的状态码
Remote Address: 121.40.43.188:443 # 请求的服务器远端地址
Referrer Policy: origin-when-cross-origin # 响应头设置:对于同源的请求,会发送完整的URL作为引用地址,但是对于非同源请求仅发送文件的源
3.3 响应头部 Response Headers
cache-control: no-cache, no-store # 缓存控制
content-encoding: gzip # 压缩
content-type: text/html; charset=utf-8 # 响应数据的类型
date: Mon, 09 Aug 2021 07:20:16 GMT # 返回数据的时间
pragma: no-cache # 没有缓存
strict-transport-security: max-age=2592000; includeSubDomains; preload
vary: Accept-Encoding 渲染
3.4 请求头部 Request Headers
:authority: www.cnblogs.com # 请求的域名
:method: GET # 请求的方式
:path: /litianyang/ # 请求的地址文件
:scheme: https # 请求的协议
accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signedexchange;v=b3;q=0.9 # 请求的资源
accept-encoding: gzip, deflate, br 压缩
accept-language: zh-CN,zh;q=0.9 # 字符类型
cache-control: max-age=0 # 缓存的时间
cookie: __gads=ID=e4364ee64bebed0d:T=1624159608:S=ALNI_MZ4QpbvQLTZwBP1kxvr08yg1M95dg; Hm_lvt_ca5d5fb850893fd00cc8f40072daa190=1624498364; UM_distinctid=17a5f57915a9dc-094d355291eff9-3373266-1fa400-17a5f57915b7b6; CNZZDATA1274152299=1348887849-1625097213-https%253A%252F%252Fwww.cnblogs.com%252F%7C1625097213; CNZZDATA1278917617=1145720610-1625491483-https%253A%252F%252Fwww.baidu.com%252F%7C1625491483; Hm_lvt_ae80cc662109a34c868ba6cbe3431c8d=1626998463; theme=light; theme=light; _ga_3Q0DVSGN10=GS1.1.1626999607.3.1.1626999607.0; _ga=GA1.2.969653626.1624159604; Hm_lvt_742e9bdb6e867044bb348deab863d79d=1627003818; _gid=GA1.2.308438210.1627791671; .Cnblogs.AspNetCore.Cookies=CfDJ8NACB8VE9qlHm6Ujjqxvg5CRV2xM9BkUo5t-gxz8IJ6y4KeXDmP3M-JN4bHSw4W1NhMvYOAIIn0qutebA8AeMZMrmRYzc7Gawn1L84ToLnUycd83Jebuhohm8xa9zXJRu4cX2HQezG6Il1eSh1iyJNetUoa4OcGt-71Vpfp8D9e8XRm3cPloq3nNvI1ml1pPtMmtJ56YaiLfVOp2uE6J50LigavWc7imQ_qh7pXeBnZec3qT2b8fLTwYL0MgCzpVjfeqH6mJrg69-pOdRopS193uHEIA_AWiMAI6XwUW5T4bSkg64Bce5BZmICz-AlHroZsVTZ2Vl8Rkh4S4FkLFY2blMAoe6VdU8qENbPfyrEvowfDaywntKtqgnQUdzD45vNkvrGIUzAne_temLVl4Qudq52w96rQ8q8SAJ1TUk-w2Abi7ef2KF-5guZPwhxkYXHvKQy43sUJueM9mUtOQoubc54DDfDjimoJnuZD-X9_A7tRIUFFoJF1lWX8SRXJ3mRy09wXT8ncffY4XYDG6oDdbMap89Tocn5QD3sFduFN_DPoHBZzzpSCT6rBEQrHKlQ; .AspNetCore.Antiforgery.b8-pDmTq1XM=CfDJ8NACB8VE9qlHm6Ujjqxvg5AIHHvqdxANE2IJw2c7O7nPi9FD2iNezrerScuoPPPdJe8s5tGmHK0n2Da0tqGggsGWINqrMT-NeyYEkzJxHRLytgB7vikIQ2f8T81OVcVWO6D-lcmMBkXGlMohw7WjbB4
referer: https://www.cnblogs.com/litianyang/p/15072275.html
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
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/91.0.4472.101 Safari/537.36# 客户端信息
4.http请求方法
在HTTP请求报文中的方法(Method),是对所请求对象所进行的操作,也就是一些命令.请求报文中的操作有:
GET 请求读取一个web页面
POST 上传一个文件(比如web页面)
DELETE 删除web页面
CONNECT 用于代理服务器
HEAD 请求读取一个web页面的toubu
PUT 请求修改一个web页面
TRACE 用于测试,要求服务器送回收到的请求
OPTION 查询特定选项
5.http响应方法
状态码(status-code)是响应报文状态行中包含的一个3位数字,指明特定的请求是否被满足,如果没有满足,它的原因是什么.状态码分为以下五类:
1xx 通知信息 100=服务器正在处理客户请求
200 成功 200=请求成功(ok)
301永久移动,永久重定向(跳转) 被请求的资源已被永久移动位置
302临时重定向(跳转) 请求的资源现在临时从不同的URL响应请求
304 本地缓存
305 使用代理 被请求的资源必须通过指定的代理才能访问
307 内部重定向(跳转) 临时跳转,被请求的资源临时从不同的URL响应请求
400 客户端错误 错误请求
401 认证失败
402 需要付款 该状态码是为了将来可能的需求而预留的,用于一些数字货币或者微支付
403 找不到主页,权限不足 服务器已理解请求,但拒绝执行它
404 找不到页面 请求失败,资源不存在
500 内部错误 服务器遇到未知的错误,导致它无法完成对请求的处理
502 找不到后端主机
503 服务器过载
504 后端主机超时
6.http请求流程总结
1.用户输入域名 - > 浏览器跳转 - > 浏览器缓存 - > Hosts文件 - > DNS解析(递归查询|迭代查询) # 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主机是: blog.driverzeng.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=x+1 seq=sj --> 服务端
7.http内容补充
1.http协议版本:
HTTP/1.0 # 短连接
HTTP/1.1 # 长连接
HTTP/2.0 # 长连接
HTTP/3.0
2.PV,UV和IP
1.)PV:(Page View)访问量,即页面浏览量或点击量衡量网站用户访问的网页数量.在一定统计周期内用户每打开或刷新一个页面就记录1次,多次打开或刷新同一页面则浏览量累计.
2.)UV:(Unique Visitor)独立访客,统计1天内访问某站点的用户数(以cookie为依据);访问网站的一台电脑客户端为一个访客.可以理解成访问某网站的电脑的数量.网站判断来访电脑的身份是通过来访电脑的cookies实现的.如果更换了IP后但不清除cookies,再访问相同网站,该网站的统计中UV数是不变的.如果用户不保存cookies访问,清除了cookies或者更换设备访问,计数会"加1".00:00-24:00 内相同的客户端多次访问只计为1个访客.
3.)IP:(Internet Protocol)独立IP数,是指1天内多少个独立的IP浏览了页面,即统计不同的IP浏览用户数量.同一IP不管访问了几个页面,独立IP数均为1.不同的IP浏览页面,计数就会"加1". IP是基于用户广域网IP地址来区分不同的访问者的,所以,多个用户(多个局域网IP)在同一个路由器(同一个广域网IP)内上网,可能被记录为一个独立IP访问者.如果用户不断更换IP,则有可能被多次统计.
3.SOA松耦合架构
面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言.这使得构建在各种各样的系统中的服务可以用一种统一和通用的方式进行交互.
比如某天京东的官方页面崩了,但是不影响购物车,支付以及其他功能的一些使用,这便是松耦合架构的应用.
8.Nginx Web基础
8.1 什么是nginx?
Nginx是一款开源的,轻量级的Web服务器/反向代理服务器以及电子邮件代理服务器,并在一个BSD-like协议下发行.由俄罗斯的程序设计师lgor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用.其特点是占有内存少并发能力强事实上nginx的并发能力确实在同类型的网页服务器中表现较好.
8.2 nginx的特点
1.高性能,高并发
nginx能支持很高的并发,而且在处理大量并发的情况下比其他web服务要更快.
2.轻量且高拓展性
占用内存资源低,模块易读,便于二次开发,可以根据需求安装模块,不需要全部安装,并且支持第三方模块.
3.高可靠性
其他web服务需要每隔一段时间进行重启,nginx不需要,nginx的年宕机时间最低为99999级别.
4.支持热部署
nginx可以在运行期间更新迭代或者进行代码部署.
5.大家都在用
Nginx技术成熟,具备的功能是企业最常使用而且最需要的适合当前主流架构趋势,微服务,云架构,中间层,并且能统一技术栈,降低维护成本,降低技术更新成本.
8.3 了解其他的一些web服务
1.apache:httpd,最早期使用的web服务,性能不高,操作难.
2.nginx:
tengine:Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.
openresty-nginx:OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并发,扩展性极高的动态 Web 应用,Web 服务和动态网关.
3.IIS:windows下的web服务
4.lighttpd:是一个德国人领导的开源 Web 服务器软件,其根本的目的是提供一个专门针对高性能网站,安全,快速,兼容性好并且灵活的 Web Server 环境.具有非常低的内存开销,CPU 占用率低,效能好,以及丰富的模块等特点.
5.GWS:google web server
6.BWS:baidu web server
Tomcat
Resin
weblogic
Jboss
8.4 nginx应用的场景
1.静态服务:
浏览器缓存,防资源盗用,资源分类,资源压缩,资源缓存,跨域访问
2.代理服务
正向代理,反向代理,负载均衡,动静分离,代理缓存
3.安全服务
访问控制,流量限制,访问限制,拦截攻击,拦截异常请求
4.主流架构
linux+nginx+mysql+php LNMP
linux+nginx+mysql+java LNMT
linux+nginx+mysql+python
8.5 nginx安装
8.5.1 epol源安装
yum install -y nginx
不够标准
8.5.2 官方源安装
# 配置官方源 nginx官网: https://nginx.org/
cd /etc/yum.repos.d && touch nginx.repo
cat > /etc/yum.repos.d/nginx.repo << EOF
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
# 清除,生成缓存
yum clean all
yum makecache
# 查看有哪些nginx版本可以安装
yum list nginx --show-duplicates
安装指定nginx的指定版本
yum install -y nginx-1.16.0
# 查看安装的nginx版本
nginx -v
# 启动nginx并加入开机自启
systemctl enable --now nginx
8.5.3 源码包安装
# 在nginx官网下载源码包
wget https://nginx.org/download/nginx-1.20.1.tar.gz
# 解压源码包
tar -xf nginx-1.20.1.tar.gz
# 进入源码包目录下
cd nginx-1.20.1
./configure
# 编译
make
# 安装
make install