超文本传输协议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

相关文章

Mysql数据库聚簇索引与非聚簇索引举例详解

《Mysql数据库聚簇索引与非聚簇索引举例详解》在MySQL中聚簇索引和非聚簇索引是两种常见的索引结构,它们的主要区别在于数据的存储方式和索引的组织方式,:本文主要介绍Mysql数据库聚簇索引与非... 目录前言一、核心概念与本质区别二、聚簇索引(Clustered Index)1. 实现原理(以 Inno

使用python生成固定格式序号的方法详解

《使用python生成固定格式序号的方法详解》这篇文章主要为大家详细介绍了如何使用python生成固定格式序号,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录生成结果验证完整生成代码扩展说明1. 保存到文本文件2. 转换为jsON格式3. 处理特殊序号格式(如带圈数字)4

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D