概述
HTTP 是基于 TCP/IP 协议的应用层协议,它不涉及数据包(packet)的传输,主要是规定客户端和服务器之间的通信格式,默认使用 80 端口。
 
HTTP 协议最早版本是 HTTP/0.9,经历了 HTTP/1.0 和 HTTP/1/1 的发展,到目前为止已经是 HTTP/2.0 。其中 HTTP/1.0 最为普遍也是目前使用最久的一个版本。
 
HTTP 协议主要有以下几个特点:
  1. 支持 B/S 和 C/S 模式。
  2. 简单快速。客户端向服务器请求时,只需要传送请求方法和路径。
  3. 灵活。HTTP 允许传输任意类型的数据对象。
  4. 无连接。每次连接只处理一个请求。HTTP/0.9 和 HTTP/1.0 采用非持久连接,HTTP/1.1 采用持久连接。
  5. 无状态。HTTP 协议是无状态协议,对事务处理没有记忆能力。一方面,若后续处理需要上一次的信息,那么这些数据需要重传,这导致连接传输的数据量大增。另一方面,服务器不需要前面的信息时它的应答就会很快。
无状态协议
HTTP 协议是无状态的。所谓无状态,是指服务器不会保存客户端请求的数据,这样同一个客户端这次请求和上一个请求是没有对应关系的,对服务器来说,每一个请求都是全新的,它并不知道两个请求来自同一个客户端。
为了解决这个问题,浏览器引入了 Cookie 机制,每次请求客户端都将 Cookie 中的数据全部发给服务端,而服务端将数据写入 Cookie 响应给客户端。
 
 
HTTP/1.1 持久连接
在 HTTP/0.9 和 HTTP/1.0 使用非持久连接。在非持续连接下,每个 TCP 只连接一个 Web 对象,连接在一次 请求-回应 后都会关闭,而持续连接可以让一个连接被多个请求重复利用。这种连接持久化显著减少了请求延迟,因为客户不用在首次请求后再次进行 TCP 交互确认创建连接。HTTP/1.1 引入了持续连接机制,不必为每个 web 对象创建一个新的连接,一个连接可以传送多个对象。
HTTP/1.1 还进行了宽带优化,如引入了分块传输编码来允许流化传输持续连接上发送的内容,取代原先的 buffer 模式。HTTP 管道允许客户在上一个回应被收到前发送多重请求从而进一步减少延迟的时间。
 
 
HTTP/1.1 管道机制
HTTP/1.1 引入了管道机制,管道机制前提是在持久连接下完成。在同一个 TCP 连接中,客户端可以同时发生多个请求,而不像以前那样在同一个 TCP 连接中发出请求后需要等待服务器做出回应,然后才能发生下一个请求。不过按 HTTP/1.1 协议,服务器端必须按客户端请求的顺序恢复请求。
 
 
工作流程
一次 HTTP 请求-响应 称为一个事务
1)客户端与服务器建立连接。因为 HTTP 协议是基于 TCP 协议的,所以每次建立连接时都要经过三次握手。
2)建立连接后,客户端发送一个请求给服务端。
3)服务端接收请求后,给予相应的响应消息。
4)客户端接收服务器响应的消息,然后客户端与服务器断开连接。
 
 
参考文章:
Hypertext Transfer Protocol — HTTP/1.1:https://tools.ietf.org/html/rfc2616

HTTP 协议 -- 基础的更多相关文章

  1. TCP/IP协议基础(转)

    转自 http://www.chinaunix.net 作者:Bernardus160  发表于:2003-12-03 17:33:15 TCP/IP协议基础 -------------------- ...

  2. 小白日记27:kali渗透测试之Web渗透-Http协议基础,WEB

    Http协议基础 Web技术发展[http://www.cnblogs.com/ProgrammerGE/articles/1824657.html] 静态WEB[网页] 动态WEB 属于一种应用程序 ...

  3. HTTP协议基础与实验

    一. HTTP协议(Hypetext Transfer Protoacal,超文本传输协议) HTTP协议规定了Web基本的运作过程,以及Web服务器之间的通信细节. Http协议采用客户端/服务器端 ...

  4. udp协议基础(转自疯狂java讲义)

    第17章  网络编程 17.4  基于UDP协议的网络编程 UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发 ...

  5. UART串口协议基础1

    Louis kaly.liu@163.com 串口协议基础 1 串口概述 串口由收发器组成.发送器是通过TxD引脚发送串行数据,接收器是通过RxD引脚接收串行数据. 发送器和接收器都利用了一个移位寄存 ...

  6. 接口测试培训:HTTP协议基础

    接口测试培训:HTTP协议基础   引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展. ...

  7. 【RL-TCPnet网络教程】第41章 HTTP超文本传输协议基础知识

    第41章      HTTP超文本传输协议基础知识 本章节为大家讲解HTTP(HyperText Transfer Protocol,超文本传输协议),从本章节开始,正式进入嵌入式Web的设计和学习. ...

  8. 【RL-TCPnet网络教程】第35章 FTP文件传输协议基础知识

    第35章      FTP文件传输协议基础知识 本章节为大家讲解FTP(File Transfer Protocol,文件传输协议)的基础知识,方便后面章节的实战操作. (本章的知识点主要整理自网络) ...

  9. 【RL-TCPnet网络教程】第33章 SMTP简单邮件传输协议基础知识

    第33章      SMTP简单邮件传输协议基础知识 本章节为大家讲解SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)的基础知识,方便后面章节的实战操作. (本 ...

  10. 【RL-TCPnet网络教程】第25章 DHCP动态主机配置协议基础知识

    第25章      DHCP动态主机配置协议基础知识 本章节为大家讲解DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),通过前面章节对TCP和UDP ...

随机推荐

  1. 新的开发域名 fastadmin.tk

    新的开发域名 fastadmin.tk 这个的所有子域名批向 127.0.0.1,可以用于开发. 以后不用再修改系统的 hosts. 使用案例 手把手教你安装 FastAdmin 到虚拟主机 (php ...

  2. Qt中int转换成QString

    (1) QString QString::number ( long n, int base = 10 ) [static] examle: long a = 48; QString s = QStr ...

  3. C的随想

    c用的是操作系统函数,这个一下子就限制了APi的数量,通过组合这些系统api即可实现功能. c开发的人一般都会熟记系统函数,然后需要确定函数参数的时候,通过man指令进行查看 对于32位64位将会导致 ...

  4. 洛谷【P1140】相似基因

    浅谈\(DP\):https://www.cnblogs.com/AKMer/p/10437525.html 题目传送门:https://www.luogu.org/problemnew/show/P ...

  5. IP Fragmentation(IP分片)

    https://www.cisco.com/c/en/us/tech/ip/index.html IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组,这一过程称为分片(Fr ...

  6. 机器学习:scikit-learn 文档、深入学习机器学习的思路

    一.scikit-learn 的文档查阅 网页访问 scikit-learn 的文档: scikit-learn.org —— Document —— User Guide: scikit-learn ...

  7. Java程序开发中的简单内存分析

    首先说明内存总体分为了4个部分, 包括 1.stack segment (栈区存储基本数据类型的局部变量,对象的引用名) 2.heap segment(堆区,一般用于存储java中new 出来的对象) ...

  8. 2010.1.1 CLR 无法从 COM 上下文

    今天做一个程序,sql操作,但是记录数太多,而且sql语句有复杂,就报了这样的错误: CLR 无法从 COM 上下文 0x645e18 转换为 COM 上下文 0x645f88,这种状态已持续 60 ...

  9. 1.《Spring学习笔记-MVC》系列文章,讲解返回json数据的文章共有3篇,分别为:

    转自:https://www.cnblogs.com/ssslinppp/p/4528892.html [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://w ...

  10. Android Studio 搭配 Tortoise SVN 安装问题汇总

    (1)Android studio 中想要使用SVN,但是在安装 1.9版本的SVN,会报SVN is too old(实际是太新了)的错误.所以只能下载1.8以下版本 (2)安装svn时,需要手动选 ...