http:超文本传输协议。
超文本传输协议(HTTP)是一个用于传输超媒体文档(例如 HTML)的应用层协议。它是为 Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的。
HTTP 是无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态)。
http部分知识点
HTTP有哪些方法:
1.0
在HTPP1.0中只有GET方法、HEAD方法、POST方法。
1.1
在HTTP1.1中新增了请求方法:PUT PATCH DELETE OPTIONS TRACE CONNECT。
- Get:通常用于请求服务器发送某些数据。
- Post:发送数据到服务器。
- Head:请求资源的头部信息,并且这些头部与Http Gte方法返回的一致。
- Put:用于全量修改目标资源。
- Delect:用于删除指定的资源。
- Options:用于获取目的的资源所支持的通信选项(跨域请求前预检查请求判断是否安全)。
- Trace:该方法会让服务器原样返回任意客户端请求的信息内容。
- Connect:HTTP:1.1协议中预留给能够将连接改为管道的方式代理服务器,把服务器作为跳板,让服务器代替用户去访问其他网页之后再把数据原原本本返回给拥护。
- Patch:对资源进行部分修改。
10.传输方式:Get请求和Delect请求是在地址栏中传递,Put, Patch,Post的参数是在请求传递的。
Get请求和Post方法有什么区别。
Get
Get:默认的HTTP请求的内容,在网络中传输方式是以明文方式传递。
数据:暴露在URL中,可以通过浏览器历史记录,浏览器的缓存中很容易得到。刷新、后退等浏览器操作都是无害的。
数据类型: 只允许Ascll字符。
功能特性: 安全且幂等 ,安全指的是:指的是只读的特性,幂等的概念,是指同一个请求方法,多次执行,与单次执行效果一样。
Post
Post:
数据传输方式:通过请求体传输,所以有一定的安全性,。
数据类型:无限制
功能特性:可能会引起重复提交表单,不安全,可能会引起服务端的变化。
HTTP请求报文是什么样的。
- 请求行:包含了请求方法、URL、HTTP协议版本等 之间用空格进行分割。
- 请求头:由键值对组成的,每行一个:如 Host:www.1234.com。
- 空格:请求头和请求体中间用空格隔开。
- 请求体:请求体中放置Post、Put、Patch等请求方法中,所携带的数据
http状态码有哪些?
2xx 系列 成功响应
状态码 | 提示消息 | 表达的意思 |
---|---|---|
200 | ok | 表示从客户端发来的请求在服务端正确处理。 |
201 | created | 请求已经被实现,而且有一个新的资源已经依据请求建立。 |
202 | Accepted | 请求服务器已经接受但是没有处理 |
204 | No Content | 表示请求成功,但响应的报文,不包含实体的请求部分 |
206 | partial Content | 进行的是范围请求表示服务器已经成功处理了部分get请求,响应头会包含请求的内容范围。 |
3xx 系列 重定向
- 301 moved Permanently :永久性重定向,表示资源被分配到了新的URL。
- 302 Fount :临时性重定向,表示资源被分配到了新的URL
- 303 See other : 对于Post请求,它表达已经被处理,客户端可以接着使用Get方法去请求Location里面的URl
- 304 Not modified: 自从上次请求后没请求的网页未修改过,服务端返回此响应时,不会返回网页的内容
- 307 Temporary Redirect:对于Post请求,表示请求还没有被处理,客户端应该向Location里面的URL重新发起Post请求。
4xx系列 请求错误
- 400 Bad Request, 请求报文存在语法错误。
- 401 UnAuthorized 权限认证未通过(没有权限)。
- 403 Forbidden : 表示对请求资源的访问被服务器拒绝。
- 404 Not Found : 表示在服务器,没有找到请求的资源。
- 408 Request Timeout : 客户端请求时超市。
- 409 confict : 请求的资源可能引起冲突。
5xx 系列 服务端错误
- 500 Interal Server Error 表示服务端在执行请求时,发生了错误。
- 501 表示请求超出服务端的能力范围,例如服务器不支持当前请求所需要的某个功能,或者请求是服务器,不支持的某个方法。
http1.1、 http2、http3的区别。
http1.1
一次一份
一次一份:一次请求一次相应,发送一个HTTP请求然后接收到响应,才可以继续发送请求。
一个网页一般有多个文件组成(html,js,cssd等),我们打开一个网页要进行TCP的三次握手,然后建立请求,比如 访问 www.baidu.com 服务器会先返回index.html文件,其他文件不会发送。
客户端通过解析index.html文件找到需要的其他文件,继续请求css文件,js等文件,整个过程都是浏览器在完成,所以作为用户的感受只是鼠标单击一下,然后就可以加载出来整个页面。
其中如果一个文件没有收到。后面的文件也就没有办法继续接受,这就会造成http对头阻塞
keep-alive
keep-alive:保持tcp的连接不需要对每次连接进行三次握手,请求和响应都放在一个链接里面。
使客户端到服务端的连接持续有效(长连接),当出现对服务器的后续请求时keep-alive功能避免了建立或者重新建立连接。
http1.1加入了缓存处理(强缓存和协商缓存)
强缓存: 当第一次请求资源时,会将资源缓存到本地或者浏览器中,如果缓存的图片在有效期内,不发请求直接用缓存,使用了本地浏览器的缓存,可以减少服务器的压力,通过Expires的绝对时间与服务器的时间进行对比。
cache-control:相对时间,例如Cache-Control:max-max-age-3600
协商缓存:
- 通过服务器来确定缓存资源是否可用,通过request header判断是否命中请求,命中后返回304状态码,并返回新的request header通知客户端从缓存里取
- 普通刷新会启用弱缓存,忽略强缓存。只有在地址栏或收藏夹输入网址、通过链接引用资源等情况下,浏览器才会启用强缓存
- 如果时间过期,则向服务器发送header带有If-None-Match和If-Modified-Since的请求,回到1
管线化技术
管线化技术:单次发送多个请求,缺点:响应必须要按照发送的顺序进行接收请求,先发送就要先接收到什么。
由此产生的黑科技精灵图
- 把所有的小图标集中到一张图片上。
- 经过定位背景图片图片的:上、下、左、右的位置,然后展示出来。
- 从而减少请求次数。
http2
http2相比于http1.1,性能大幅度提升
- http2通过一个连接来多路复用
- http2拥有头部压缩
- http2拥有新的二进制格式,使用二进制框架层把所有消息封装成二进制,且仍然保持http语法
- .服务器推送 http2让服务器可以将响应主动“推送”到客户端缓存中
缺点: 只是解决了应用层面的对头堵塞,没有解决TCP传输层的问题,TCP还是按照最开始的数据段来进行传输,如果丢失还要继续重传 TCP对头阻塞
多路复用:
单个TCP连接就可以进行交错发送请求和响应,请求之间不影响。
- http 性能优化的关键并不在于高带宽,而是低延迟
- tcp 连接会随着时间进行自我「调谐」,起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移提高传输的速度,这种调谐则被称为 tcp 慢启动,由于这种原因,让原本就具有突发性和短时性的 http 连接变的十分低效
- http/2 通过让所有数据流共用同一个连接,可以更有效地使用 tcp 连接,让高带宽也能真正的服务于 http 的性能提升。而http1.1存在低性能的线头阻塞,一旦有一个请求超时,便会出现阻塞等待的情况
二进制分帧
http2并不是单个文件直接响应,请求和响应都被划分为各个不同的帧,将http的首部,被拆分为二进制的数据帧,数据帧里面包含流标标识符,不会因为没有按照顺序传递数据而造成的数据丢失,可以按照流标识符,进行顺序组合,帧类型里面可以设置优先级,标注流的权重。
首部压缩
- http2头部压缩又称为HAPCK,设计简单而灵活,是因为HPACK格式有意地简单且不灵活能降低由于实现错误而导致的互操作性或安全问题的风险
- http1.1没有头部压缩,随着请求增加,冗余头部字段会不必要地占用带宽,从而显着增加延迟,而头部压缩可消除冗余报头字段,限制已知安全攻击的漏洞,并且在受限环境中使用有限的内存要求。
服务端推送
服务端对客户端可能需要的文件一次性全部推送出去。