超文本传输协议HTTP,详解+实例!

2024-05-29 18:32

本文主要是介绍超文本传输协议HTTP,详解+实例!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 概念

    HTTP协议定义了浏览器(万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。从层次的角度看,HTTP是面向事务的(Transaction-oriented)应用层协议,它规定了在浏览器和服务器之间的请求和响应的格式和规则,它是万维网上能够可靠交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。

2. HTTP的操作过程

    从协议执行过程来说,浏览器要访问WWW服务器时,首先要完成对WWW服务器的域名解析。一旦获得了服务器的IP地址,浏览器将通过TCP向服务器发送连接建立请求。

    万维网的大致工作过程如下图所示:

                                                                            图 1 万维网的工作过程

    每个万维网站点都有一个服务器进程,它不断地监听TCP的端口80(默认),当监听到连接请求后便与浏览器建立连接。TCP连接建立后,浏览器就向服务器发送请求获取某一Web页面的HTTP请求。服务器收到HTTP请求后,将构建所请求的Web页必需的信息,并通过HTTP响应返回给浏览器。浏览器再将信息进行解释,然后将Web页显示给用户。最后,TCP连接释放。

    在浏览器和服务器之间的请求和响应的交互,必须按照规定的格式和遵循一定的规则,这些格式和规则就是HTTP。因此HTTP有两类报文:

  • 请求报文:从Web客户端向Web服务器发送服务请求;
  • 响应报文:从Web服务器对Web客户端请求的回答;

当用户点击鼠标后所发生的时间顺序如下(以访问清华大学为例):

  1. 浏览器分析链接指向页面的URL(http://www.tsinghua.edu.cn/publish/thu2018/index.html);
  2. 浏览器向DNS请求解析www.tsinghua.edu.cn的IP地址;
  3. 域名系统DNS解析出清华大学服务器的IP地址;
  4. 浏览器与该服务器建立TCP连接(默认端口号80);
  5. 浏览器发出HTTP请求:GET /publish/thu2018/index.html
  6. 服务器通过HTTP响应把文件 index.html 发送给浏览器;
  7. TCP连接释放;
  8. 浏览器将文件 index.html 进行解释,并将Web页显示给用户;

3. 协议特点

    (1)HTTP协议是无状态的

    同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同。因为服务器并不记得曾经访问过的这个客户,也不记得为该客户曾经服务过多少次。

    (2)HTTP采用TCP作为运输层协议,保证了数据的可靠传输

    HTTP不必考虑数据在传输过程中被丢弃后又怎样被重传。

    (3)HTTP协议是无连接的

    虽然HTTP使用了TCP连接,但通信的双方在交换HTTP报文之前不需要先建立HTTP连接。

    (4)HTTP既可以使用非持久连接,也可以使用持久连接(HTTP/1.1支持)

4. HTTP的报文结构

    HTTP是面向文本的(Text-Oriented),因此在报文中的每个字段都是一些ASCII码串,并且每个字段的长度都是不确定的。有两类HTTP报文:

  • 请求报文:从客户向服务器发送的请求报文,如图2所示;
  • 响应报文:从服务器到客户的回答,如图3所示;

                

HTTP请求报文中常用的几个方法:

  • GET:请求读取由URL所标志的信息;
  • HEAD:请求读取由URL所标志的信息的首部;
  • POST:给服务器添加信息(例如:注释);
  • CONNECT:用于代理服务器;

HTTP中的状态码:

  • 1xx:(100-101)指示信息--表示请求已接收,继续处理;
  • 2xx:(200-206)成功--表示请求已被成功接收、理解、接受;
  • 3xx:(300-305)重定向--要完成请求必须进行更进一步的操作;
  • 4xx:(400-415)客户端错误--请求有语法错误或请求无法实现;
  • 5xx:(500-505)服务器端错误--服务器未能实现合法的请求;

5. HTTP与HTTPS的区别

    HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)(安全套接字层)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

HTTPS和HTTP的区别主要如下:

  1. 安全性:http是超文本传输协议,信息是明文传输,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
  2. https需要申请证书:https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
  3. 端口不同:用的端口不一样,http使用的是80端口,https使用的是443。
  4. 所在层次不同:HTTP 协议运行在TCP 之上,HTTPS 是运行在SSL/TLS 之上的HTTP 协议,SSL/TLS(安全传输层协议) 运行在TCP 之上。

6. 抓包演示

    这里对以访问清华大学主页为例进行讲解,使用的是Wireshark软件,直接按 http and tcp.port == 80 and ip.addr == 166.111.4.100 条件进行查找,其中请求报文如下所示:

                                                                        图 4 HTTP请求报文示例

其中:

  • Host:表示用户指定资源所在的主机和端口号,格式一般和资源的完整URL中的主机名和端口号一样,上图省略了默认端口号80;
  • Connection:用于指定处理完本次请求/响应后,客户端与服务器是否还要继续保持连接。值为keep-alive时,客户端通知服务器返回本次请求结果后继续保持连接;当值为close时,客户端与服务器返回本次结果后关闭连接。HTTP1.1默认采用持久连接,在客户端发出请求消息中没有指定Connection头字段时,等效于Connection请求头的值为keep-alive的情况;
  • Upgrade-Insecure-Requests:表示客户端告诉服务器,浏览器可以处理https协议;
  • User-Agent:请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器,这个报头域不是必需的;
  • Accept:请求报头域用于指定客户端接受那些类型的信息。例如:Accept:image/gif,表明客户端希望接收GIF图像格式的资源,Accept:text/html,表明客户端希望接收html文本;
  • Accept-Encoding:类似于Accept,但是它用于指定可接受的内容编码,如果请求消息中没有设置这个域,服务器假定客户端对各种内容编码都可以接受;
  • Accept-Language:类似于Accept,但是它是用于指定一种自然语言,如果请求消息中没有设置,服务器假定客户端对各种语言都可以接受;

响应报文如下所示:

                                            

                                                                        图 5 HTTP响应报文示例

其中:

  • Server:响应报头域包含了服务器用来处理请求的软件信息。与User-Agent请求报头域相对应;
  • Data:用于表示HTTP消息产生的当前时间,服务器回送正常消息中,通常设置Date头字段;
  • Content-Type:实体报头域用于指明发送给接收者的实体正文的媒体类型;
  • Content-Length:实体报头域用于指明实体正文的长度,以字节方式存储的十进制数字来表示;
  • Connection:同请求报文;
  • Location:此字段用于通知客户端应该到哪个新的地址去获取文档,状态码为:300~399的响应消息都应该使用Location头字段将新的文档地址告诉客户机,以便客户机自动重新连接到新地址并检索文档,常用在更换域名的时候;

后续更新(http1.0  http1.1 http2.0 区别、http缓存)

7. Reference :

  • 王道考研计算机网络
  • https://www.cnblogs.com/wqh17/p/6401525.html
  • https://blog.csdn.net/u013219814/article/details/56290792

这篇关于超文本传输协议HTTP,详解+实例!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1014306

相关文章

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MyBatis ResultMap 的基本用法示例详解

《MyBatisResultMap的基本用法示例详解》在MyBatis中,resultMap用于定义数据库查询结果到Java对象属性的映射关系,本文给大家介绍MyBatisResultMap的基本... 目录MyBATis 中的 resultMap1. resultMap 的基本语法2. 简单的 resul

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据