[17]JAVAEE-HTTP协议

JavaEE网络通信原理与TCP/HTTP协议详解 网络通信是分布式系统的基石,其核心在于协议栈的分层设计与数据传输机制。TCP/IP协议栈通过应用层、传输层、网络层和网络接口层的协同工作,实现了端到端的可靠通信。其中TCP协议通过三次握手建立连接、滑动窗口控制流量、超时重传保证可靠性,而HTTP协议作为应用层标准,支撑着现代Web服务体系。在JavaEE开发中,从底层的Socket编程到Servlet容器网络模型,再到Spring等框架的HTTP处理,都需要深入理解这些网络原理。掌握TCP粘包处理、HTTP/2多路复用等关键技术,能够有效解决高并发场景下的 阅读详情

目录

一、什么是HTTP协议

什么时候会用到HTTP协议?

HTTP协议的工作流程

二、HTTP的报文格式

抓包

HTTP请求报文格式 

1.首行

2.header

常见键值对:

3.空行

4.正文(body)(有的时候可以没有)

HTTP响应报文格式

1.首行

常见状态码:

GET和POST的区别

三、构造HTTP请求的方法

1.直接通过浏览器地址栏输入url,可以构造出一个GET请求

2.html中一些特殊标签,也会触发get请求,例如

3.form表单可以触发GET和POST请求

4.ajax构造HTTP请求

回调函数:

跨域问题:

5.POSTMAN构造HTTP请求


一、什么是HTTP协议

HTTP是一个属于应用层的,应用非常广泛的协议

应用层的协议,常常是需要进行“自定义协议”的,但这里的自定义,也并非是要求从零开始设计的,一般来说,是基于一些大佬们已经设计好的协议,稍作调整,而HTTP之所以应用广泛,就在于HTTP的可定制性,即程序员可以以HTTP为蓝本,自定义需要的格式


什么时候会用到HTTP协议?

  • 打开网页
  • 手机app加载数据
  • 微信小程序
  • 打开游戏加载游戏界面
  • ......

HTTP协议的工作流程

HTTP的工作形式,是“一问一答”这种形式的

即:一个请求->一个响应

如图所示,在浏览器中输入网址,此时浏览器就会向服务器发起一个HTTP请求,服务器收到请求后,就会返回一个应答,这个应答中携带的就是网址的HTML。


二、HTTP的报文格式

抓包

要想认识HTTP的报文格式,我们需要用到抓包工具

抓包工具在市面上多种多样,这里介绍一种最广泛的:fiddler(具体安装流程可以自己去搜,这里不做赘述)

在具体信息中,上面是请求,下面是响应

现在我们来抓一个html的搜狗主页的请求包

打开主页www.sogou.com

在fiddler里找到这个包(看host和长度),在右侧的上面点击Raw,然后点击view in notepad查看报文

 

如图所示,这就是一个HTML请求


HTTP请求报文格式 

在一个HTTP请求中,包含了四个部分

  • 1.首行

HTTP方法:主要以GET和POST为主

URL:唯一资源定位符,表示一个网络资源的地址

注意:服务端端口号考研省略,查询字符串也叫query string,是一种键值对形式存在的结构,使用&分割键值对,使用=分割键和值。

以bing的主页为例

版本号:表示当前HTTP协议的版本,最流行的是HTTP/1.1

  • 2.header

header也是键值对结构的,每个键值对占一行,键和值之间使用冒号:分割,这里的键值对可以有N行,且在结束之后会用空行来作为结束标记

常见键值对:

Host:

描述了浏览器要访问的服务器是谁,这里写的不仅仅是地址,还可以是端口号,一般来说,URL和Host中的域名是一致的,但当我们访问的服务器不能直接访问,而是需要通过代理访问,就不一致了,URL表示当前访问的服务器,HOST表示最终访问的服务器

Content-Type:

描述了body的数据格式,常用的格式是json/from表单。

Content-Length:

描述了body的长度

User-Agent:

描述了用户使用的客户端的操作系统的版本,这个键值对最大的作用是区分PC端和PE端

Referer:

描述了当前这个页面是从哪里跳转过来的

Cookie:

Cookie是浏览器在本地存储用户自定义数据的一种关键机制,Cookie的值也是键值对,这些键值对,都是开发者自定义的键值对,不同的网站,会根据不同的需求自行定义这里的键值对。

如图所示,浏览器不能直接访问用户的硬盘,为了解决这个问题,引入了cookie机制,允许网页通过浏览器提供的特定api,往浏览器这边存一些键值对,写入特别的文件中。

Cookie从服务器中来,当浏览器访问服务器时,服务器会在HTTP响应中,通过SET-COOKIE字段,设置COOKIE的键值对,返回给浏览器。浏览器收到数据后会在本地存储。这里的cookie就可以视为一个身份码,后续浏览器向服务器在发送HTTP请求时,会携带自身的cookie一并发送,此时服务器识别到身份码后,就可以知道这个客户端的身份并做出对应响应了

  • 3.空行

  • 4.正文(body)(有的时候可以没有)

HTTP响应报文格式

同样的方式,抓到sogou服务器发回的响应包

 

如图所示,这就是一个响应包的格式

可以看到,在响应中,body是一团乱码,这是因为数据本身是文本,一些网站为了节省空间,将其压缩成二进制的数据了。

为了得到原始内容,我们需要进行解压缩  

点击这里的解压缩选项,在打开响应包,就可以得到原始内容了 

在一个HTTP响应中,同样包含四个部分

  • 1.首行

版本号:和请求相同

状态码:数字 这里的数字来表示本次请求成功或失败以及失败的原因

状态码描述:一个或一组单词 描述状态码的含义

常见状态码:

200 OK:请求成功

404 Not Found:要访问的资源不存在

403 Forbidden:访问被拒绝(没有权限)

500 Internal Server Error:服务器内部错误

504 GateWay Timeout :服务器访问超时了

302 Move temporaily :临时重定向 临时将访问旧的地址被自动引导到新的地址上

301 Moved Permanently :永久重定向 永久将访问旧的地址被自动引导到新的地址上

  • 2.header
  • 3.空行
  • 4.正文(body)(有的时候可以没有)

GET和POST的区别

  • 1.没有本质区别,在GET可以使用的场景,替换成POST也可以
  • 2.GET一般没有body,需要携带数据到URL中,POST一般有body
  • 3.GET习惯上用来表示“获取数据”,而POST是“提交数据”
  • 4.GET通常会设计成幂等(输入一定,输出也一定。幂等是是否可缓存的关键),POST无要求
  • 5.GET可以被浏览器收藏,POST不行

三、构造HTTP请求的方法

1.直接通过浏览器地址栏输入url,可以构造出一个GET请求

2.html中一些特殊标签,也会触发get请求,例如

  • link
  • script
  • img
  • a

3.form表单可以触发GET和POST请求

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="https://www.sogou.com/abc/def" method="get">
        <input type="text" name="aaa">
        <input type="text" name="bbb">
        <input type="submit" name="提交">
    </form>
</body>
</html>

以此为例,打开这段代码

随便输入一些东西后提交

然后打开fiddled抓包,可以看到

首行可以看到,这里发送了一个GET请求。

form表单同样可以构造一个POST请求

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="https://www.sogou.com/abc/def" method="post">
        <input type="text" name="aaa">
        <input type="text" name="bbb">
        <input type="submit" name="提交">
    </form>
</body>
</html>

还是一样的流程,在抓个包看一看

可以看到,请求是POST,query string放到了body中

4.ajax构造HTTP请求

这是目前最主流的前后端交互方式

同步和异步

  • 同步:去饭馆吃饭,点完餐后在窗口等老板做好后自己端走(请求的发起者,自行获取响应)
  • 异步:去饭馆吃饭,点完餐后找个地方坐下等老板做完端过来(请求的发起者发起响应后不关注结果,由被请求的一方计算出结果后推送给请求的发起者)

ajax就是前后端异步交互的一种方式

一般来说,JS提供了原生了ajax的api,但是并不好用,所以我们使用jquery中提供的ajax api来实现ajax

这里贴一个Jquery的第三方库地址,便于前端引入

https://code.jquery.com/jquery-3.7.1.min.js

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ajax</title>
    <!-- 引入第三方库 -->
    <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
</head>
<body>
    <script>
        $.ajax({
            // 当前请求要发给谁
            url:"https://www.sogou.com",
            // 方法
            type:"get",
            // 请求成功以后,使用一个回调函数处理数据
            success:function(body){
                //写处理响应的代码
            }
        });
    </script>
</body>
</html>

这就是ajax的示例代码

回调函数:

不会立即调用,而是创建好之后,在之后合适的时机调用的函数。

跨域问题:

这是浏览器为了限制安全问题引入的保护机制,也是ajax里一个非常典型的问题

如果ajax运行的页面域名为abc.com

而ajax构造的请求的域名是def.com

那么无论服务器是否响应数据,浏览器都不能处理数据,都会报错

5.POSTMAN构造HTTP请求

Postman是一个无需写代码就可以直接构造HTTP请求的工具,安装过程不赘述

打开后的界面如下

开始构造请求

点击加号创建标签页,随后可以开始构造请求

 在这里就可以构造HTTP请求了

Postman还可以生成代码

ros_control硬件接口实战:从零构建机器人控制框架 本文详细介绍了ros_control硬件接口在机器人控制框架中的核心作用与实践方法。通过解析硬件接口类型、实现标准接口、构建主控制循环及自定义功能扩展,帮助开发者从零构建高效的机器人控制系统,提升硬件与ROS的协同效率。 阅读详情

相关推荐

数电发票“乐企直连”服务平台建设方案

数字化电子发票“乐企直连”服务平台建设方案

m0_73174802的博客 4856

如何 3 分钟跑起一个轻量无头浏览器:Lightpanda 完整实战指南

Lightpanda 是一款用 Zig 从头写的开源无头浏览器,官方基准显示:在 AWS EC2 上并发打开 100 个真实网页,它峰值内存约 123MB,而 Headless Chrome 要 2GB(差约 16 倍);跑 100 个页面它用 5 秒,Chrome 要 46 秒(快约 9 倍)。如果你要做大规模抓取、给 AI 代理搭浏览器环境、或者在资源受限的机器上跑自动化,这就是你需要的替代品

gitblog_00187的博客 356

【S32K】S32K144入门笔记(4) Lin (Lin stack组件) 驱动超声波雷达实例

0. 引言 Lin这块是我一直没弄懂的部分。很多东西一知半解,当时感觉是硬凑了答案出来。 果然过标的时候出了问题,几个小伙伴帮忙一起刷夜也没搞定,好在标还是顺利过了,不然罪过大了。 之前做lin这块一直用的是linStack组件,这部分包含了协议栈部分,需要对lin的协议比较清楚和理解才好配置。 尤其是,图形界面配置完成后会生成一个ldf文件,这个文件很重要,所有的代码都是基于这个文件生成的,但是这个文件我确认没找到什么介绍资料,所以很多配置都是一点一点凑出来的,再实际验证的。 抓住这次写文档的机会,把当时

YoYo的桃子树 1万+

JavaEE(J2EE)学习篇

一、简要介绍 Java EE,Java 平台企业版(Java Platform Enterprise Edition),之前称为Java 2 Platform, Enterprise Edition (J2EE),2018年3月更名为 Jakarta EE, 是 Sun 公司为企业级应用推出的标准平台,用来开发B/S架构软件,可以说是一个框架或是一种规范。 Java EE是 J2EE的一个新的名...

nann-viiv 的博客 925

Truncated SVD for faster dection

Truncated SVD方法最先被提出在《Fast R-CNN》论文中,用于降低全连接层的运算量,提升模型的速度。在卷积神经网络的分类任务中,FC层的运算速度远远大于CONV层,而在Fast R-CNN的目标检测任务中,大多数的运算时间发生在FC 的运算中,是因为针对每张输入图片,只进行一次卷积操作,而要对生成的Region Proposal,大致两千个,进行全连接操作进行分类与Bounding...

weixin_35747666的博客 1535

具身智能:从理论突破到场景落地的全解析

具身智能(Embodied Intelligence)是人工智能与机器人学深度融合的前沿领域,其核心在于通过物理实体与环境的动态交互实现智能行为。区别于传统 AI 的 “离身性”(如语音助手仅依赖数据输入),具身智能强调 “智能体通过身体感知世界并反作用于环境”,形成 “感知 - 决策 - 行动” 的闭环。例如,能自主避障的配送机器人、可精准抓取异形物体的机械臂,均通过传感器网络与环境实时互动,在试错中优化行为策略。

LeeKumaの技术Note 2683

JavaEE之HTTP协议 Ⅰ

JavaEE之HTTP协议 Ⅰ

哒哒的博客 1175

保姆级教程:在Jetson Nano上从零移植OV5647 CSI摄像头驱动(附完整调试记录)

本文提供了一份详细的Jetson Nano OV5647 CSI摄像头驱动移植教程,涵盖硬件准备、驱动框架分析、设备树配置、驱动移植核心修改点及调试技巧。通过V4L2框架和Tegra平台适配,开发者可快速实现摄像头驱动的移植与优化,适用于边缘计算和嵌入式视觉应用。

weixin_27869497的博客 519

JavaEE——HTTP协议

HTTP协议的概念,请求与响应报文的详细格式,抓包工具介绍,具体抓包案例演示,url具体格式,方法的不同分类,GET和POST的基本概念和区别

m0_60867520的博客 329

C语言 100道经典编程题适用于专升本,专接本【详细分析版】_c语言专升本题目

/法2//left指向起始 right指向数组末尾= 0){left++;//如果*left是奇数就循环接着向后指,直到指向偶数就退出//(left

2401_84978503的博客 695

Unity游戏开发客户端Lua基础

Unity游戏开发客户端面经之 lua 篇

Sea3752的博客 1万+

Java 11正式发布

美国当地时间 9 月 25 日,Oracle 官方宣布 Java 11 (18.9 LTS) 正式发布,可在生产环境中使用! 这是自 Java 8 后的首个长期支持版本,非常值得大家的关注,按照 Oracle 公布的支持路线图,Java 11 将会获得 Oracle 提供的长期支持服务,直至 2026 年 9 月。 java 9  还没来得及找时间学习研究呢,11就出来了,ε=(´ο`*)))...

Mr.Xie的博客 741

UG\NX二次开发 分割曲线

分割曲线没有ufun函数?那就换一种思路实现。

王牌飞行员_里海的博客 1149

JAVA加HTML50道选择题,精选30道JavaEE选择题

原标题:精选30道JavaEE选择题1、是发送邮件的协议。(A)A、SMTPB、IAMPC、POP3D、HTTP2、在J2EE中,request对象的方法可以获取页面请求中一个表单组件对应多个值时的用户的请求数据。(D)A、String getParameter(String name)B、String[] getParameter(String name)C、String getParamete...

weixin_42384267的博客 1000

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

J2EE学习笔记

J2EE学习笔记

conanswp的专栏 2015

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

七、JavaWeb之HTTP协议、Servlet

文章目录1 Web开发概述1.1 web基础1.2 软件开发的结构分类1.3 web服务器1.4 Tomcat服务器 1 Web开发概述 1.1 web基础 1 Web(互联网总称) web(World Wide Web)即全球广域网,也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。 Java Web,是用Java技术来解决相关web互联网领域的技术总和。 2 Java Web开发中的资源: 静态web资源 HTML CSS JS 动态web资源 S

u_hcy2000的博客 399

Servlet的使用(JavaEE初阶系列17)

Servlet的使用,快来码住了。

weixin_61599986的博客 1946

视频教程-JavaEE面试宝典()-Java

JavaEE面试宝典() 系统分析师,项目经理,特级讲师;11年项目经验,8...

weixin_30044143的博客 230

JavaEE网络通信原理与性能优化实战

网络通信是分布式系统的基石,其核心在于TCP/IP协议栈的分层设计。从物理层到应用层,每层协议各司其职,共同完成数据传输。JavaEE在应用层通过Servlet容器对网络通信进行标准化封装,显著提升了开发效率。理解NIO多路复用原理能有效提升吞吐量,而连接池、零拷贝等技术则能降低资源消耗。在电商、金融等高并发场景中,合理的线程池配置和协议选择(如HTTP/2或WebSocket)直接影响系统稳定性。通过tcpdump、Wireshark等工具进行网络诊断,结合JMeter压测数据,可以精准定位性能瓶颈。随着

weixin_30765577的博客 461

J2EE—HTTP&Servlet

目录 Http协议&Servlet Http协议 演示客户端 如何 与服务器端通讯。 Http请求数据解释 Http响应数据解析 Get 和 Post请求区别 Web资源 Servlet Hello Servlet Servlet执行过程 Servlet的通用写法 Servlet的生命周期 让Servlet创建实例的时机 提前。 ServletConfig 为...

安藤青司的博客 812

linux与j2ee的开发

  详细的介绍了J2EE 1.4 application Server for Linux的安装与配置。值得借鉴。By Jawa From LinuxAID Forum ① 采用RedhatLinux 9 Personal 简体中文版的完全安装(5GB),       安装完毕后MySQL 3和Mozilla 1.2.1等软件已被安装到Linux中。本说明针对Linux自带的原有M

java,linux,jboss,myeclipse,eclipse的专栏 581

J2EE Architecture(17)

J2EE Architecture(17) 1、MVC架构MVC(Model-View—Control,模型-视图-控制器)架构,是最早出现的一种架构,用于实现传统架构,如客户机/服务器、分布和Internet架构。这个架构分开了表示逻辑、业务逻辑和数据。1)MVC模式的“模型”实质上表示数据或信息,以及用来访问和修改数据的业务逻辑。2)每当数据发生更改时,模型将通知“视图”,这称为“更改通知”...

tomhibolu 70

JavaEE面试宝典()-肖海鹏-专题视频课程

在大量面试实践中,能够通过本套视频前3道题的面试者,不足5%。 绝大多数的学员都是一知半解,含含糊糊。想获得一份好的工作,必须要在EE阶段打好基础!...

XiaoGong1688的博客 380

JavaEE 第17节 网络通信知识扫盲

此篇博客用于讲解网络编程中基础、必要的知识,所以即使是小白相信认真看也是能懂的。文中涉及的一些概念、专有名词也不用深究具体的实现方式,了解大体的运作流程即可。

HYY的博客 922

JAVAEE-SpringBoot

Maven是一个自动化项目管理工具,通过pom.xml配置文件实现依赖管理和项目构建。它能自动下载所需jar包,支持依赖传递,提高开发效率。Maven仓库分为本地仓库和远程仓库(包括中央仓库和私服)。SpringBoot项目创建时可以选择版本和依赖,主要目录包括源代码、资源文件和测试代码。SpringBoot内置Tomcat服务器(默认8080端口),通过@RestController等注解快速开发Web应用。HTTP请求响应状态码中,200表示成功,4xx为客户端错误,5xx为服务端错误。

m0_75040012的博客 427

Servler学习(一) HTTP协议&Tomcat学习

Servler学习(一) HTTP协议 1.get和post请求方式区别: Get请求方式:请求数据以?的形式隔开拼接在请求头中,不安全,没有请求实体部分,并且不能携带大量数据。不考虑安全性、数据不大 POST请求方式:请求数据在请求实体中进行发送,在URL中看不到具体的请求数据,安全。是和数据量大的数据发送。适合安全性、数据大的 //这是一个GET请求 GET /login.html?una...

weixin_43070331的博客 308
上一篇: [16]从零开始的JAVAEE-网络层
下一篇: [18]JAVAEE-一文搞懂HTTPS协议
不卷啊
博客等级 码龄5年 316粉丝 20原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不卷啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值