简介
1.超文本传输协议,用于万维网服务器传输超文本到本地浏览器的传送协议
2.http是一个基于tcp/ip通信协议来传输数据的
3.http协议工作于c/s b/s架构,浏览器作为http客户端,通过url向http服务器即web服务器发送请求
web服务器根据接收的请求,向客户端发送响应信息
url
- url:http使用的(URI)同一资源标识符,来传输数据和建立连接的,
url是一种特殊的URI,名称:统一资源定位符,是互联网上用来标识某一处资源的地址
- http:// -使用http协议
www.baidu.com://域名->ip->主机名
/http/:虚拟目录部分
eagles.html:文件
http:80
https:443
工作流程:
server端:
1.接收连接请求,处理请求并建立连接
2.接收请求(获取url)
3.处理请求(认证等)
4.访问资源
5.构建响应报文
6.发送响应报文
7.记录日志
请求报文
- request消息格式:
请求行、请求头部、空行和请求数据四个部分
请求 URL: https://api.bilibili.com/x/player/pagelist?aid=1083781&jsonp=jsonp #请求行 url:协议/协议号请求方法: GET #请求方法Accept-Encoding: gzip, deflate, br #支持的编码方式Accept-Language: zh-Hans-CN, zh-Hans; q=0.5 #支持语言Connection: Keep-AliveCookie: CURRENT_FNVAL=16; bsource=seo_bing; _uuid=174577B9-CEF2-35C2-8CCD-90AAB32FEAD477185infoc; buvid3=C357B94B-867F-4AED-93C1-A0F214CB3727155824infocHost: api.bilibili.com #请求资源的主机Origin: https://www.bilibili.comReferer: https://www.bilibili.com/video/av1083781/ #指明当前资源的原始资源urlUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362 #请求数据
响应报文
- response消息格式:
状态行、响应报头、空行和响应数据四个部分
- 状态行:协议/协议版本 状态码 状态信息
- 响应头部:说用客户端使用的一些附加信息
- 空行
- 响应数据<br />
请求方法:
- get:请求指定页面的信息
- head:类似get,但是返回内容仅仅是头部信息
- post:向指定的资源提交数据据进行处理请求
- put:从客户端向服务端传送数据具取代指定的文档内容
- delete:请求服务器删除指定的页面
- connect:预留给能够将连接改为管道方式的代理服务器
- options:允许客户端查看服务端的性能
- trace:回显服务端收到的请求,主要用于测试或者诊断
ps:get 和post的区别:
1..参数位置:get提交的数据会放在url之后,以?分割url和传输数据,参数之间以&相连,eg:EditPosts.aspx? name=test1&id=123456.
post方法是把提交的数据放在http包的body中。
2.大小限制:get提交的数据大小有限制(因为浏览器对url的长度有限制),而post方法提交的数据没有限制。
3.后端代码对GET和POST请求的资源使用的方法是不一样的,get方式需要使用Request.QueryString来取得变量的值,而post方式需要通过Request.Form来获取变量的值
4.安全性:get方式提交数据,会带来安全问题,,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL 上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。
状态码
- 1xx:指示信息,表示请求已经接收,继续处理
- 2xx:成功,表示请求已经被成功接收、理解
- 3xx:重定向,要完成请求需要进行更进一步的操作
- 4xx:客户端错误,请求的语法有错误或请求无法实现
- 5xx:服务端错误,服务器未能实现合法的请求
- 单进程IO模型:一个进程只能按照顺序处理一个请求
- 多进程IO模型:
- 复用IO模型;
- 多线程模型:一个父进程管理多个线程,每个线程处理一个请求
- 事件驱动:一个父进程管理多个子线程,每个子进程处理多个请求
- 复用的多进程IO模型:一个父进程管理多个子进程,每个子进程管理多个线程,每个线程处理一个请求
-
http协议版本
HTTP/0.9:仅支持GET方法,仅能访问HTML格式的资源
HTTP/1.0:增加POST和HEAD方法,MIME支持多种数据格式,开始支持Cache
HTTP/1.1:支持持久连接(保持连接),一个TCP连接允许多个请求,新增PUT、PATCH、DELETE等方法
HTTP/2.0:性能大幅提升,新的二进制格式,多路复用,header压缩,服务端推送。
HTTP1.1/HTTP2.0的区别: 多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
- 新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的 场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
- header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通 讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
- 服务端推送(server push),同SPDY一样,HTTP2.0也具有server push功能
ps:HTTP协议是“无状态”:对一个事务没有记忆能力;浏览器发送一个请求给服务端,服务端处理完之后返回响应消息;同一个浏览器再发送一个请求给服务端, 服务端依然能够处理请求并返回响应消息,但是服务端不知道是同一个浏览器发送的
针对“无状态”的解决方案: Cookie Session (会话保持技术)
- 区别:
1. Cookie存储在浏览器中而Session是存储在服务器
2. seesion能够存储更多的数据,安全性更好
3. Cookie减轻服务端压力,信息不安全 Session技术其实是依赖于cookie技术 name=zhsang password=123456 -> 浏览器上
seesionID=xxxxx {name=zhsang,password=123456} -> 服务端上
浏览器上:seesionID=xxxxx
网络访问量
- IP访问量 # 访问数最少
- PV网页访问量 # 访问数最多
- UV访客访问量
