【JavaEE】HTTP协议(什么是HTTP?、HTTP格式、form表单和ajax构造HTTP)

news2024/10/5 12:56:54

一、什么是HTTP协议?

1.1 HTTP (全称为 “超文本传输协议”) 是一种应用非常广泛的 应用层协议

在这里插入图片描述

1.2 理解HTTP协议的工作过程

当我们在浏览器中输入一个 “网址”, 此时浏览器就会给对应的服务器发送一个 HTTP 请求. 对方服务器收到这个请求之后, 经过计算处理, 就会返回一个 HTTP 响应
在这里插入图片描述

二、HTTP协议格式

这里我们使用抓包工具查看完整的HTTP请求和响应
在这里插入图片描述

2.1 抓包结果解析

2.1.1 HTTP请求:

在这里插入图片描述

🚕首行: [方法] + [url] + [版本]
🚕Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
🚕Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度

2.1.2 HTTP响应:

在这里插入图片描述
🚓首行: [版本号] + [状态码] + [状态码解释]
🚓Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
🚓Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在body中

2.2 协议格式总结

在这里插入图片描述
上面就是对HTTP协议格式大体的总结,下面来深入看其中具体的细节:

2.3 HTTP 请求 (Request)

2.3.1 方法(Method)

首行的第一个单词就是当前采用的方法,HTTP协议有很多的方法:
在这里插入图片描述
其中90%以上的场景使用的都是GET方法和POST方法

GET请求的特点:
🚑(1)URL 的 query string 可以为空, 也可以不为空.
🚑(2)header 部分有若干个键值对结构.
🚑(3)body 部分为空.

POST请求的特点:
🚒(1)URL 的 query string 一般为空
🚒(2)header 部分有若干个键值对结构.
🚒(3)body 部分一般不为空. body 内的数据格式通过 header 中的 Content-Type 指定. body 的长度由 header 中的 Content-Length 指定.

一般面试中非常喜欢问GET请求和POST请求有什么区别
在这里插入图片描述

2.3.2 URL (Uniform Resource Locator 统一资源定位符)

就是我们俗称的网址

一个完整的URL大概有一下结构:
在这里插入图片描述
在这里插入图片描述

2.3.3 版本号(Version)

目前最常用的HTTP版本是1.1

2.3.4 请求报头(header)

header 的整体的格式也是 “键值对” 结构.
每个键值对占一行. 键和值之间使用分号分割.

下面介绍几个常见的header:
🚙(1)Host:表示服务器主机的地址和端口.
🚙(2)Content-Length :表示 body 中的数据长度
🚙(3)Content-Type:表示请求中body的数据格式

在这里插入图片描述
🚙(4)User-Agent (简称 UA):用户使用的客户端是啥样的
在这里插入图片描述
🚙(4)Referer:表示这个页面是从哪个页面跳转过来的

Referer: https://www.baidu.com/

🚙(5)Cookie: 浏览器在本地存储用户自定义数据的关键机制
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
🚙(6)body: 正文中的内容格式和 header 中的 Content-Type 密切相关

2.4 HTTP 响应(Response)

2.4.1 状态码 (status code)

状态码表示访问一个页面的结果. (是访问成功, 还是失败, 还是其他的一些情况…)

下面介绍几个常用的:
🛴(1)200 OK:这是一个最常见的状态码, 表示访问成功
🛴(2)404 Not Found:没有找到资源
浏览器输入一个 URL, 目的就是为了访问对方服务器上的一个资源. 如果这个 URL 标识的资源不存在, 那么就会出现 404
🛴(3)403 Forbidden:访问被拒绝(没有权限)
🛴(4)500 Internal Server Error:服务器出现内部错误. 一般是服务器的代码执行过程中遇到了一些特殊情况(服务器异常崩溃)会产生这个状态码.
🛴(5)504 Gateway Timeout:服务器访问超时了
🛴(6)302 Move temporarily:临时重定向(不确定下次是否重定向)

什么是重定向?
访问旧的地址被自动引导到新的地址
就相当于手机号码中的 “呼叫转移” 功能. 比如我本来的手机号是 186-1234-5678, 后来换了个新号码 135-1234-5678, 那么不需要让我的朋友知道新号码, 只要我去办理一个呼叫转移业务, 其他人拨打 186-1234-5678 , 就会自动转移到 135-1234-5678 上.

在登陆页面中经常会见到 302. 用于实现登陆成功后自动跳转到主页. 响应报文的 header 部分会包含一个 Location 字段, 表示要跳转到哪个页面.
🛴(7)301 Moved Permanently:永久重定向(以后都重定向了,都会转新的地址)

状态码虽然很多,但是总体可以分为几个大类:
在这里插入图片描述
其他的结构与HTTP请求无异

三、构造 HTTP 请求

3.1 通过 form 表单构造 HTTP 请求

3.1.1 form 发送 GET 请求

<body>
    <form action="http://bushiwangye.com" method="GET">
        <input type="text" name="aaa">
        <input type="text" name="bbb">
        <input type="submit" value="提交">
    </form>
</body>

在这里插入图片描述
在这里插入图片描述

点击提交,此时就会构造一个HTTP请求并发送:

GET http://bushiwangye.com/?aaa=1111&bbb=2222 HTTP/1.1
Host: bushiwangye.com
Proxy-Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6

在这里插入图片描述

3.1.2 form 发送 POST 请求

<body>
    <form action="http://bushiwangye.com" method="POST">
        <input type="text" name="aaa">
        <input type="text" name="bbb">
        <input type="submit" value="提交">
    </form>
</body>
POST http://bushiwangye.com/ HTTP/1.1
Host: bushiwangye.com
Proxy-Connection: keep-alive
Content-Length: 17
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: null
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6

aaa=1111&bbb=2222

主要的区别:
🛺(1)method 从 GET 变成了 POST
🛺(2)数据从 query string 移动到了 body 中.

3.2 通过 ajax 构造 HTTP 请求

3.2.1什么是ajax?

ajax 全称 Asynchronous Javascript And XML, 是 2005 年提出的一种JavaScript 给服务器发送 HTTP 请求的方式.

(Asynchronous是异步的意思:请求的发送者不关心结果,由被请求方计算出结果后,把结果推给发起者)

特点是可以不需要 刷新页面/页面跳转 就能进行数据传输

3.2.2 发送 GET 请求

<script>
    jQuery.ajax({
        url:"https://www.sogou.com/",
        type: "get",
        success: function(body) {
            //处理响应的代码
        }
    });
</script>

在这里插入图片描述

3.2.3 发送 POST 请求

<script>
    jQuery.ajax({
        url:"https://www.sogou.com/",
        type: "post",
        success: function(body) {
            //处理响应的代码
        }
    });
</script>

3.2.4 ajax存在的问题

ajax构造HTTP请求可能会出现跨域问题:
在这里插入图片描述
ajax默认是不能跨域的,也就是 “百度下面的 html 中的 ajax 不能访问搜狗的内容”.

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

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

相关文章

FMCW雷达论文速览 | TRS 2023, 基于FMCW雷达的多天线高精度测距算法及性能分析

注1:本文系“最新论文速览”系列之一,致力于简洁清晰地介绍、解读最新的顶会/顶刊论文 TRS 2023 | High Accuracy Multi-antenna Ranging Algorithm and Performance Analysis for FMCW Radar 论文原文:https://ieeexplore.ieee.org/document/10309162 Z. Xu, S. Qi and P. Zh…

Python教程之Python中文件路径

文章目录 前言一、Python中文件路径1.绝对路径和相对路径2.目录中的斜杠们3.正则表达式中的斜杠们 二、什么是文件路径&#xff0c;Python中如何书写文件路径&#xff1f;1.Windows上的反斜杠以及OS X和Linux上的正斜杠关于Python技术储备一、Python所有方向的学习路线二、Pyth…

MS90C385B:+3.3V 150MHz 的 24bit 平板显示器(FPD) LVDS 信号发送器

MS90C385B 芯片能够将 28bit 的 TTL 数据转换成 4 通道的低压差分 信号 (LVDS) 。时钟通道经过锁相之后&#xff0c;与数据通道并行输出。当时钟频 率为 150MHz 时&#xff0c; 24bit 的 RGB 数据、 3bit 的 LCD 时序数据和 1bit 的控 制数据以 1050Mbps…

Hadoop常见问题

报错1 &#xff1a;is group-writable, and the group is not root. Its permissions are 0775, datanode启动时&#xff0c;日志报错 1.“xxxx” is group-writable, and the group is not root. Its permissions are 0775, and it is owned by gid 3245. Please fix this…

asp.net core mvc之路由

一、默认路由 &#xff08;Startup.cs文件&#xff09; routes.MapRoute(name: "default",template: "{controllerHome}/{actionIndex}/{id?}" ); 默认访问可以匹配到 https://localhost:44302/home/index/1 https://localhost:44302/home/index https:…

直击第一届中国测绘地理信息大会,华测导航强势出圈!

11月8日&#xff0c;由自然资源部指导&#xff0c;中国测绘学会、中国地理信息产业协会和中国卫星导航定位协会共同主办的第一届中国测绘地理信息大会于浙江德清盛大开幕&#xff0c;各家科研院所、企事业单位云集现场&#xff0c;展示科技创新成果。华测导航携多类智能装备及解…

初步了解OSG智能指针

OSG定义了智能指针模板类ref_ptr<>。 osg命名空间的Referenced类实现了对内存区段的引用计数器功能。 所有的osg节点和场景图形数据&#xff0c;均派生自Referenced类。 ref_ptr<>用于实现一个指向Referenced对象的智能指针。 #include <Geode> #include <…

水泵机组如何通过设备健康管理系统实现预测性维护

水泵机组是关键的工业设备&#xff0c;在正常运行过程中可能遭遇各种故障&#xff0c;影响生产效率和设备寿命。为了提高水泵机组的可靠性和效率&#xff0c;预测性维护成为一种重要的管理方法。本文将介绍水泵机组的结构及常见故障&#xff0c;并详细阐述如何使用设备健康管理…

使用遗传算法优化BP神经网络实现非线性函数拟合

大家好&#xff0c;我是带我去滑雪&#xff01; 非线性函数拟合是一种用于找到与给定数据点集合最好匹配的非线性函数的过程。非线性函数拟合通常用于以下情况&#xff1a; 数据趋势不是线性的&#xff1a;当数据点之间的关系不能用线性方程来表示时&#xff0c;需要使用非线性…

【吞噬星空】斩杀两大兽皇,罗峰实力暴涨,雷神已不是对手

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 深度爆料&#xff0c;《吞噬星空》国漫第92话新剧情解析&#xff0c;罗峰、洪和雷神&#xff0c;已成为师兄弟&#xff0c;但洪和雷神无论在实力还是地位上都高于罗峰。因此&#xff0c;罗峰在这三人中始终担…

【C/PTA】循环结构进阶练习(三)

本文结合PTA专项练习带领读者掌握循环结构&#xff0c;刷题为主注释为辅&#xff0c;在代码中理解思路&#xff0c;其它不做过多叙述。 文章目录 7-1 循环-Fibonacci数列的运算7-2 循环-找数字7-3 循环-小智的捕食计划7-4 循环-抱大腿7-5 循环-跳&#xff01;7-6 循环-生气的峰…

金融帝国实验室(Capitalism Lab)推出一个密钥即完成注册机制!

为了方便趸购『金融帝国实验室』&#xff08;Capitalism Lab&#xff09;正版玩家&#xff0c;Enlight官方正式推出『一个密钥即完成注册』机制&#xff0c;切实简化游戏账户注册流程&#xff01; ————————————— 『一个密钥即完成注册』适用于趸购“游戏本体4DLC”…

前端工程化(vue脚手架安装)

用命令行安装&#xff0c;先安装NodeJs&#xff0c;配置环境变量 1.npm config set prefix "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Node.js" //引号内路径是NodeJs安装所在路径 2.npm config get prefix 查看其是否成功 3.npm install -g vue/cli 4…

Flutter——最详细(AppBar)使用教程

AppBar简介 Material Design 应用栏(标题栏) 使用场景&#xff1a; 顶部标题栏包括一些常用的菜单按钮 属性作用leading左边工具视图automaticallyImplyLeading左边图标的颜色title标题视图actions右边菜单按钮flexibleSpace其高度将与应用栏的整体高度相同bottom左侧底部文本内…

程序员怎样才能学好算法?这本书送几本给大家!

目录 笔者对算法的理解 写书的初衷及过程 本书的内容 购买方式 数据结构和算法是计算机科学的基石&#xff0c;是计算机的灵魂&#xff0c;要想成为计算机专业人员&#xff0c;学习和掌握算法是十分必要的。不懂数据结构和算法的人不可能写出效率更高的代码。计算机科学的很…

【原理篇】二、Bean加载控制

文章目录 1、编程式Bean加载控制2、注解式Bean加载控制3、Conditional派生注解4、Bean依赖的属性配置 Bean的加载控制指根据特定情况对bean进行选择性加载以达到适用于项目的目标 上篇Bean声明的方式中&#xff0c;后4种可以实现对Bean加载的控制&#xff0c;分别是&#xff1a…

0.1+0.2为什么不等于0.3

目录 一、0.10.2是如何执行的&#xff1f;1、转成浮点数2、浮点数相加3、浮点数转成十进制 二、BigDecimal 大家好&#xff0c;我是哪吒。 最近碰到一个问题&#xff0c;很有趣&#xff0c;我就不贴代码了&#xff0c;要不你们会以为我在无中生有。 我现在的心情很复杂&#x…

无人机航迹规划:五种最新智能优化算法(KOA、COA、LSO、GRO、LO)求解无人机路径规划MATLAB

一、五种算法&#xff08;KOA、COA、LSO、GRO、LO&#xff09;简介 1、开普勒优化算法KOA 开普勒优化算法&#xff08;Kepler optimization algorithm&#xff0c;KOA&#xff09;由Mohamed Abdel-Basset等人于2023年提出。五种最新优化算法&#xff08;SWO、ZOA、EVO、KOA、…

如何在Visual Studio上创建项目并运行【超级详细】

工欲善其事&#xff0c;必先利其器。想要学好编程&#xff0c;首先要把手中的工具利用好&#xff0c;今天小编教一下大家如何在史上最强大的编译器--Visual Studio上创建项目。&#x1f357; 一.打开编译器&#x1f357; 双击你电脑上的vs&#xff0c;(2012,2019,2022)都行。&…

【原理篇】四、自定义starter

文章目录 1、案例分析2、业务功能的实现3、中途调试4、开启定时任务打印报表5、引入属性配置类&#xff0c;写活业务参数配置6、拦截器7、开启yml提示功能 做一个记录系统访客独立IP访问次数的功能&#xff0c;并把它自定义成一个starter&#xff0c;实现&#xff1a;在现有项目…