# Nginx 基础 Http 协议
# 1.Http 协议介绍
# 1.1 什么是 URL
通常我们在访问一个网站页面时,请求到的内容通称为 "资源"。而 “资源 “这一概念非常宽泛,它可以是一份文档,一张图片,或所有其他你能够想到的格式。每个资源都由一个 URI 来进行标识;比如: http://fj.ixuyong.cn/public/tt.jpeg 这样的资源,我们会将该其称为 URL 地址;百度百科解释:URL 简称统一资源定位符,用来唯一地标识万维网中的某一个资源。URL 由协议、主机名称、端口以及文件名几部分构成。
# 1.2 什么是 HTML
Html 简称 Web Page,一个完整的 Html 页面可能会包含很多个 URL 的资源。(反之:我们也可以理解一个 HTML 文件是由多个不同的 URL 资源拼接而成的。)
# 1.3 什么是 HTTP
HTTP (Hyper Text Transfer Protocol) 中文名为超文本传输协议。是一种能够获取如 HTML 这样网络资源的通讯协议。它是在 Web 上进行数据交换的基础。HTTP 的概述参考 URL 简单理解:HTTP 协议就是将用户请求的 HTML 页面从一台 Web 服务器传输到客户端浏览器的一种协议。
# 1.4 URL、HTML、HTTP 之间关系
一个完整的 HTML 页面是由多个不同的 Url 资源组成的;而 HTTP 协议主要是用来传输这种 HTML 页面的;
# 2.Http 工作原理
# 2.1 图解 HTTP 工作原理
我们详细的了解下 HTTP 的工作原理,我们到底是如何获取到服务器上的页面。
# 2.2 HTTP 工作原理总结
整个用户访问网站过程就是 DNS-TCP-HTTP
# 3.Http 请求 Request
HTTP 请求的一个例子:
# 3.1 请求 Method
客户端向服务端发送请求时,会根据不同的资源发送不同的请求方法 Method:
- GET:用于获取 URI 对应的资源;(比如看朋友圈)
- POST:用于提交请求,可以更新或者创建资源,是非幂等的;(发布朋友圈)
- PUT:用于向指定的 URI 传送更新资源,是幂等的;(更新朋友圈)
- DELETE:用于向指定的 URI 删除资源;(比如删朋友圈)
- HEAD:用于检查 (仅获取 Header 部分的内容);
一般创建对象时用 POST,更新对象时用 PUT;
- PUT 是幂等的,POST 是非幂等的;
- 幂等:对于相同的输入,每次得到的结果都是相等的;
# 3.2 请求 Header
:authority: www.xuliangwei.com | |
:method: GET | |
:path: / | |
:scheme: https | |
Accept: text/html, # 请求的类型 | |
Accept-Encoding: gzip, deflate # 是否进行压缩 | |
Accept-Language: zh-CN,zh;q=0.9 # 请求的语言 | |
Cache-Control: max-age=0 # 缓存 | |
Connection: keep-alive # TCP 长连接 | |
Host: www.oldboyedu.com # 请求的域名 | |
If-Modified-Since: Fri, 04 May 201808:13:44 GMT # 修改的时间 | |
User-Agent: Mozilla/5.0 # 请求浏览器的工具 |
# 3.3 请求 Connection
Http 请求中的长连接与短连接是什么:
- http1.0 协议使用的是短连接:建立一次 tcp 的连接,发起一次 http 的请求,结束,tcp 断开。
- http1.1 协议使用的是长连接:建立一次 tcp 的连接,发起多次 http 的请求,结束,tcp 断开。
- HTTP 协议版本参考下图,HTTP1.0 使用的是短连接,HTTP1.1 串行连接,与 HTTP2.0 并行连接。
# 4.Http 响应 Response
HTTP 响应的一个例子:
# 4.1 响应 Header
HTTP/1.1 200 OK # 返回服务器的 http 协议,状态码 | |
Date: Fri, 14 Sep 2018 09:14:28 GMT # 返回服务器的时间 | |
Server: Apache/2.4.6 # 返回服务器使用的软件 Apache | |
Connection: Keep-Alive # TCP 长连接 | |
Keep-Alive: timeout=5, max=100 # 长连接的超时时间 |
# 4.2 响应 Code
http 响应状态码 Status-Code 以 3 位数字组成,用来标识该请求是否成功,比如是正常还是错误等。
Code | 说明 |
---|---|
200 | 表示成功客户端成功接收到了服务端返回的数据,这是最常见的状态码 |
206 | 客户端发完请求后,服务端只是返回了部分数据,就会出现该状态码,例如当下载一个很大的文件时,在没有下载完成前就会出现该状态码 |
301 | 永久重定向 (redirect) http-->https |
302 | 临时重定向 (redirect) |
400 | 客户端请求语法错误,服务端无法理解 |
401 | 服务端开启了用户认证,而客户端没有提供正确的验证信息 |
403 | 服务端不允许客户端访问,或者没有找到默认返回页面 (默认所有的 web 服务器返回的页面都是 index.html、也可以调整默认返回页面 app.html) |
404 | 客户端请求的资源不存在 (路径写错了;服务端真的没有;) |
413 | 客户端向服务端上传一个比较大的文件,并且文件大小超过了服务端的限制 1MB; |
500 | 服务端出现了内部错误,需要进行人为排查故障 (链接数据库类服务异常,会出现 500 错误) |
502 | 服务器充当代理角色时,后端被代理的服务器不可用或者没有正常回应 |
503 | 服务当前不可用,由于超载或系统维护,服务器暂时的无法处理客户端请求 |
504 | 服务器充当代理角色时,后端的服务端没有按时返回数据,超时了 |
# 5.Http 相关术语
# 5.1 什么是 PV
PV 即页面浏览量:比如用户访问一个网站算 1 个 pv,刷新一次页面则累计 pv+1,如果多次打开或刷新同一页面则浏览量累计。
# 5.2 什么是 UV
UV 即独立访客,访问网站的一台电脑客户端为一个访客。可以理解成访问某网站的电脑的数量。比如电脑、手机算 2 个 UV,无论访问多少次网站,最终 UV 数量就是 2。
# 5.3 什么是 IP
IP 即独立公网 IP 数,是指 1 天内多少个独立的 IP 浏览了页面,比如你在家通过拨号上网访问某个网站,此时网站会记录你的公网 IP 地址。那如果你在公司和很多同事同时访问一个网站,那该网站会记录多少个公网 IP 呢?(看公司有多少个出口公网地址)
# 5.4 什么是并发
并发:指的是同时,我们可以理解为一段时间内 (比如 10 秒),网站支持同时访问的人数,假设 10s 并发值如果为 500 时,一天能达到多少 PV? 500 * 6 * 60 * 24 =4320000