1.请求头
- 请求头部:
- 请求头部是只在请求报文中有意义的头部。用于说明是谁或什么在发送请求、请求源自何处,或者客户端的喜好及能力。
- 请求头部有哪些?
```
Client-IP:提供了运行客户端的机器的IP地址
From:提供了客户端用户的E-mail地址
Host:给出了接收请求的服务器的主机名和端口号
Referer:提供了包含当前请求URI的文档的URL
UA-Color:提供了与客户端显示器的显示颜色有关的信息
UA-CPU:给出了客户端CPU的类型或制造商
UA-OS:给出了运行在客户端机器上的操作系统名称及版本
UA-Pixels:提供了客户端显示器的像素信息
User-Agent:将发起请求的应用程序名称告知服务器
Accept:告诉服务器能够发送哪些媒体类型
Accept-Charset:告诉服务器能够发送哪些字符集
Accept-Encoding:告诉服务器能够发送哪些编码方式
Accept-Language:告诉服务器能够发送哪些语言
TE:告诉服务器可以使用那些扩展传输编码
Expect:允许客户端列出某请求所要求的服务器行为
Range:如果服务器支持范围请求,就请求资源的指定范围
If-Match:如果实体标记与文档当前的实体标记相匹配,就获取这份文档
If-Modified-Sinec:除非在某个指定的日期之后资源被修改过,否则就限制这个请求
If-None-Match:如果提供的实体标记与当前文档的实体标记不相符,就获取文档
If-Range:允许对文档的某个范围进行条件请求
If-Unmodified-Since:除非在某个指定日期之后资源没有被修改过,否则就限制这个请求
Authorization:包含了客户端提供给服务器,以便对其自身进行认证的数据
Cookie:客户端用它向服务器传送数据
Cookie2:用来说明请求端支持的cookie版本
Max-Forward:在通往源端服务器的路径上,将请求转发给其他代理或网关的最大次数
Proxy-Authorization:这个首部在与代理进行认证时使用的
Proxy-Connection:这个首部是在与代理建立连接时使用的
```
- 常见的是那些
- `User-Agent`:产生请求的浏览器类型。
- `Accept`:客户端可识别的响应内容类型列表;
- `Accept-Language`:客户端可接受的自然语言;
- `Accept-Encoding`:客户端可接受的编码压缩格式;
- `Host`:请求的主机名,允许多个域名同处一个IP 地址,即虚拟主机;
- `Connection`:连接方式(close 或 `keep-alive`);
- `Cookie`:存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie;
2.响应头
- 响应头部:
- 响应头部为客户端提供了一些额外信息,比如谁在发送响应、响应者的功能,甚至与响应相关的一些特殊指令
- 响应头部有哪些?
```
Age:(从最初创建开始)响应持续时间
Public:服务器为其资源支持的请求方法列表
Retry-After:如果资源不可用的话,在此日期或时间重试
Server:服务器应用程序软件的名称和版本
Title:对HTML文档来说,就是HTML文档的源端给出的标题
Warning:比原因短语更详细一些的警告报文
Accept-Ranges:对此资源来说,服务器可接受的范围类型
Vary:服务器会根据这些首部的内容挑选出最适合的资源版本发送给客户端
Proxy-Authenticate:来自代理的对客户端的质询列表
Set-Cookie:在客户端设置数据,以便服务器对客户端进行标识
Set-Cookie2:与Set-Cookie类似
WWW-Authenticate:来自服务器的对客户端的质询列表
```
- 常见的响应头部参数
- `Allow` 服务器支持哪些请求方法(如GET、POST等)。
- `Content-Encoding` 文档的编码(Encode)方法。
- `Content-Length` 表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。
- `Content-Type` 表示后面的文档属于什么MIME类型。
- `Server` 服务器名字。
- `Set-Cookie` 设置和页面关联的Cookie。
- `ETag`:被请求变量的实体值。ETag是一个可以与Web资源关联的记号(MD5值)。
- `Cache-Control`:这个字段用于指定所有缓存机制在整个请求/响应链中必须服从的指令。
3.什么是Http协议
- HTTP协议是一种应用层协议
- HTTP是HyperText Transfer Protocol(超文本传输协议)的英文缩写。HTTP可以通过传输层的TCP协议在客户端和服务器之间传输数据。HTTP协议主要用于Web浏览器和 Web服务器之间的数据交换。我们在使用IE或Firefox浏览网页或下载Web资源时,通过在地址栏中输入,开头的4个字母http就相当于通知浏览 器使用HTTP协议来和host所确定的服务器进行通讯。
4.Http连接的特点
- 最显著的特点是,客户端每次发送的请求,都需要服务器响应,请求结束后,会主动释放连接。从建立连接到关闭连接的过程,成为”一次连接”。
5.Http和Socket的区别
- HTTP和Socket的区别
- HTTP是应用层协议;基于TCP协议;使用“请求—响应”方式建立连接,在请求时需要先建立连接且客户端要先发出请求,可见服务器需要等到客户端发送一次请求后才能将数据传回给客户端
- Socket(套接字)是对TCP/IP协议的封装,是接口而不是协议;创建Socket连接时可以指定传输层协议TCP或UDP;Socket建立连接过程三步骤:服务器监听->客户端请求->连接确认,可见服务器可以直接将数据传送给客户端(HTTP2.0也增加了服务端推送的功能)
6.各协议位于哪层
网络层:IP、ICMP、ARP、RARP、BOOTP
传输层:TCP、UDP
应用层:FTP、HTTP、DNS、TELNET、SMTP
7.http版本区别
### 01.Http1.0版本
- HTTP协议是一种应用层协议
- HTTP是HyperText Transfer Protocol(超文本传输协议)的英文缩写。HTTP可以通过传输层的TCP协议在客户端和服务器之间传输数据。HTTP协议主要用于Web浏览器和 Web服务器之间的数据交换。我们在使用IE或Firefox浏览网页或下载Web资源时,通过在地址栏中输入,开头的4个字母http就相当于通知浏览 器使用HTTP协议来和host所确定的服务器进行通讯。
### 02.Http1.1版本
- HTTP1.0和HTTP1.1的区别:
- HTTP1.0默认使用短连接,HTTP1.1开始默认使用长连接
- HTTP1.1增加更多的请求头和响应头来改进和扩充HTTP1.0的功能,比如身份认证、状态管理和Cache缓存等
- 现在更多是使用Http1.1
### 03.Http2.0版本
支持配置使用Http 2.0协议
- Http2.0相对于Http1.x来说提升是巨大的,主要有以下几点:
- 二进制格式:http1.x是文本协议,而http2.0是二进制以帧为基本单位,是一个二进制协议,一帧中除了包含数据外同时还包含该帧的标识:StreamIdentifier,即标识了该帧属于哪个request,使得网络传输变得十分灵活。多路复用:一个很大的改进,原先http1.x一个连接一个请求的情况有比较大的局限性,也引发了很多问题,如建立多个连接的消耗以及效率问题。
- http1.x为了解决效率问题,可能会尽量多的发起并发的请求去加载资源,然而浏览器对于同一域名下的并发请求有限制,而优化的手段一般是将请求的资源放到不同的域名下来突破这种限制。而http2.0支持的多路复用可以很好的解决这个问题,多个请求共用一个TCP连接,多个请求可以同时在这个TCP连接上并发,一个是解决了建立多个TCP连接的消耗问题,一个也解决了效率的问题。
- 那么是什么原理支撑多个请求可以在一个TCP连接上并发呢?基本原理就是上面的二进制分帧,因为每一帧都有一个身份标识,所以多个请求的不同帧可以并发的无序发送出去,在服务端会根据每一帧的身份标识,将其整理到对应的request中。header头部压缩:主要是通过压缩header来减少请求的大小,减少流量消耗,提高效率。因为之前存在一个问题是,每次请求都要带上header,而这个header中的数据通常是一层不变的。
支持服务端推送