一,http 相关概念
(一)关键名词
1,互联网
是网络的网络,是所有类型网络的母集
2,因特网
世界上最大的互联网网络。即因特网概念从属于互联网概念。习惯上,大家把连接在因特网上的计算机都成为主机。
3,万维网
WWW(world wide web)万维网并非某种特殊的计算机网络,是一个大规模的、联机式的信息贮藏库,使用链接的方法能非常方便地从因特网上的一个站点访问另一个站点(超链技术),具有提供分布式服务的特点。万维网是一个分布式的超媒体系统,是超文本系统的扩充,基于B/S架构实现
4,URL
万维网使用统一资源定位符(Uniform Resource Locator)来标志万维网上的各种文档,并使每个文档在整个因特网的范围内具有唯一的标识符URL。
5,HTTP
超文本传送协议(HyperText Transfer Protocol)。HTTP是处于应用层的协议,使用TCP传输层协议进行可靠的传送。因此,需要特别提醒的是,万维网是基于因特网的一种广泛因特网应用系统,且万维网采用的是HTTP(80/TCP)和 HTTPS(443/TCP)的传输协议,但因特网还有其他的网络应用系统(如:FTP、SMTP等等)。
6,HTML
超文本标记语言(HyperText Markup Language),使得万维网页面的设计者可以很方便地用链接从页面的某处链接到因特网的任何一个万维网页面,并且能够在自己的主机品目上将这些页面显示出来。HTML与txt一样,仅仅是是一种文档,不同之处在于,这种文档专供于浏览器上为浏览器用户提供统一的界面呈现的统一规约。且具备结构化的特征,这是txt所不具备的强制规定
具体理解:这是个 格式文件 为了统一标准 (理解为类似 txt文件格式)
(二) http 关于80端口报错
1,原理
超文本传送协议HTTP是处于应用层的协议,使用TCP传输层协议,80端口
端口号作用: 访问应用程序
(其实是确定协议) 协议再确定程序
为什么呢? 因为一个电脑只可能有一个80端口程序
2,80端口报错
报错:不能绑定80端口 因为被占用了
http 和nginx 只会有一个
(三) 瑞士军刀(通过端口聊天)
电脑一 通过端口8000
和电脑二聊天
(四) 访问浏览器的过程
二,HTTP 协议通信过程
HTTP协议分层
三,HTTP 相关技术
(一)WEB前端开发语言
1,html
超文本标记语言,编程语言,主要负责实现页面的结构(页面)
2, css
层叠样式表, 定义了如何显示(装扮) HTML 元素,比如:字体大小和颜色属性等。样式通常保存在外部的 .css 文件中,用于存放一些HTML文件的公共属性,从而通过仅编辑一个简单的 CSS 文档,可以同时改变站点中所有页面的布局和外观。(美颜)
3,javascript
实现网页的动画效果,但实属于静态资源 与Java无关
(二)MIME
1,含义
MIME : Multipurpose Internet Mail Extensions 多用途互联网邮件扩展
文件 /etc/mime.types ,来自于mailcap包
MIME格式:type/subtype
2,具体含义
资源在这里,点这个文件 就是打开给你看 否则下载
例如 image/jpeg image是大类 jpeg是小类
(三)网页程序的根
1,apache
访问 http://192.168.217.100/a.jpg
真正访问 http://192.168.217.100/var/www/html/a.jpg
2,nginx
这个a.jpg 首先是在 192.168.91.100 这台服务器上
/ 根代表的是 系统的根么? 不是
nginx 网页程序的根 /usr/share/nginx/html
访问 http://192.168.217.100/a.jpg
真正访问 http://192.168.217.100/usr/share/nginx/html/a.jpg
(四)URI URN URL
1, URI
URI: Uniform Resource Identifier 统一资源标识,分为URL 和 URN
2, URN
URN:Uniform Resource Naming,统一资源命名
示例: P2P下载使用的磁力链接是URN的一种实现
magnet:?xt=urn:btih:660557A6890EF888666
具体理解:
统一资源命名 找资源是根据文件名(无论文件在哪里)只要网上有资源,就可以下,速度很快
迅雷种子
3, URL
3.1 作用
描述文件确切位置
比如说,你访问京东,实际上是访问这个文件
3.2组成
://:@:/;?#
scheme:方案,访问服务器以获取资源时要使用哪种协议
user:用户,某些方案访问资源时需要的用户名
password:密码,用户对应的密码,中间用:分隔
Host:主机,资源宿主服务器的主机名或IP地址
port:端口,资源宿主服务器正在监听的端口号,很多方案有默认端口号
path:路径,服务器资源的本地名,由一个/将其与前面的URL组件分隔
params:参数,指定输入的参数,参数为名/值对,多个参数,用;分隔
query:查询,传递参数给程序,如数据库,用?分隔,多个查询用&分隔
frag:片段,一小片或一部分资源的名字,此组件在客户端使用,用#分隔
(五) 网站访问量
网站访问量统计的重要指标
- IP(独立IP):即Internet Protocol,指独立IP数。一天内来自相同客户机IP 地址只计算一次,记录远程客户机IP地址的计算机访问网站的次数,是衡量网站流量的重要指标
- PV(访问量): 即Page View, 页面浏览量或点击量,用户每次刷新即被计算一次,PV反映的是浏览某网站的页面数,PV与来访者的数量成正比,PV并不是页面的来访者数量,而是网站被访问的页面数量
目前主流统计方式
- UV(独立访客):即Unique Visitor,访问网站的一台电脑为一个访客。一天内相同的客户端只被计算一次。可以理解成访问某网站的电脑的数量。网站判断来访电脑的身份是通过cookies实现的。如果更换了IP后但不清除cookies,再访问相同网站,该网站的统计中UV数是不变的
四,HTTP工作机制
1,一次http事务包括:
- http请求:http request
- http响应:http response
2,资源类型
- 静态文件:无需服务端做出额外处理,服务器端和客户端的文件内容相同
常见文件后缀:.html, .txt, .jpg, .js, .css, .mp3, .avi - 动态文件:服务端执行程序,返回执行的结果,服务器端和客户端的文件内容不相同
常见文件后缀:.php, .jsp ,.asp
3,提高HTTP连接性能
- 并行连接:通过多条TCP连接发起并发的HTTP请求
- 持久连接:keep-alive,重用TCP连接,以消除连接和关闭的时延,以事务个数和时间来决定是否关闭连接
- 管道化连接:通过共享TCP连接,发起并发的HTTP请求
- 复用的连接:交替传送请求和响应报文(实验阶段)
五,HTTP 协议版本
0.9 只有 get 只有下载 没有上传
1.0 没有长连接 可以下载 和上传
1.1 支持 长连接 可以下载和上传
六,HTTPS协议
1,含义
HTTPS就是安全版的HTTP,目前大型网站基本实现全站HTTPS
2,https 特点
- HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费
- HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的
- HTTP和HTTPS使用的是不同的连接方式,端口不同,前者是80,后者是443
- HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题
- HTTPS 实现过程降低用户访问速度,但经过合理优化和部署,HTTPS 对速度的影响还是可以接受的
七,HTTP 请求访问的完整过程
(一)完整过程
- 建立连接
- 接收请求
- 处理请求
- 访问资源
- 构建响应报文
- 发送响应报文
- 记录日志
(二)画图理解
1,内核 收到 请求后 会根据报文中 端口号信息, 找到处理该请求的进程 你要 找的端口号是80
2,会将请转交给80端口上的 进程(nginx)nginx进程会根据请求对照 配置文件进行处理
3,nginx 进程分析完要去找资源, 由于他是进程 他没有资格直接使用磁盘上的资源, 所以需要内核协助获取资源(a.jpg)
4,内核去磁盘上找资源, 找到以后再给 nginx 进程
5,nginx进程拿到资源后会构建响应报文,构建完成后 再 发给内核
6,内核 再把 响应网卡 ,网卡再发给客户机
(三) 具体理解
1,建立连接
接收或拒绝连接请求
2,接收请求
接收客户端请求报文中对某资源的一次请求的过程
2,1 Web访问响应模型(Web I/O)
- 单进程I/O模型:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应
一次只能处理一个,效率很慢,生产环境不用,处理完了才能在做下一个
- 多进程I/O模型:并行启动多个进程,每个进程响应一个连接请求
多少个请求就开多少个进程(但是进程不干活,是线程干活,这能解决慢的问题,但是会浪费硬件资源)
- 复用I/O结构:启动一个进程,同时响应N个连接请求
一个进程,开多个线程干活
- 复用的多进程I/O模型:启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求
开多个进程,再开多个干活的线程,生产环境最常用
3,处理请求
服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理常用请求Method: GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS
4,访问资源
服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源
5,构建响应报文
一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中 包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体
5.1 响应实体
如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括:
描述了响应主体MIME类型的Content-Type首部
描述了响应主体长度的Content-Length
实际报文的主体内容
5.2 URL重定向
web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径
referer : t跳转至当前uri 的前一个 url
比如:百度 搜索京东 进京东 你的 referer 就是百度
5.3 MIME类型
Web服务器要负责确定响应主体的MIME类型。多种配置服务器的方法可将MIME类型与资源管理起来
魔法分类:Apache web服务器可以扫描每个资源的内容,并将其与一个已知模式表(被称为魔法文件)进行匹配,以决定每个文件的MIME类型。这样做可能比较慢,但很方便,尤其是文件没有标准扩展名时
显式分类:可以对Web服务器进行配置,使其不考虑文件的扩展名或内容,强制特定文件或目录内容拥有某个MIME类型
类型协商: 有些Web服务器经过配置,可以以多种文档格式来存储资源。在这种情况下,可以配置Web服务器,使其可以通过与用户的协商来决定使用哪种格式(及相关的MIME类型)"最好"
6,发送响应报文
Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束
7, 记录日志
最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务
八, http协议及报文头部结构
(一)http 协议相关概念
1,http 协议
http协议:http/0.9, http/1.0, http/1.1, http/2.0,http/3.0
http协议:stateless 无状态, 服务器无法持续追踪访问者来源
2,解决http协议无状态方法
- cookie 客户端存放
- session 服务端存放
3,http事务:一次访问的过程
- 请求:request
- 响应:response
4,HTTP报文结构协议查看或分析的工具
tcpdump, wireshark,tshark
(二)HTTP请求报文 格式
1,具体格式如下
2,request报文格式
例子:
GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: www.magedu.com
User-Agent: HTTPie/0.9.4
3,方法 具体介绍
- GET: 获取资源 当前网络请求中,绝大部分使用的是 GET 方
- HEAD: 获取报文首部,主要用于确认 URL 的有效性以及资源更新的日期时间等
- POST: 传输实体主体 (比如传输 用户名密码)
- PUT: 上传文件(比如写博客)
- PATCH: 对资源进行部分修改
- DELETE:删除文件
- OPTIONS:查询支持的方法(查看服务端可以支持哪些方法)
- CONNECT:要求在与代理服务器通信时建立隧道(类似加密)
- TRACE:追踪路径
4, url 具体介绍
4.1 url 作用
指明资源的具体位置
4.2 url 格式
://:@:/;?#
4.3 scheme 方案
访问服务器以获取资源时要使用哪种协议
- http 超文本传输协议
- https 安全的http协议
- ftp 文件传输协议
4.4 user:帐号
4.5 password:密码
4.6 host:主机名 或 域名 或 ip地址
4.7 port: 服务器端口号
4.8 path:访问资源的路径,
相当于组件路径
4.9 params:参数
但是这个不常用,指定一些参数,譬如指定传输方式
4.10 qurey:查询参数
4.11 frag:html资源片段
譬如html文档过大的时候,frag定位到html的一部分
5, 首部字段 具体介绍
使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容,HTTP 首部字段是由首部字段名和字段值构成的,中间用冒号“:” 分隔
首部的分类
5.1 通用首部
请求报文和响应报文两方都会使用的首部
- Date: 报文的创建时间
- Connection:连接状态,如keep-alive, close
- Via:显示报文经过的中间节点(代理,网关)
- Cache-Control:控制缓存,如缓存时长
- MIME-Version:发送端使用的MIME版本
- Warning:错误通知
5.2 请求首部
从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、请求内容相关优先级等信息
- Accept:通知服务器自己可接受的媒体类型
- Accept-Charset: 客户端可接受的字符集
- Accept-Encoding:客户端可接受编码格式,如gzip
- Accept-Language:客户端可接受的语言
- Client-IP: 请求的客户端IP
- Host: 请求的服务器名称和端口号
- Referer:跳转至当前URI的前一个URL
- User-Agent:客户端代理,浏览器版本
- Expect:允许客户端列出某请求所要求的服务器行为(条件式请求首部)
- If-Modified-Since:自从指定的时间之后,请求的资源是否发生过修改(条件式请求首部)
- If-Unmodified-Since:与上面相反(条件式请求首部)
- If-None-Match:本地缓存中存储的文档的ETag标签是否与服务器文档的Etag不匹配(条件式请求首部)
- If-Match:与上面相反 (条件式请求首部)
- Authorization:向服务器发送认证信息,如账号和密码(安全请求首部)
- Cookie: 客户端向服务器发送cookie
- Proxy-Authorization: 向代理服务器认证 ( 代理请求首部)
5.3 响应首部
从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息
- 协商首部:某资源有多种表示方法时使用
- Accept-Ranges:服务器可接受的请求范围类型
- Vary:服务器查看的其它首部列表
- 安全响应首部:
- Set-Cookie:向客户端设置cookie
- WWW-Authenticate:来自服务器对客户端的质询列表
- 信息性:
- Age:从最初创建开始,响应持续时长
- Server:服务器程序软件名称和版本
5.4 实体首部
针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的的信息
- 缓存相关:
- ETag:实体的扩展标签
- Expires:实体的过期时间
- Last-Modified:最后一次修改的时间
- Allow: 列出对此资源实体可使用的请求方法
- Location:告诉客户端真正的实体位于何处
- Content-Encoding:对主体执行的编码
- Content-Language:理解主体时最适合的语言
- Content-Location: 实体真正所处位置
- Content-Type:主体的对象类型,如text
5.5 扩展首部
6, 实体 具体介绍
请求时附加的数据或响应时附加的数据,例如:登录网站时的用户名和密码,博客的上传文章,论坛上的发言等。
7,用http报文格式 下载东西
为什么 curl 可以直接下载 因为curl 文字版浏览器帮我写了htttp 报文
(三)HTTP 相应报文 格式
1,具体格式如下
2,response报文格式
范例: curl -v 192.168.91.100 |head
HTTP/1.1 200 OK
Cache-Control: max-age=3, must-revalidate
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html; charset=UTF-8
Date: Thu, 07 Nov 2019 03:44:14 GMT
Server: Tengine
Transfer-Encoding: chunked
Vary: Accept-Encoding
Vary: Accept-Encoding, Cookie
3,状态码
三位数字,标记请求处理过程中发生的情况
3.1 http协议状态码分类
1xx:100-101 信息提示
2xx:200-206 成功
3xx:300-307 重定向
4xx:400-415 错误类信息,客户端错误
5xx:500-505 错误类信息,服务器端错误
3.2 http协议常用的状态码
200: 成功,请求数据通过响应报文的entity-body部分发送;OK
301: 请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved Permanently
302: 响应报文Location指明资源临时新位置 Moved Temporarily
304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not Modified
307: 浏览器内部重定向
401: 需要输入账号和密码认证方能访问资源;Unauthorized
403: 请求被禁止;Forbidden
404: 服务器无法找到客户端请求的资源;Not Found
500: 服务器内部错误;Internal Server Error,比如:cgi程序没有执行权限
502: 代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad Gateway
503: 服务不可用,临时服务器维护或过载,服务器无法处理请求,比如:php服务停止,无法处理php程序
504: 网关超时