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

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor