面试问题
- HTTP协议主要特点
- HTTP报文组成部分
- post和get的区别
- HTTP状态码
- 什么是持久连接?
- 什么是管线化?
特点
- 无连接:连接一次就会断掉不会保持连接
- HTTP 的设计者有意利用这种特点将协议设计为请求时建连接、请求完释放连接,以尽快将资源释放出来服务其他客户端。
- 随着时间的推移,网页变得越来越复杂,里面可能嵌入了很多图片,这时候每次访问图片都需要建立一次 TCP 连接就显得很低效。后来,Keep-Alive 被提出用来解决这效率低的问题
- Keep-Alive 功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive 功能避免了建立或者重新建立连接
- 无状态:不能区分前后两次连接者的身份的
- 协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态
- 我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息
- 客户端与服务器进行动态交互的 Web 应用程序出现之后,HTTP 无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持 HTTP 连接状态的技术就应运而生了,一个是 Cookie,而另一个则是 Session
- 灵活:一个HTTP协议就可以完成不同数据类型的传输
- 简单快速:统一资源符
HTTP报文组成部分
请求报文:输出一个URL地址,相当于发出了一个请求报文
响应报文:服务端决定要不要给客户端返回内容,相当于响应报文
- 请求行(开始行):方法 + 请求url + HTTP版本
- 请求报文请求服务器对资源进行一些操作。请求报文的起始行,或称为请求行,包含了一个方法和一个请求URL,这个方法描述了服务器应该执行的操作,请求URL描述了要对哪个资源执行这个方法。请求行中还包含HTTP 的版本,用来告知服务器,客户端使用的是哪种HTTP。所有这些字段都由空格符分隔
- 例如:POST /infoNewsAction_uploadxheditorfile.action?immediate=1 HTTP/1.1
- 响应行(开始行):HTTP状态码 + 数据状态码 + 原因短语
- 响应报文承载了状态信息和操作产生的所有结果数据,将其返回给客户端。响应报文的起始行,或称为响应行,包含了响应报文使用的HTTP 版本、数字状态码,以及描述操作状态的文本形式的原因短语。 所有这些字段都由空格符进行分隔。
- 例如:HTTP/1.1 200 OK
- 首部行(请求头、响应头):用来说明浏览器、服务器或报文主体的一些信息。key\value值 告诉服务端我要什么内容要注意什么 类型
- 空行:表示下面就是主体了
- 请求体:提交的一些表单信息等等
- 响应体:返回的内容
HTTP方法
- GET - 获取资源
- POST - 传输资源
- PUT - 更新资源
- DELETE - 删除资源
- HEAD - 获取报文首部
post和get的区别
1.get回退无害。post会被重新请求 2.get的请求会被浏览器主动缓存,post默认不会,可以手动设置 3.get的请求参数会完整得保留在浏览器的历史记录中,post不会 4.get的请求相对post不安全,参数明文显示,不适合传送隐私数据 5.get参数通过url传递,post通过request Body 6.get请求参数有字节限制,2kb,post没有
精炼一些
- GET是通过URL提交数据,因此GET可提交的数据量就跟URL所能达到的最大长度有直接关系
- 实际上HTTP协议对URL长度是没有限制的;限制URL长度大多数是浏览器或者服务器的配置参数
- 同样的,HTTP协议没有对POST进行任何限制,一般是受服务器配置限制或者内存大小
- GET幂等,POST不幂等。(幂等是指同一个请求方法执行多次和仅执行一次的效果完全相同)
- Get产生一个TCP数据包;Post产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
对于POST,浏览器先发送header,服务器响应100(continue),然后再发送data,服务器响应200(返回数据);- 表单的method是POST,页面分享给朋友,朋友看到的不是我的看到的页面,除非提交一样的数据;表单的method是GET,url分享给朋友,朋友看到的是和我一样的页面
- GET用于从服务器端获取数据,包括静态资源(HTML|JS|CSS|Image等等)、动态数据展示(列表数据、详情数据等等);POST用于向服务器提交数据,比如增删改数据,提交一个表单新建一个用户、或修改一个用户等。
HTTP状态码
- 200 最常见,客户端请求成功
- 206 从服务器整个文件中截取一部分响应给客户端。常见于用video标签播放一个视频或音频地址
- 301 永久重定向
- 302 临时重定向
- 304 服务器告诉浏览器你那有缓存,不用在我这取
- 403 这个地址只能通过服务器去访问
- 404 www.baidu.com/ 随便一个字符串,会显示资源不存在
持久连接
- HTTP支持持久连接
- 1.1版本支持,1.0版本不支持
管线化
- 通道是持久建立的
- HTTP1.1支持
- 请求打包一次传过去,响应打包一次返回过来
- get和head支持,post有所限制
- 第一次连接不要启动,因为不知道服务器是否支持