HTTP协议(1)

HTTP 协议笔记

1. HTTP 传输机制

HTTP 是一个应用层协议,位于 TCP 的层次之上,并且是基于 TCP 协议进行通信的,也就是说 HTTP 在每一次通信之前都要先建立 TCP 连接来保证 HTTP 的可靠性。并且 HTTP 是用的 C/S 模型进行通信,即 Client/Server 的模型,Client 向 Server 发送 Request,Server 根据 Request 的内容对 Client 进行 Response。同时 HTTP 还是无状态协议,即 HTTP 协议本身并不会对已经建立起来的请求和响应对的状态进行持久化处理,这么做的目的是保持 HTTP 协议的简单性,从而提高工作效率。但是在许多时候我们需要记录用户的登录状态以便对用户的请求进行跟踪,提高 Server 的服务质量,如记录用户购物车中的商品,那么这时就需要引入一项技术来实现:Cookie。

对于上面那段话,总结如下:

  1. HTTP 基于 TCP 进行通信
  2. HTTP 是 C/S 通信模式
  3. HTTP 是无状态协议,HTTP 连接的建立状态不会持久
  4. 使用 Cookie 技术对用户进行标识从而追踪用户的请求提供更好的服务

2. HTTP 报文格式

HTTP 报文实际上分为 2 种,一种用于 Client 向 Server 请求服务,一种用于 Server 向 Client 响应请求。实际上这两种报文的格式都是一样的。

2.1 HTTP Request 报文

Request

如上图所示,Request 报文的结构一共有 4 个部分组成:

  1. 第 1 部分是 Request-Line,一共包含 3 个字段(用空格分开):MethodURLHttp-Version。其中,Method 一共有 GET,POST,PUT,TRACE,OPTIONS,DELETE 这 6 种,最常见的是 GET 和 POST;URL 可以简单理解为浏览器地址栏中的网址;Http-Version 现在已经是 HTTP/1.1 版本了。

  2. 第 2 部分是 Request-Header,请求头部为请求报文添加了一些附加信息,是以 Key:Value 的形式保存在一个列表中,常见的请求头部如下表所示:

    Request-Header

  3. 第 3 部分是 Blank-Line,这是一个空行,代表请求头部结束。用来分隔请求头和请求数据。

  4. 第 4 部分是 Request-Body,是请求数据的正文,是可选的,对于 GET 方法来说就没有请求正文。

2.2 HTTP Response 报文

Response

如上图所示,Response 报文的结构也是由 4 部分组成:

  1. 第 1 部分是 Response-Line,一共包含 3 个字段(用空格分开):VersionStatus-CodePhrase。其中,Version 是协议版本,现在一般都是 HTTP/1.1;Status-Code 是状态返回码,共有 5 个系列,如一般情况下表所示;Phrase 是描述状态码的短语。

    Status-Code

    上表只是笼统的列出了 4 个大类情况,更详细的状态码说明请参考 RFC 文档,在网上看到有一篇博客写得很好,可以参考:https://www.cnblogs.com/lxinxuan/archive/2009/10/22/1588053.html

  2. 第 2 部分是 Response-Header,和 Request-Header 类似,为响应报文添加的一些附加信息,也是以 Key:Value 的形式保存在一个列表中,常见的响应头部如下表所示:

    Response-Header

  3. 第 3 部分也是 Blank-Line,用于分隔头部和正文。

  4. 第 4 部分是 Response-Body,是响应数据的正文,客户端请求的内容都放在这里。

3. URI URL URN 的区别

  1. URI(Uniform Resource Identifier),统一资源标识,用来唯一标识一个资源,是一个通用的概念。由 URL 和 URN 组成。
  2. URL(Uniform Resource Locator),统一资源定位,即资源所在位置,我们浏览器上的地址就是一条 URL。
  3. URN(Uniform Resource Name),统一资源命名,通过资源的名字来标识资源,与其所处的位置无关,这样即使资源的位置变了,其 URN 也不会改变。
posted @ 2017-12-20 15:19  蚂蚁有毒  阅读(211)  评论(0编辑  收藏  举报