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

一、什么是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.6aaa=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.mzph.cn/news/135933.shtml

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

相关文章

单例设计模式

什么是单例&#xff1f; 单例就像我们的任务管理器窗口无论打开几次&#xff0c;桌面上只有一个窗口 所谓单例就是&#xff0c;我们有且只能创建一个对象 怎么实现呢 public class A{//定义一个类变量记住该类的一个对象private static A a new A();//私有构造器 ---这样只能通…

Flex bison 学习好代码

计算机的重要课程编译原理很难学吧&#xff0c; 但是要会用flex &bison的话&#xff0c;容易理解一些。 有些好的项目可以帮助我们&#xff0c;比如 https://github.com/jgarzik/sqlfun 可以帮我们&#xff0c;下载 下来。 在cygwin 下面或者linux 运行&#xff1a; …

es6过滤对象里面指定的不要的值filter过滤

//过滤出需要的值this.dataItemTypeSelectOption response.data.filter(ele > ele.dictValue tree||ele.dictValue float4);//过滤不需要的值this.dataItemTypeSelectOption response.data.filter((item) > {return item.dictValue ! "float4"&&it…

关于表单校验,:rules=“loginRules“

在写好validator相关的方法后&#xff0c;rule测试没有生效 <el-form ref"loginForm" :model"loginForm" :rules"loginRules" class"login-form" <el-form-item prop"username"> <el-input ref"usernam…

C#对图片Image转换为Bitmap并解析图片中的条码

首先&#xff0c;你需要安装ZXing.Net库。你可以通过NuGet包管理器来安装。 using ZXing; using ZXing.Common; using ZXing.QrCode; public class Test {public string DecodeBarcode(Bitmap bitmap) { var reader new BarcodeReader(); var result reader.Decode(b…

基于站点、模式、遥感多源降水数据融合实践技术应用

降水在水循环中发挥着重要作用&#xff0c;塑造了生态景观和生态系统。目前&#xff0c;有四种主要方式获取降水数据&#xff1a;1&#xff09;雨量计观测&#xff0c;2&#xff09;地基雷达遥感&#xff0c;3&#xff09;卫星遥感&#xff0c;4&#xff09;模式模拟。基于雨量…

K8s----资源管理

目录 一、Secret 1、创建 Secret 1.1 用kubectl create secret命令创建Secret 1.2 内容用 base64 编码&#xff0c;创建Secret 2、使用方式 2.1 将 Secret 挂载到 Volume 中&#xff0c;以 Volume 的形式挂载到 Pod 的某个目录下 2.2 将 Secret 导出到环境变量中 二、Co…

LeetCode_多源 BFS_中等_2258.逃离火灾

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 给你一个下标从 0 开始大小为 m x n 的二维整数数组 grid &#xff0c;它表示一个网格图。每个格子为下面 3 个值之一&#xff1a; 0 表示草地。1 表示着火的格子。2 表示一座墙&#xff0c;你跟火都不能通过…

Linux中使用Shell脚本安装jdk

1&#xff0c;了解安装步骤 &#xff08;1&#xff09;进入到server目录 &#xff08;2&#xff09;解压jdk压缩包文件 &#xff08;3&#xff09;配置JAVA_HOME变量、PATH变量、CLASSPATH变量 &#xff08;4&#xff09;要让环境变量立刻生效执行source命令 &#xff08;5&am…

租用网站服务器的六大指标

相信很多人对网站服务器租用6个重要指标都不太了解&#xff0c;下面壹基比小鑫为你详细解释一下这个问题&#xff0c;希望对你有一定的帮助 服务器租用&#xff0c;是指由IDC服务商提供硬件&#xff0c;负责基本软件的安装、环境配置&#xff0c;负责服务器上基本服务功能的正…

邦芒解析:领导暗示你离职的话语和行为

领导暗示你离职的话语和行为&#xff0c;有时候在职场中&#xff0c;如果领导想让你离职的话&#xff0c;一般不会直接和你说&#xff0c;像这种得罪人的事情&#xff0c;他们一般会用暗示的方法。以下是领导暗示你离职的话语和行为 ​ ​1、有你不多&#xff0c;没你不少 这…

你别说,还真好用,Apipost-IDEA插件

写完代码还得重复打字编写接口文档&#xff1f;代码量大定位接口定义方法太难找&#xff1f;麻烦&#xff01;写完代码还得复制粘贴到postman进行调试&#xff1f; 这三点太麻烦&#xff1f;今天给大家推荐一款IDEA插件&#xff0c;写完代码IDEA内一键生成API文档&#xff0c;…

工业物联网模块应用之砂芯库桁架机器人远程无线控制

一、应用背景 在铸管车间无线技改项目中&#xff0c;客户需要构建智能化砂芯库&#xff0c;要求各库存的规格、数量、位置坐标等数据实时可显。此外&#xff0c;还需具备自动入库及出库功能&#xff0c;用于将出炉后的成摞砂芯及时码放至砂芯库的预设位置&#xff0c;当离心机…

深度学习(CNN+RNN)笔记2

文章目录 第五课&#xff1a;序列模型(Sequence Models)第一周&#xff1a;循环神经网络&#xff08;Recurrent Neural Networks&#xff09;【序列模型、语言模型序列生成、对新序列采样。RNN、GRU、LSTM、双向RNN、深度RNN】第二周&#xff1a;自然语言处理与词嵌入&#xff…

管理视频推广工作:新媒体团队的成功策略

目前的新媒体团队&#xff0c;在视频管理时呈现出多、杂、散的特点&#xff0c;如何有效管理视频素材是当下许多新媒体团队的管理痛点&#xff0c;也是管理要点。高效的视频推广管理是新媒体团队提升产出效率的关键。 那么新媒体行业该如何管理视频推广工作&#xff1f; 数据…

day12-内核与文件系统衔接流程

static int __init kernel_init(void * unused) init_post(); init_post()&#xff1a; 这是内核启动应用程序的接口 static noinline int init_post(void) {/* need to finish all async __init code before freeing the memory */async_synchronize_full();free_init…

Spring-循环依赖简述

什么是循环依赖 // A依赖了B class A {public B b; } ​ // B依赖了A class B {public A a; } ​ // 循环依赖 A a new A(); B b new B(); a.b b; b.a a; 对象之间的相互依赖很正常&#xff0c;但是在Spring中由于对象创建要经过Bean的生命周期&#xff0c;所以就有了循环…

浅谈智能变电站自动化系统的应用与产品选型

安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;现如今&#xff0c;智能变电站发展已经成为了电力系统发展过程中的内容&#xff0c;如何提高智能变电站的运行效率也成为电力系统发展的一个重要目标&#xff0c;为了能够更好地促进电力系统安全稳定运行&#xff0c;…

ubuntu安装rabbitMQ 并 开启记录消息的日志

apt-get update apt-get install rabbitmq-server rabbitmqctl add_user root password // 设置用户名密码 rabbitmqctl set_user_tags root administrator // 设置为管理员身份 rabbitmqctl set_permissions -p / root ".*" ".*" ".*" //为…

【Head First 设计模式】-- 策略模式

一、背景 Head First 设计模式第一章设计模式入门–策略模式 二、工具箱的工具&#xff08;本章&#xff09; 1、OO基础 封装 继承 多态 抽象 2、OO原则 封装变化 面向接口编程&#xff0c;而非面向实现编程 组合优于继承 3、OO模式 策略模式&#xff0c;所谓策略模式就是定义…