http协议理解

HTTP协议

HTTP是一个应用层协议, 由请求和响应构成, 是一个标准的客户端服务器模型. 基于HTTP协议的CS模式的信息交换过程, 它分四个过程: 建立连接、发送请求信息、发送响应信息、关闭连接. 如图

image

我们可以看到, 每处理一个请求都需要建立与断开TCP连接, 我们称这样的连接为非持久连接.

http1.0里就是使用这样的方式来处理连接 在并发量不大的情况下这并不会影响到我们的使用, 但是如果并发量大, 那么服务器将需要消耗一部分的资源来专门干这事.

所以为了解决这个问题, http1.1里引用了持久连接, 而且默认使用的就是持久连接, 与非持久连接不同的是持久连接允许个连接中可以传输多个对象.
当然在http1.1里还是可以通过设置来使用非持久连接的.

image

我们可以通过设置keep-alive参数来设置持久连接的相关参数, 如timeout

而在这个请求模式中还有一个问题就是只有当客户端发起请求时, 服务端才能向客户端发送/返回数据. 且当请求1被阻塞的时候, 必须等待服务器处理完成请求后才能发起后续请求, 这也是http的缺点之一.

目前服务器所使用的都是占比比较大的是http1.1版本, 它有如下缺点:

安全性问题:

  • 基于明文文本的通信内容可能被窃听
  • 不验证通信双方的身份可能遭伪装
  • 无法证明报文完整性可能遭篡改

性能问题:

  • 一条连接上只可发一个请求(非持久连接)
  • 队头阻塞
  • 请求只能由客户端发起,客户端不可接受响应之外的指令
  • 请求和响应的首部未经压缩就发送,首部信息越多延迟越大
  • 发送冗长的首部,多次来回之间首部大部分字段都未改变,浪费资源
  • 可选择任意压缩格式,不强制压缩后发送

针对这些问题, 新版本的http(HTTP2.0)引入了

http的请求

我们想要对一个网络上的资源发起访问, 首先要知道它所在的位置. 对此我们用一个URL来指定所需要访问的资源路径.

http://www.baidu.com:80/s?wd=http

这是一个普通的URL, http指定了所使用的协议, 除http外还有https、ftp等协议.

而www.baidu.com 这指定了我们所需要访问的服务器, 当然需要得到服务器的IP我们还需要通过DNS来解析.

80 代表了我们需要访问这台服务器的80端口, 当需要指定端口时前边要加":".而当我们没指定任何端口时会自动访问80端口, 而采用https协议的话则默认访问443端口

/s 代表了资源所在服务器的路径.

?wd=http 相当于请求附带的query.

我们只需要把请求报文发送到指定的URL, 服务器就应该会把我们所需要的资源响应回来.

http请求报文格式

image
可以看到请求报文由请求行、请求头部、空行和请求数据4部分组成.
其中请求行包括请求方法, 所请求的资源的地址与使用的http版本.

请求头部中的内容一般用来描述客户端能兼容的类型.

请求数据则是需要提供给服务端处理的数据

http响应报文格式

image

这是一个响应报文示例, 可以看到响应报文也分为4个组成部分, 分别为状态行, 响应头部, 空行, 响应的消息

其中状态行包含了http的版本与一个状态码,
状态码由一个三位数组成,状态码大体有5种含义:

  • 1xx 信息, 请求已被服务端收到, 请继续.
  • 2xx 成功. 请求已被服务端接收, 并处理完毕
  • 3xx 重定向. 需要进一步的操作才能完成此请求
  • 4xx 客户端错误. 请求含有词法错误, 或者无法被执行
  • 5xx 服务器错误. 服务端在处理请求的过程中出现错误

其中1xx 是在http1.1版本才加进去的, http1.0并没有.

而处理http已经规定好的状态码外, 我们还可以自行规定自己所需要的状态码. 只需使用双方都明确知道此状态码的含义即可.

请求方法

请求方法, 一般称为method, 每个method都表示对url所指定的资源执行一种不同的操作. 客户端通过指定method来告知服务端如何处理该资源.

  • GET: 服务端只检索既有资源返回给客户端, 不应有其他副作用.
  • POST: 客户端将新建资源所需的数据携带在请求中, 使服务端创建一个新资源.
  • PUT: 客户端提供完整的资源信息给服务端, 服务端据此更新既有资源或创建新资源.
  • DELETE: 服务端删除指定的资源.
  • PATCH: 客户端提供指定资源的部分信息, 服务端据此对既有资源做局部更新.
  • HEAD: 服务端构造与GET方法一模一样的响应头部返回给客户端, 便于客户端获取该资源的元信息, 而非整体传输。常用于检查资源是否已改动.
  • TRACE: 返回客户端请求经由哪些跃点到达了服务端, 中间代理或网关在转发该请求时应将自己的IP或DNS名称添加到头部的Via字段中. 常用于诊断.
  • OPTIONS: 服务端返回该URL支持的请求方法. 通常请求’*’, 而非具体资源.

而我们平时用的比较多的就是GET、POST、PUT、DELETE、HEAD.

posted on 2018-06-21 14:28  Dear、  阅读(161)  评论(0编辑  收藏  举报

导航