面试问题

  1. HTTP协议主要特点
  2. HTTP报文组成部分
  3. post和get的区别
  4. HTTP状态码
  5. 什么是持久连接?
  6. 什么是管线化?

特点

  1. 无连接:连接一次就会断掉不会保持连接
    1. HTTP 的设计者有意利用这种特点将协议设计为请求时建连接、请求完释放连接,以尽快将资源释放出来服务其他客户端。
    2. 随着时间的推移,网页变得越来越复杂,里面可能嵌入了很多图片,这时候每次访问图片都需要建立一次 TCP 连接就显得很低效。后来,Keep-Alive 被提出用来解决这效率低的问题
    3. Keep-Alive 功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive 功能避免了建立或者重新建立连接
  2. 无状态:不能区分前后两次连接者的身份的
    1. 协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态
    2. 我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息
    3. 客户端与服务器进行动态交互的 Web 应用程序出现之后,HTTP 无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持 HTTP 连接状态的技术就应运而生了,一个是 Cookie,而另一个则是 Session
  3. 灵活:一个HTTP协议就可以完成不同数据类型的传输
  4. 简单快速:统一资源符

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方法

  1. GET - 获取资源
  2. POST - 传输资源
  3. PUT - 更新资源
  4. DELETE - 删除资源
  5. HEAD - 获取报文首部

post和get的区别

面试:HTTP协议类

1.get回退无害。post会被重新请求
2.get的请求会被浏览器主动缓存,post默认不会,可以手动设置
3.get的请求参数会完整得保留在浏览器的历史记录中,post不会
4.get的请求相对post不安全,参数明文显示,不适合传送隐私数据
5.get参数通过url传递,post通过request Body
6.get请求参数有字节限制,2kb,post没有

精炼一些

  1. GET是通过URL提交数据,因此GET可提交的数据量就跟URL所能达到的最大长度有直接关系
  2. 实际上HTTP协议对URL长度是没有限制的;限制URL长度大多数是浏览器或者服务器的配置参数
  3. 同样的,HTTP协议没有对POST进行任何限制,一般是受服务器配置限制或者内存大小
  4. GET幂等,POST不幂等。(幂等是指同一个请求方法执行多次和仅执行一次的效果完全相同)
  5. Get产生一个TCP数据包;Post产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
    对于POST,浏览器先发送header,服务器响应100(continue),然后再发送data,服务器响应200(返回数据);
  6. 表单的method是POST,页面分享给朋友,朋友看到的不是我的看到的页面,除非提交一样的数据;表单的method是GET,url分享给朋友,朋友看到的是和我一样的页面
  7. GET用于从服务器端获取数据,包括静态资源(HTML|JS|CSS|Image等等)、动态数据展示(列表数据、详情数据等等);POST用于向服务器提交数据,比如增删改数据,提交一个表单新建一个用户、或修改一个用户等。

HTTP状态码

面试:HTTP协议类

面试:HTTP协议类

面试:HTTP协议类

  • 200 最常见,客户端请求成功
  • 206 从服务器整个文件中截取一部分响应给客户端。常见于用video标签播放一个视频或音频地址
  • 301 永久重定向
  • 302 临时重定向
  • 304 服务器告诉浏览器你那有缓存,不用在我这取
  • 403 这个地址只能通过服务器去访问
  • 404 www.baidu.com/ 随便一个字符串,会显示资源不存在

持久连接

面试:HTTP协议类

  • HTTP支持持久连接
  • 1.1版本支持,1.0版本不支持 

 管线化

面试:HTTP协议类

 面试:HTTP协议类

  • 通道是持久建立的
  • HTTP1.1支持
  • 请求打包一次传过去,响应打包一次返回过来
  • get和head支持,post有所限制
  • 第一次连接不要启动,因为不知道服务器是否支持

 

 

相关文章: