1.HTTP是什么
全称超文本传输协议
- 超文本:txt属于普通文本,超文本可以有图片、视频、音频。所以是超级文本
- 传输协议:xx协议,指的是一套规则,传输协议就是两个主机之间传输规则
连起来就是:HTTP是一个用于超文本传输的规则
2.HTTP状态码有哪些
- 1xx:提示信息
- 2xx:成功信息
- 200:OK 若非HEAD请求的响应,正常此类响应应该有body
- 204:和OK相同,但是没有body数据
- 206: 分块下载或断点续传,不是服务器成功处理成功的状态。没见过
3xx:重定向信息
- 301:Move Permanently 永久重定向,请求资源不存在需要改用新的URL再次访问
302:Found 临时重定向需要暂时用另一个URL访问
301和302的响应头里有Location字段
304:Not Modified 标识资源未修改,重定向到浏览器缓冲文件
- 4xx:客户端错误
- 400:BadRequest 请求报文错误,笼统的错误
- 403:Fobbidden表示服务器禁止访问资源
- 404:NotFound 请求资源不在服务器上
5xx:服务端错误,请求报文没问题,但是服务处理时出现了问题
- 响应报文
- 响应行
- 响应头
- 响应体
图解HTTP
小结
4.HTTP头部解析
首部字段被分为4中类型:
- 通用首部字段:请求和响应报文都会使用到
- 请求和响应独有首部字段
- 实体首部字段:针对实体部分的报文首部
通用首部字段集合
Connection
主要管理持久连接。
HTTP1.1版本前是:Close,需要手动开启
HTTP1.1版本之后:默认Keep-AliveCache-Control
主要控制是否可以取缓存数据,这里值有好多,这里就不列举了。请求首部字段集合
Accept
通知服务器客户端,也就是发送请求的这个人可以接收什么类型的数据Accept-Encoding
通知服务器客户端支持哪种形式的报文主体压缩。Host
直观的,我前后端分离后,我这个页面访问可能是ytest1接口,另一个页面可能是ytest2接口。Host这里就是记录ytest1或ytest2.
说白了,实际请求的地址User-Agent
传达浏览器的种类响应首部字段集合
Location
当发生重定向时,重定向Location指定的URIServer
告知客户端当前服务器上安装的HTTP服务器应用程序。
我们这边页面部署到nginx上,则此字段是nginxVary
Vary字段是由源服务器返回的字段,用来告诉代理服务器,如果有请求的Accept-Language字段也是:en-us的。可以从缓存中获取响应返回。
WWW-Authenticate
用于HTTP访问认证,告知客户端访问此URI的认证方案。Basic或Digest。状态码401情况下必带此字段。
实体首部字段集合
Allow
Content-MD5
Expires
专为Cookie设置的头部
Set-Cookie
Cookie
5.Http支持的方法
6.HTTP1.1性能如何
- 长链接:不需要每次都三次握手、四次分手
- 管道网络传输:客户端不必等到前一个请求响应后,才能发第二个请求
- 使用Cookie状态管理
服务端的队头阻塞:请求堆到服务端,服务端若被先到的请求阻塞,则后面请求都要等着
http1.1有哪些缺点?
通信使用明文(不加密),内容可能会被窃听(报文传输过程中,可能被获取)
- 不验证通信方的身份,因此有可能遭遇伪装(你不知道你访问的服务器是不是真实的)
- 无法证明报文的完整性,所以有可能已遭篡改 (他人在报文中加内容,浏览器是无感知的)
URI和URL
URI是统一资源标识符,只要能标识一个唯一资源的 一串符号 都是URI。
URL是统一资源定位符,是URI的子集。URL着重告诉你如何找到这个资源。
通过URL一定可以标识唯一资源,但是能标识唯一资源的标识不只有URL,其他的集合统称为URI