HTTP协议详细解读

news2024/12/28 6:34:39

文章目录

  • 1. HTTP概念
  • 2. HTTP 特点
  • 3. HTTP 协议的工作过程
  • 4. 认识URL
  • 5. HTTP 请求数据格式
  • 6. HTTP 响应数据格式
  • 7. 总结
  • 📂橙子精品文章学习推荐

1. HTTP概念

HTTP:HyperText Transfer Protocol,超文本传输协议。HTTP 协议规定了浏览器和服务器之间数据传输的规则。为了使得数据从源头到达目的地,网络通信的参与方必须遵循相同的规则,这个规则称为协议,协议保证了双方能够读懂对方发送的数据。

此时,浏览器和服务器有什么关系呢?要明白这个问题,我们先来看看什么是 B/S 架构。

image-20230201155203084

B/S 架构,即浏览器 / 服务器架构模式,其特点是,客户端只需要浏览器,应用程序的逻辑和数据存储都在服务器端。使用时浏览器向服务器请求并获取资源,服务器把资源发送到浏览器。

资源数据在浏览器和服务器之间传递需要遵循一个规则,这个规则就是 HTTP 协议。浏览器按照 HTTP 协议发送请求和数据,Web 服务器端根据 HTTP 协议解析请求和数据,然后将处理结果按照 HTTP 协议发送给浏览器。

现在大多数网页都是通过 HTTPS 来通信,HTTPS 在 HTTP 基础上做了加密工作。学习 HTTP 协议主要学习请求数据和响应数据的格式。

2. HTTP 特点

HTTP 协议具有以下的几个特点:

  • 基于 TCP 协议
  • 基于请求响应模型:一次请求一次响应
  • HTTP协议是无状态协议:对于事务处理没有记忆能力

说明

TCP 协议是一种面向连接的,可靠的,基于字节流的传输层通信协议,在数据传输方面更加的安全。

HTTP 协议每次请求和响应都是独立的,客户端发送 HTTP 请求到服务器端后,服务器端根据请求响应数据,响应完成后不会记录任何信息,这样的方式具有速度快的优点,但是其导致的问题就是多次请求之间不能共享数据,而 Java 使用会话技术解决这个问题,后续都会讲解到。

3. HTTP 协议的工作过程

我们在浏览器中输入一个网址后,浏览器就会向服务器发送一个 HTTP 请求,对应的服务器接收到这个请求以后,经过解析处理,就会返回一个 HTTP 响应。我们在访问一个网站时,可能会涉及多次的 HTTP 请求和响应的交互过程。

其中有几个以后经常使用的专业术语需要了解:

  • 客户端:发起网络请求的一端
  • 服务器:接收网络请求的一端
  • 请求:客户端给服务器发送的数据
  • 响应:服务器给客户端发送的数据

image-20230201211947021

当我们访问一个网站时,可能有不止一次的 HTTP 请求和响应的交互,为了更加清楚的了解访问网站时的浏览器和服务器的交互情况,我们可以使用开发者工具来查看。

通过 [Fn] f12 打开浏览器的开发者工具,点击 Network 标签页,然后刷新即可看到其请求和响应的数据,这里显示的每一条数据都是一次 HTTP请求响应的交互,如下图:

image-20230201210540433

4. 认识URL

其实,在平时我们说的网址就是一个 URL,URL 又叫统一资源定位符,互联网上每一个文件都有唯一的 URL,它包含指出文件的位置以及浏览器该如何处理它。

URL有其标准的格式,如下:

协议类型:[//服务器地址[:端口号][/资源层级 UNIX 文件路径]文件名[?查询字符串][#片段标识符]]

其中,协议类型有 http 和 https,可以省略,省略后默认为 http。服务器地址可以是一个IP 地址或者域名,IP 地址用来描述一个网络上的地址,能够用来定位一个具体的主机,在 HTML 中可以省略服务器地址,表示服务器的 IP 或域名就是当前 HTML 文件所述的 IP 或者域名,例如 HTML中 a 标签的 src 属性。

端口号的主要作用是表示一台计算机中特定的进程所提供的服务,即用来区分一个主机上的不同程序,每个程序在访问网络时,都会关联一个或者多个端口号,通过端口号区分当前的请求给谁,端口号也可以省略,此时浏览器根据协议的类型自动决定使用哪个端口号。例如 http 协议默认使用 80 端口。资源层级 UNIX 文件路径表示访问该服务器程序上某个资源的路径,可以省略,省略后相当于 / 。通俗的说,端口号用于区分同一服务器地址的不同网站。

文件名表示访问该服务器上的哪个资源,如 html,不能省略。

查询字符串,由键值对组成,不同键值对中间使用 & 连接,表示客户端给服务器传递的参数,该参数是 Web 开发中一个重要的参数,给前后端交互提供更多可能性,可以通过这种方式将自定义的数据发送给服务器。查询字符串可以省略。

片段标识符主要用于页面的跳转,例如跳转到当前页面的某个部分,可以省略。

例如之前在使用 JDBC 连接数据库时使用的 URL:

jdbc:mysql://localhost:3306/blog?useSSL=false

如图:

image-20230201215951040

5. HTTP 请求数据格式

HTTP 请求数据总共分为 3 个部分,分别是:

  • 请求行
  • 请求头
  • 请求体

image-20230201182055836
image-20230201182555136

请求行:HTTP 请求中的第一行数据,请求行包含了 3 部分内容,分别是请求方式 / 请求的URL路径 / HTTP协议及版本。

请求方式一共有 7 种,其中最主要的是 GET 和 POST,另外还包括了:GET,POST,PUT,HEAD,DELETE 等。

请求头:从 HTTP 请求的第二行开始是请求头,其为 key:value 的格式。

请求头中包含了很多的属性,例如:

请求头属性作用
Host请求的主机名
User-Agent浏览器的版本
Accept浏览器能接受的资源类型,例如:text/*
Accept-Language浏览器偏好的语言,服务器根据此返回不同语言的网页
Accept-Encoding浏览器可以支持的压缩类型,例如:gzip

如图:

在这里插入图片描述

服务器根据请求头中的内容获取客户端的相关信息,有了这些信息服务端就可以处理不同的业务需求。

例如,服务器根据客户端请求头中的数据获取客户端的浏览器类型,根据不同的浏览器设置不同的代码用来达到相同的效果。这样就解决了相同的 HTML,CSS 文件可能由于浏览器兼容性的问题导致其显示的效果不同的问题。

请求体:POST 请求的最后一部分,存放请求参数。

image-20230201183539805

请求头和请求体之间使用一个空行隔开,主要用于 POST 请求,而对于常用的 GET 请求是没有请求体的,其请求参数放在请求行中。GET 请求的参数大小是有限制的,而 POST 请求没有。

6. HTTP 响应数据格式

响应数据也是分为 3 部分,分别是:

  • 响应行
  • 响应头
  • 响应体

image-20230201182819921

image-20230201183308499

响应行:响应数据的第一行,这里也有 3 块内容,分别是 HTTP 协议及版本,响应状态码,状态码描述。

响应状态码由服务端返回给客户端,表示其响应数据的状态,例如:

  • 200 :表示客户端请求成功
  • 404 :请求资源不存在,一般是浏览器中输入的URL的问题
  • 500 :服务端发生错误,一般是Java代码的问题

响应状态码从 1xx5xx,每个状态码对应了一个状态码描述,状态码由服务器端返回给客户端,用户根据服务端返回给浏览器的状态码做出相关的反应。

响应头:响应数据的第二行开始为响应头。响应头的数据格式和请求头中数据格式相同,为 key:value 。

同样地,响应头中也包含了若干属性,例如:

响应行属性作用
Content-Type表示响应内容的类型,例如:text/html
Content_Length表示响应内容的长度(字节数)
Content-Encoding表示响应压缩算法,例如:gzip
Cache-Control表示客户端应如何缓存,例如:max-age最多可以缓存300秒

如图:

在这里插入图片描述

响应体:HTTP 响应的最后一部分,存放响应数据。

响应头和响应体之间使用空行隔开。

7. 总结

本节对我们在上网时经常接触的HTTP超文本传输协议做了详细的描述,是学习JavaWeb课程的基础类容。

HTTP是超文本传输协议,是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。HTTP包含命令和传输信息,不仅可用于Web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。

📂橙子精品文章学习推荐

❓很多朋友问我:怎样系统的学习一门编程语言?怎样学好 Java?强烈推荐大家学习:Java编程基础教程系列专栏(零基础小白搬砖逆袭),博主正处于学习成长阶段,更明白初学者的状态和需求,文章结合自身经验和经历,风趣幽默。本专栏主要更新 Java 基础,MySQL 数据库,JavaWeb,SSM 框架,SpringBoot 框架等,零基础小白搬砖逆袭,请相信自己。如图,专栏文章持续更新,快来和小伙伴们一起学习!!

在这里插入图片描述

Java编程基础教程系列 👈快速订阅

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/192833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue中的 v-show 和 v-if 的区别

一、v-show与v-if的共同点 我们都知道在 vue 中 v-show 与 v-if 的作用效果是相同的(不含v-else)&#xff0c;都能控制元素在页面是否显示 在用法上也是相同的 <Model v-show"isShow" /> <Model v-if"isShow" /> 当表达式为true的时候&…

【微信小程序】webview使用、限制、扩展说明

0 说明 只是一些我自己常见的用法的整理和说明 更多用法还是请看官方文档&#xff1a;web-view 1 小程序web-view支持的页面 1、关联公众号的文章页【活动、文章、引导关注】 2、服务器配置了微信安全校验文件的网页【需要放置在域名根目录下】 2 小程序web-view不支持的页面…

Maxtang大唐英特尔12代J6412无风扇双网口迷你主机真实评测

今天为大家评测一款无风扇的双网口迷你主机&#xff0c;这款主机来自于maxtang大唐采用了英特尔12代赛扬J6412处理器&#xff0c;产品最出彩的地方就是它的网络配置&#xff0c;不仅拥有双千兆网口&#xff0c;还搭载了SIM卡插槽&#xff0c;并支持4G上网。评测产品配置如下&am…

蓝桥杯-玩具蛇

没有白走的路&#xff0c;每一步都算数&#x1f388;&#x1f388;&#x1f388; 题目描述&#xff1a; 已知一个4x4的方格&#xff0c;和一个16个单位长度组成的玩具蛇&#xff0c;即蛇头&#xff0c;蛇身&#xff0c;蛇尾的长度总共是16&#xff0c; 假设蛇的一节在方格中的…

Linux安装JDK8详细步骤

目录 1.虚拟机开启后&#xff0c;在/opt目录下新建文件夹 2.将JDK8压缩包传入/opt/install文件夹中 3. 解压JDK8到/opt/soft目录下 4.更改文件名 5.配置环境变量 6.检查JDK8是否安装成功 1.虚拟机开启后&#xff0c;在/opt目录下新建文件夹 2.将JDK8压缩包传入/opt/insta…

关于【继承】这些你都了解吗?

致前行的人&#xff1a; 要努力&#xff0c;但不要着急&#xff0c;繁花锦簇&#xff0c;硕果累累&#xff0c;都需要过程&#xff01; 目录 1.继承的概念和定义 1.1继承的概念 1.2继承的定义 2.基类和派生类对象赋值转换 3.继承中的作用域 4.派生类的默认成员函数 5.继承与友元…

企业微信开发(五)群活码

企业微信API&#xff0c;提供一个群活码的功能&#xff0c;好友可以通过扫码直接进群&#xff0c;非好友关系也可以。群活码的性质&#xff0c;在群满200人后自动创建新的群&#xff0c;把后面扫码的人添加进去&#xff0c;但是该活码只能放5个群&#xff0c;企业微信API&#…

【电子学会】2022年09月图形化三级 -- 加法出题器

加法出题器 编写程序出10道40以内的加法题&#xff0c;两个加数为20以内的正整数&#xff0c;程序最后提示回答正确的数量。 1. 准备工作 &#xff08;1&#xff09;默认小猫角色&#xff0c;默认白色背景。 2. 功能实现 &#xff08;1&#xff09;点击绿旗后&#xff0c;角…

安装openGauss

一、准备软硬件环境1.新建用户组、用户groupadd dbgroupuseradd -g dbgroup smispasswd smis新密码&#xff1a;smis1qazxc2.创建文件夹mkdir -p /opt/software/openGausschown 755 -R /opt/softwarechown -R smis /opt/software/openGauss3.下载安装包下载地址&#xff1a;htt…

Python爬虫之Scrapy框架系列(12)——实战ZH小说的爬取来深入学习CrawlSpider

目录&#xff1a;1. CrawlSpider的引入&#xff1a;&#xff08;1&#xff09;首先&#xff1a;观察之前创建spider爬虫文件时&#xff08;2&#xff09;然后&#xff1a;通过命令scrapy genspider获取帮助&#xff1a;&#xff08;3&#xff09;最后&#xff1a;使用模板crawl…

从电影《流浪地球2》,看东西方价值观,中华文化五千年有原因的

说起今年的春节档电影&#xff0c;很多人都会想起《满江红》&#xff0c;因为这部由张艺谋导演的电影&#xff0c;票房一直在屡创新高。其实观众关注《满江红》的同时&#xff0c;也不要忘了另一部电影&#xff0c;贺岁片《流浪地球2》同样不可小觑。 一直以来&#xff0c;科幻…

【小程序】报错:no such file or directory, access ‘wxfile://usr/miniprogramLog/log2‘

出现场景 在微信小程序开发中&#xff0c;使用真机调试的时候&#xff0c;出现这个错误 解决方式 将真机调试由2.0切换到1.0

37. 实战:Xpath+线程池实现抓取任意完整小说一千余节到本地txt文件/模板任意小说网站可套用(附源码)

目录 前言 目的 思路 代码实现 1. 从给定的URL中拿到所有章节的标题和子链接 2. 将标题和子链接形成一个字典&#xff0c;便于后续提取信息 3. 实现在单个章节详细页面提取所有文本信息 4. 保存到本地文件&#xff0c;在前面加上数字序号便于顺序保存 5. 在主函数中添…

STL使用方法(C++)

目录 1 前言 2 迭代器 2.1 访问第一个元素 2.2 访问最后一个元素的下一个元素 2.3 遍历方法 2.3.1 while 2.3.2 for&#xff08;最常用&#xff09; 2.4 适用性 3 基本数据结构 3.1 vector&#xff08;动态数组&#xff09; 3.1.1 insert&#xff08;插入…

最全面的SpringBoot教程(一)——SpringBoot概述

前言 本文为 【SpringBoot教程】SpringBoot概述 相关知识&#xff0c;下边将对SpringBoot简介&#xff08;包括&#xff1a;什么是SpringBoot&#xff0c;SpringBoot的特点&#xff0c;SpringBoot的功能&#xff0c;SpringBoot官网&#xff09;&#xff0c;SpringBoot快速入门&…

JAVA 同步锁

文章目录synchronizedsynchronized 作用当前对象synchronized 作用订单号条件synchronized 作用订单号字符串条件ReentrantLock 加 ConcurrentHashMap需求&#xff1a; 同一个订单才加同步锁&#xff0c;不同订单可并行synchronized synchronized是Java中的关键字&#xff0c;…

python--飞机大战(课程设计)

实现功能&#xff1a; 1&#xff1a;飞机的移动&#xff0c;发射子弹&#xff0c;手雷&#xff0c;生命值&#xff0c;生命条 2&#xff1a;敌飞机有3种形态&#xff08;小&#xff0c;中&#xff0c;大&#xff09;不同的飞机大小不一样&#xff0c;生命值不一样&#xff0c…

【halcon学习-读图像和遍历文件下图像】

halcon学习-读图像和遍历文件下图像1.读取单张图像2.读取多张选定图片3.读取文件目录下所有的图片1.读取单张图像 与很多图像处理读图算子一样&#xff0c;halcon里读取单张图片的操作很简单&#xff1a; read_image(test1, D:/myfile/作业/拉链检测/chain1.bmp)也可以使用Ct…

【数据结构与算法】LRU Cache

&#x1f320;作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《数据结构与算法要啸着学》 &#x1f387;座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;…

2023年房地产融资模式研究报告

第一章 概况 融资&#xff0c;英文为 Financing&#xff0c;指为支付超过现金或转账的购货款而采取的货币交易手段&#xff0c;或者为取得特定资产而筹集资金所采取的货币手段。融资通常指货币资金的特有者和需求者之间&#xff0c;直接或间接地进行资金融通的活动。 广义的融…