1 http协议介绍

1.1 简单介绍 

HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本。其中最著名的就是RFC 2616。RFC 2616定义了今天普遍使用的一个版本——HTTP 1。

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

1.2 主要特点

HTTP协议的主要特点可概括如下:
1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

HTTP协议对其用户来讲其实是透明的,不同于如SMTP等协议的是,HTTP的报文并非是直接交付给用户去看的,最常见的场合是HTTP协议将超文本交付给浏览器或者其他超文本解析的软件来进行处理,超文本可以使用任意的标签语言如HTML,XSL,XML,XHTML。

1.3 动静态超文本实现方式 

(1)静态超文本

客户端直接通过URL请求到服务端相对应的资源,服务端直接将部署在数据库或者文件系统中的标签语言文件返还给客户端,其中可以包括其他的URL来使得客户端再次和网络中的其他主机发送HTTP请求来递归地完成超文本的解析,如HTML中的img标签。

(2)动态超文本

动态超文本需要通过软件技术来实现创建和处理动态文本,例如CGI,JavaServlet等技术,将URL中‘?’之后的动态部分做解析并生成动态文档,并且可以嵌入脚本语言交付给浏览器中的解析引擎来提高动态文档的效率,使文档中不必要的重复的部分独立解析完成,甚至可以实现活动文档,直接在文档上运行字节码形式的java程序或者javascript脚本。

1.4请求响应结构图 

一个HTTP的完整请求报文的具体格式如下:

A.请求行--方法:

GET:请求服务器的文档

HEAD:请求关于文档的信息,但不是这个文档本身

POST:从客户向服务器发送一些信息

PUT:从服务器向客户发送文档

TRACE:把到达的请求回送

CONNECT:保留

DELETE:删除Web网页

OPTIONs:询问关于可用的选项

B.请求行--URL:

URL:统一资源定位符,是在因特网上知名任何种类的信息的标准,URL定义的是四样东西:

协议 :// 主机 : 端口 / 路径

具体详细不属于HTTP内容范畴,暂且不赘述。

C.请求行--版本:

目前HTTP的最新版本是1,旧版本还有1.0等,具体相关定义在对应RFC中可以查找。

D.请求报文的首部行:(个别书上也把这个叫做头域)

首部行是客户向服务器发送信息时的附加信息,数量为零到多个,如上图所示的格式,每个首部行占有一个首部名,一个冒号,一个空格和一个首部值。在RFC中完整的首部值列表及分类如下所示:(其中上颜色的为较常用首部名称)

2.响应报文

A.状态行--版本:同请求行--版本

B.状态行--状态码:

大致分类如下所示:

100-199 用于指定客户端应相应的某些动作。 
200-299 用于表示请求成功。 
300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。 
400-499 用于指出客户端的错误。 
500-599 用于支持服务器错误。

具体的状态码参见:http://www.cnblogs.com/lxinxuan/archive/2009/10/22/1588053.html

C.状态行--短语:所谓的短语是和状态码相对应的,如常见的404状态码对应Not found,403对应Forbidden

D.响应报文的首部行:参见请求报文的首部行

响应报文的实体与请求报文不同,主要存放的是服务端向客户端发送的文档,如果响应不是错误报文,则实体出现在响应报文中。

2 在TCP/IP协议栈中的位置

HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图所示:
  

默认HTTP的端口号为80,HTTPS的端口号为443。

3 HTTP的请求响应模型

HTTP协议永远都是客户端发起请求,服务器回送响应。见下图:
   

这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。

HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。

4 工作流程

一次HTTP操作称为一个事务,其工作过程可分为四步:

1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。

2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

后续接着学习...

最新文章

  1. Target runtime com.genuitec.runtime.generic.jee60 is not defined
  2. (转)SVN 服务端、客户端安装及配置、导入导出项目
  3. 注意页面上的时间戳可能会成为bd快照的时间_快照不更新的原因
  4. TOMCAT 关闭报错:Tomcat did not stop in time. PID file was not removed
  5. Java学习----你的选择是什么-条件结构
  6. ubuntu 下 github 使用方法 以及异常修改
  7. hdu 1387 Team Queue (链表)
  8. [笔记]我的Linux入门之路 - 05.Eclipse的Python开发环境搭建与Numpy、Scipy库安装
  9. redis与python交互
  10. About Why Inline Member Function Should Defined in The Header File
  11. js 浏览器兼容css中webkit、Moz、O、ms...写法封装(es6语法)
  12. Serializable中的serialVersionUID
  13. Bartender标签传参与打印
  14. Tomcat 9.0 配置问题 403 Access Denied
  15. 去除外显子低质量reads时弹出错误“Invalid quality score value (char '#' ord 35 quality value -29) on line 4”和“Invalid quality score value (char '.' ord 46 quality value -18) on line 12”的解决方法
  16. Spring Boot log4j实现把日志存入mongodb
  17. Java数据结构和算法(五):队列
  18. spring冲刺第二天
  19. Linux下Nginx+多Tocat下的负载均衡环境的简单搭建
  20. OkHttp 官方Wiki之【使用案例】

热门文章

  1. 委托(Delegate)简介
  2. spring boot零碎知识点待补充
  3. DataTabe使用Linq实现 Group
  4. JS面向对象的程序设计之理解对象
  5. Docker摘要
  6. volatile的使用场景
  7. JS基础题
  8. DWT在栅格数据嵌入不可见水印的应用
  9. Windows代替touch命令
  10. tab选项卡在鼠标经过时实现切换延迟