本文从以下几方面介绍HTTP协议

  1. HTTP协议的主要特点
  2. HTTP报文的组成部分
  3. HTTP方法
  4. HTTP状态码
  5. POST和GET的区别
  6. 什么是持久连接
  7. 什么是管线化

主要特点:

http协议的特点:

1.支持客户/服务器模式。

2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

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

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

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

HTTP报文的组成部分

HTTP有两种类型的报文:请求报文响应报文

请求报文的格式如下:

  • 请求报文的第一行是请求行。请求行共有3个字段:方法、URL和版本,以空格分隔。在该行最后,以回车和换行两个字符作为结束。
  • 方法:定义了请求类型。
  • URL:定义了相关Web页的地址,它和Host首部行一起组成完整的请求URL。
  • 版本:给出HTTP协议的版本。HTTP的最新版本是1.1
  • 在请求行之后,可以有0到多个首部行。每个首部行从客户端向服务器发送附加信息。
  • 首部名称字段定义了附加信息的类型;首部值字段定义了与首部名相关联的值。

一些常用的首部名:

  • 请求报文主体只在某些类型的报文中出现,为可变行数。该部分通常是一些需要发送的备注信息。

响应报文的格式如下:

  • 响应报文中的第一行称为状态行。状态行共有3个字段:版本、状态码和短语,以空格分隔。在该行最后,以回车和换行两个字符作为结束。
  • 版本:定义了HTTP协议的版本。
  • 状态码、状态短语:定义了请求的状态。
  • 在状态行之后,可以有0到多个首部行。每个首部行从服务器向客户端发送附加信息。
  • 响应报文主体包含从服务器向客户端发送的文档。如果响应不是错误报文,则主体将出现在响应报文中。

响应报文中的一些常用的首部名:

http方法

  • GET   请求服务器的文档
  • HEAD 请求关于文档的信息,但不是这个文档本身
  • POST 从客户端向服务器发送一些信息
  • PUT    从服务器向客户端发送文档
  • TRACE 把到达的请求回送
  • CONNECT 保留
  • DELETE 删除Web页
  • OPTIONs 询问关于可用的选项

HTTP状态码

状态码的几个类别

  • 1xx:指示信息 - 表示强求已接受,继续处理
  • 2xx:成功 - 表示请求已被成功接收
  • 3xx:重定向 - 要完成请求必须进行更进一步的操作
  • 4xx:客户端错误 - 请求有语法错误或请求无法实现
  • 5xx:服务端错误 - 服务端未能实现合法的请求

常见的状态码

  • 提供信息的

100 Continue 请求的开始部分已经收到,客户可以继续它的请求
101 Switching 服务器同意切换协议

  • 成功

200 OK 请求成功
201 Created 新的URL被创建
202 Accepted 请求被接受,但还没有马上起作用
204 No content 主体中没有内容

  • 重定向

301 Moved Permanently 服务器已不再使用所请求的URL
302 Moved temporarily 所请求的URL已暂时地删除了
304 Not modified 文档还没有被修改

  • 客户端差错

400 Bad request 在请求中有语法差错
401 Unauthorized 请求缺少适当的授权
403 Forbidden 服务被拒绝
404 Not found 文档未找到
405 Method not allowed 这个方法不被这个URL所支持
406 Not acceptable 所请求的格式不可接受

  • 服务器差错

500 Internal server error 在服务器端有差错,如崩溃
501 Not implemented 所请求的动作不能完成
503 Service unavailable 服务暂时不可用

POST和GET的区别

持久连接

持久连接只有http1.1才支持。

先简单介绍一下什么是持久连接:

HTTP协议采用“请求-应答”模式,当时用普通模式,即非持久连接的模式时,每个请求/应答客户端和服务器都要新建一个连接,完成之后立即断开连接(无连接的协议)

当使用Keep-Alive模式(持久连接)时,Keep-Alive功能使客户端到服务端的连接持久有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。

这里给大家推荐一篇博客,这篇博客详细讲解了持久连接,在本文中就不在详细介绍了。传送门

http管线化

在使用持久连接的情况下,某个连接上的消息的传递类似于

请求1  -> 响应1  -> 请求2  -> 响应2  -> 请求3  -> 响应3

管线化后,连接上的消息变成了这样

请求1 -> 请求2 -> 请求3 -> 响应1 -> 响应2 -> 响应3

通俗的讲,不用管线化的持久连接就是来一个请求就响应一个;

而管线化则是,把请求打包发过去,一起响应。

管线化特点:

HTTP协议类的更多相关文章

  1. Python 基于urllib.request封装http协议类

    基于urllib.request封装http协议类 by:授客QQ:1033553122 测试环境: Python版本:Python 3.3   代码实践 #!/usr/bin/env python ...

  2. 协议类接口 - UART

    一.何为协议类接口? 双方约定信号的协议和满足时序要求. 二.UART如何传数据 通用异步收发器简称 UART,即“Universal Asynchronous Receiver Transmitte ...

  3. OC中协议, 类目, 时间, 延展, 属性

    只有继承和协议需要引IMPORT "头文件"; 必须接受marryprotocol协议, id<marryprotocol>基于类型的限定, 才能给实例变量赋值 @pr ...

  4. C#封装的websocket协议类

    关于VB版之前已经写了,有需要可以进传送门<VB封装的WebSocket模块,拿来即用>,两个使用都差不多,这里简单概述一下: 连接完成后,没有握手就用Handshake()先完成握手之后 ...

  5. python 描述符 上下文管理协议 类装饰器 property metaclass

    1.描述符 #!/usr/bin/python env # coding=utf-8 # 数据描述符__get__ __set__ __delete__ ''' 描述符总结 描述符是可以实现大部分py ...

  6. HTTP 协议类

    HTTP 协议的主要特点 简单快速:每个资源的URL是固定的 灵活:在每个 http 协议中都有一个头部分有一个数据类型,通过一个 http 协议就可以完成不同数据类型的传输 无连接:连接一次就好断掉 ...

  7. 协议类接口 - NAND

    一.引脚的含义 先看下nand flash是怎么接的,如下所示便为某一款nand存储芯片的引脚图.发现其连地址信号都没有.那么是如何访问地址数据的呢? 查阅该nand flash的数据手册可得其各个引 ...

  8. 协议类接口 - LCD

    一.引脚含义 下图为某LCD相关引脚: 从引脚可以大概看出其SoC的连接情况: 1)VCLK为时钟,每一次像素就移动一次 2)HSYNC/VLINE 3)VSYNC/VFRAME 4)VD0 - VD ...

  9. 协议类接口 - SPI

     一.SPI概述 SPI(Serial Peripheral Interface,串行外设接口)总线系统是一种同步串行外设接口,它可以使CPU与各种外围设备以串行方式进行通信以交换信息.一般主控SoC ...

随机推荐

  1. java.security.InvalidKeyException: Illegal key size

    今天遇到一个奇怪的问题. 自己做的加签验签功能已经没有问题了,本地测试通过,同事放到服务器上测试也没问题. 然后我将包放到自己搭建的环境上,会报这样一个错误: java.security.Invali ...

  2. Shell一个文件并等待完成

    Option Explicit Private Declare Function OpenProcess Lib "kernel32" _ (ByVal dwDesiredAcce ...

  3. JSP前后台数据交互

    1.一般方法:在页面加载时载入数据 首先,新建一个包,在包内创建一个类,类实现接口Servlet-javax.servlet 然后,在web.xml文件里配置如下 <?xml version=& ...

  4. tp5引入第三方类库

    1.在/public/index.php中添加 define('EXTEND_PATH', '../extend/'); 2./extend/lib 中添加第三方类,类文件的名称和类名一样,命名空间为 ...

  5. Mybatis基本用法--中

    Mybatis基本用法--中 第四部分 动态 SQL 动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似.MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素 ...

  6. Java基础-流程控制(04)

    在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的.也就是说程序的流程对运行结果有直接的影响.所以,我们必须清楚每条语句的执行流程.而且,很多时候我们要通过控制语句的执行顺序来实现我 ...

  7. 改变 font Awesome、Ionic 图标属性

    可使用 -webkit-text-stroke属性. 例如: -webkit-text-stroke:1px red 使用color属性,可改变 图标颜色: 例如: color: red: 使用fon ...

  8. 变量值a交换b,b交换a....

    package day01; public class Test1 { public static void main(String[] args) { //不利用其它变量时期A和B的值交换 Inte ...

  9. Vue源码后记-钩子函数

    vue源码的马拉松跑完了,可以放松一下写点小东西,其实源码讲20节都讲不完,跳了好多地方. 本人技术有限,无法跟大神一样,模拟vue手把手搭建一个MVVM框架,然后再分析原理,只能以门外汉的姿态简单过 ...

  10. linux学习(九)set_uid、set_gid、stick_bit、软链接、硬链接

    一.set_uid set_uid其实是一种特殊权限,我们看一个文件: [root@iZ25lzba47vZ ~]# ls -l /usr/bin/passwd -rwsr-xr-x. root ro ...