HTTP学习笔记

一、HTTP协议

HTTP协议有3个特征:持久连接、管道化以及无状态。

  1. 持久连接:在HTTP的早期版本中,一次HTTP通信完成后就会断开连接,下一次再重新建立连接。在请求资源不多的情况下时,并不会有什么影响。但随着HTTP的普及,请求的资源会越来越大,例如一个HTML文件中可能会包含多个CSS文件、JS文件等。如果还是这样操作,势必会造成巨大的通信开销。因此,在HTTP1.1版本中提出了持久连接,只要通信两端的任一一端没有明确提出断开,就保持连接状态,以便下一次通信复用该连接,避免了重复建立和断开连接所造成的开销,加速了页面呈现。
  2. 管道化:管道化是建立在持久连接上的进一步性能优化。过去,请求必须按照先进先出的队列顺序,也就是说发送请求后,要等待并接收到响应,才能继续下一个请求。启用管道化后,就会将队列顺序迁移到服务器,这样就能同时发送多个请求,服务器再按顺序一个接一个地响应。
  3. 状态管理:HTTP是一种无状态协议,请求和响应一一对应,不会再出现两个请求复用一个响应的情况。

在某些业务场景下,需要请求有状态,例如后台登陆。成功登录后就得保存登录状态,否则每次跳转进入其他页面都会要求重新登录。为了能管理状态,引入了cookie技术,cookie技术能让请求和响应的报文都附加cookie信息,客户端将cookie值发送出去,服务端接收并处理这个值,最终就能得到客户端的状态信息。

二、HTTP报文

HTTP报文就是HTTP协议通信的内容,是一种简单的格式化数据块,由语义的纯文本组成。

  1. 报文语法:请求报文和响应报文。请求报文由5部分组成:请求方法、请求URL、HTTP协议版本、可选的请求首部和内容。
    <Method><Request URL><Version>
    <Headers>
    <Body>

    响应报文也由5部分组成:HTTP协议版本、状态码、原因短语、可选的响应首部和内容。

    <Version><Status Code><Reason Phrase>
    <Headers>
    <Body>

     

     2.请求方法:HTTP通过请求方法说明请求目的,期望服务器执行某个操作。在可用的请求方法中,GET和POST是最常见的,而PUT和DELETE需要额外的安全机制保航才可以使用,提升了使用门槛。

HTTP常见的请求方法
方法功能
GET获取数据
POST提交数据
PUT上传文件
DELETE删除文件
HEAD获取了内容以外的资源信息

     3.状态码

常见的几类状态码
状态码类别原因短语
1XX信息请求已被接收,正在处理中
2XX成功请求处理成功
3XX重定向客户端需要附加操作才能完成请求
4XX客户端错误客户端发起的请求服务器无法处理
5XX服务端错误服务器在处理请求时发生错误或异常

三、HTTP首部

HTTP首部提供的信息能让客户端和服务器执行指定的操作,例如客户端发出的请求中带有可接受的内容类型,服务器就知道该返回什么样的内容。首部有5种类型:通用首部、请求首部、响应首部、实体首部和扩展首部

1、通用首部:通用首部既可以存在于请求中,也可以存在于响应中。

通用首部
首部描述
Connection管理持久连接
Date报文的创建日期,HTTP协议使用了特殊的日期格式
Transfer-Encoding传输报文主体时的编码方式,例如分块传输编码

2、请求首部:请求首部只存在于请求报文中,提供客户端的信息以及对服务器的要求。

请求首部
首部描述
Accept可接受的MIME类型
Accept-Charset可接受的字符集
Accept-Encoding可接受的编码格式,服务器按指定的编码格式压缩数据
Accept-Language可接受的语言种类
Host服务器域名和端口
Referer上一个页面地址
User-Agent用户代理信息,例如操作系统、浏览器名称和版本等

3、响应首部:响应首部只存在于响应报文中,提供服务器的信息以及对客户端的要求。

响应首部
首部描述
Accept-Ranges服务器接受的范围类型
Server服务器软件的名称和版本
Age响应存在时间,单位为秒,这个首部可能由代理发出

4、实体首部:请求和响应都可能包含实体首部,实体首部提供了大量的实体信息。

实体首部
首部描述
Content-Encoding内容编码格式,告知客户端用这个编码格式解压
Content-Language内容语言
Content-Length内容尺寸,单位是字节
Content-Type内容是MIME类型

常见笔试题:GET和POST的区别是什么?

  1. 语义不同,GET是获取数据,POST是提交数据。
  2. HTTP协议规定GET比POST安全,因为GET只做读取,不会改变服务器中的数据,但这只是规范,并不能保证该方法实现也是安全的。
  3. GET请求会把附加参数带在URL上,而POST请求会把提交数据放在报文内。在浏览器中,URL长度会被限制,所以GET请求能传递的数据有限,但是HTTP协议其实并没有对其做限制,都是浏览器在控制。
  4. HTTP协议规定GET是幂等的,而POST不是,所谓幂等是指多次请求返回相同的结果。实际情况中没有这莫严格,当GET请求动态数据时,每次的结果会可能不同。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值