HTTP协议类
本文从以下几方面介绍HTTP协议
- HTTP协议的主要特点
 - HTTP报文的组成部分
 - HTTP方法
 - HTTP状态码
 - POST和GET的区别
 - 什么是持久连接
 - 什么是管线化
 
主要特点:
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协议类的更多相关文章
- Python 基于urllib.request封装http协议类
		
基于urllib.request封装http协议类 by:授客QQ:1033553122 测试环境: Python版本:Python 3.3 代码实践 #!/usr/bin/env python ...
 - 协议类接口 - UART
		
一.何为协议类接口? 双方约定信号的协议和满足时序要求. 二.UART如何传数据 通用异步收发器简称 UART,即“Universal Asynchronous Receiver Transmitte ...
 - OC中协议, 类目, 时间, 延展, 属性
		
只有继承和协议需要引IMPORT "头文件"; 必须接受marryprotocol协议, id<marryprotocol>基于类型的限定, 才能给实例变量赋值 @pr ...
 - C#封装的websocket协议类
		
关于VB版之前已经写了,有需要可以进传送门<VB封装的WebSocket模块,拿来即用>,两个使用都差不多,这里简单概述一下: 连接完成后,没有握手就用Handshake()先完成握手之后 ...
 - python 描述符 上下文管理协议 类装饰器 property metaclass
		
1.描述符 #!/usr/bin/python env # coding=utf-8 # 数据描述符__get__ __set__ __delete__ ''' 描述符总结 描述符是可以实现大部分py ...
 - HTTP 协议类
		
HTTP 协议的主要特点 简单快速:每个资源的URL是固定的 灵活:在每个 http 协议中都有一个头部分有一个数据类型,通过一个 http 协议就可以完成不同数据类型的传输 无连接:连接一次就好断掉 ...
 - 协议类接口 - NAND
		
一.引脚的含义 先看下nand flash是怎么接的,如下所示便为某一款nand存储芯片的引脚图.发现其连地址信号都没有.那么是如何访问地址数据的呢? 查阅该nand flash的数据手册可得其各个引 ...
 - 协议类接口 - LCD
		
一.引脚含义 下图为某LCD相关引脚: 从引脚可以大概看出其SoC的连接情况: 1)VCLK为时钟,每一次像素就移动一次 2)HSYNC/VLINE 3)VSYNC/VFRAME 4)VD0 - VD ...
 - 协议类接口 - SPI
		
一.SPI概述 SPI(Serial Peripheral Interface,串行外设接口)总线系统是一种同步串行外设接口,它可以使CPU与各种外围设备以串行方式进行通信以交换信息.一般主控SoC ...
 
随机推荐
- Echarts数据可视化series-scatter散点图,开发全解+完美注释
			
全栈工程师开发手册 (作者:栾鹏) Echarts数据可视化开发代码注释全解 Echarts数据可视化开发参数配置全解 6大公共组件详解(点击进入): title详解. tooltip详解.toolb ...
 - ActiveMQ——activemq的详细说明,queue、topic的区别(精选)
			
JMS中定义了两种消息模型:点对点(point to point, queue)和发布/订阅(publish/subscribe,topic).主要区别就是是否能重复消费. 点对点:Queue,不可重 ...
 - Chloe.ORM框架应用实践
			
Chloe.ORM 是国人开发的一款数据库访问组件,很是简单易用.目前支持四种主流数据库:SqlServer.MySQL.Oracle,以及Sqlite,作者为这四种数据库划分出了各自对应的组件程序集 ...
 - ASP.NET MVC  学习笔记 1
			
1. 什么是ASP.Net MVC ASP.Net MVC是一种开发Web应用程序的工具(is a web application development framework),采用Model-Vie ...
 - WPF 快捷键读写txt
			
因为git提交需要写这次做的,所以我想弄个东西来帮我写 WPF可以使用快捷键,快捷键主要使用InputBindings,WPF读写文件很简单 我每次都要写 第一句标题 之后就是我写的修改 然后加上我名 ...
 - PHP中提问频率最高的11个面试题和答案
			
问题:请用最简单的语言告诉我PHP是什么? 回答:PHP全称:Hypertext Preprocessor,是一种用来开发动态网站的服务器脚本语言. 问题:什么是MVC? 回答:MVC由Model(模 ...
 - Python 第十三节 文件操作
			
A 1.首先文件读写操作有以下几种模式: a\a+ w\w+ r\r+ a模式:追加_写入模式,写入指针默认在开头,如果文件存在将在开头追加写入,如果文件不存在将创建文件再写入. a+模式: ...
 - 【转】认识物理I/O构件- 主机I/O总线
			
在数据离开系统内存总线后,它通常传输到另一条总线,即主机I/O总线.在今天的产品中,最常见的主机I/O总线是PCI总线,但也存在着几种其他的总线,如S -总线,EIS A总线及VME总线.主机I/O总 ...
 - 如何用java创建一个jdbc程序
			
第一个jdbc程序 JDBC简介 Java数据库连接(Java Database Connectivity,JDBC),是一种用于执行SQL语句的Java API,它由一组用Java编程语言编写的类和 ...
 - Pendant
			
Pendant Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...