你的浏览器不支持canvas

Enjoy life!

HTTP

Date: Author: JM

本文章采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。

以下内容部分都摘自博客:http://kb.cnblogs.com/page/130970/#statecode
以下内容部分都摘自书本:《HTTP权威指南》

一、HTTP

1.1 HTTP是什么

HTTP,Hyper Text Transfer Protocol,简称 超文本传输协议,是用于万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传输协议。

HTTP属于应用层(Application Layer),是一个基于TCP/IP通信协议来传递数据(包括HTML文件、图片、查询结果等等),并且它工作在 客户端-服务端 的架构上。

1.2 HTTP的特点

1)、简单快速

  • 客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

2)、灵活

  • HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

3)、无连接

  • 无连接的含义是 限制每次连接只处理一个请求 。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

4)、无状态

  • HTTP协议是 无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

5)、支持B/S及C/S模式

二、HTTP之URI

2.1 什么是URI

URI,Uniform Resource Identifier,统一资源标识符。服务器资源名被称为统一资源标识符。

HTTP使用统一资源标识符来传输数据和建立连接。

2.2 URI的分类

URI 有两种:URN 以及 URL。

2.2.1 URN

  • URN,Uniform Resource Name,统一资源命名,是通过名字来标识资源,比如 mailto:java-net@java.sun.com

2.2.2 URL

  • URL,Uniform Resource Locator,统一资源定位符,是一种特殊类型的URI,包含了用于查找某个资源的足够的信息,也是互联网上用来标识某一处资源的地址。

URL的组成部分:<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

  • URL 的组成部分请看下图

relationship-map

  • 对应的 location.xxx

relationship-map

  • URL 的例子请看下图

relationship-map

三、HTTP报文

3.1 什么是HTTP报文

HTTP报文是在HTTP应用程序之间发送的模块。这些数据块以一些文本形式的元信息(meta-infomation)开头,这些信息描述了报文的内容以及含义,后面跟着可选的数据部分。

3.2 HTTP报文流

3.2.1. 报文流入源端服务器

  • HTTP 使用术语流入(inbound)和流出(outbound)来描述事务处理(transaction)的方向。报文流入源端服务器,工作完成之后,会流回用户的 Agent 代理中。以下是图例:

relationship-map

3.2.2. 报文向下游流动

  • HTTP 报文会像河水一样流动。不管是请求报文还是响应报文,所有报文都会向下游(downstream)流动。所有报文的发送者都在接收者的上游(upstream)。

relationship-map

3.3 HTTP报文的组成成分

HTTP报文由三个部分组成:对报文进行描述的起始行(start line)、包含属性的首部(header)块,以及可选的、包含数据的主体(body)部分。

3.4 HTTP报文分类

HTTP报文有两种:请求报文(Request Message)和响应报文(Response Message)。接下来就开始谈一下这两种报文。

3.4.1 请求报文(Request Message

  • 以下是请求报文的图例

relationship-map

请求报文的起始行说明了要做些什么。接下来就聊一聊请求报文的起始行。

3.4.1.1 方法(method

  • 方法用来告知服务器要做些什么。以下是常用的HTTP方法:

relationship-map

3.4.1.2 URL

  • URL是命名所请求的资源

3.4.1.3 版本(version

  • 报文所使用的HTTP版本。其格式为 HTTP/major.minor。【major是主要版本号,minor是次要版本号,两个都是整数】

3.4.2 响应报文(Response Message

  • 以下是响应报文的图例

relationship-map

3.4.2.1 版本(version

可参考请求报文的 3.4.1.3 版本(version)。

3.4.2.2 状态码(status code

  • 状态码用来告诉客户端,究竟发生了什么事情。以下是状态码的分类图:

relationship-map

以下是常用状态码:

  1. 200 OK:表明该请求被成功地完成,所请求的资源发送回客户端。
  2. 302 Found:重定向,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的Request。
    例如在IE中输入http://www.google.com. HTTP服务器会返回304, IE取到Response中Location header的新URL, 又重新发送了一个Request。
  3. 304 Not Modified:代表上次的文档已经被缓存了, 还可以继续使用。
  4. 400 Bad Request:客户端请求与语法错误,不能被服务器所理解。
  5. 403 Forbidden:服务器收到请求,但是拒绝提供服务。
  6. 404 Not Found:请求资源不存在(输错了URL)。
  7. 500 Internal Server Error:服务器发生了不可预期的错误。
  8. 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

3.4.2.3 原因短语(reason phrase

  • 原因短语为状态码提供文本形式的解释。原因短语和状态码是成对出现的。原因短语是状态码的可读版本,应用程序开发者将其传送给用户,用以说明在请求期间发生了什么情况。

例子:200 OK


对于本文内容有问题或建议的小伙伴,欢迎在文章底部留言交流讨论。