【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.hqwc.cn/news/164890.html

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

相关文章

四万字Spark性能优化宝典

导读 发现一篇好文&#xff0c;分享给大家。 全文分为四个部分&#xff0c;基本涵盖了所有Spark优化的点&#xff0c;全文较长&#xff0c;建议收藏后PC端查看或工作中问题troubleshooting。 《Spark性能优化&#xff1a;开发调优篇》 《Spark性能优化&#xff1a;资源调优…

linux继续循环案例测试ping网络,目录下的文件权限循环输出

第一&#xff1a;查看本机ip #ip addr 通过脚本访问本机ip1-100&#xff0c;是否可以ping通&#xff0c;并显示结果&#xff0c;上图 知识点 ping -c 数字1 -w 数字1&#xff0c;向目的ip发送1个数据包&#xff0c;等待1秒&#xff0c;无回复中止 &>/dev/null 知…

鸿蒙开发工具DevEco Studio的下载和安装

一、DevEco Studio概述 1、简介 HUAWEI DevEco Studio&#xff08;获取工具请单击链接下载&#xff0c;以下简称DevEco Studio&#xff09;是基于IntelliJ IDEA Community开源版本打造&#xff0c;为运行在HarmonyOS和OpenHarmony系统上的应用和服务&#xff08;以下简称应用…

GIS开发入门,TopoJSON格式是什么?TopoJSON格式与GeoJSON格式有什么不同?

TopoJSON介绍 TopoJSON是一种几何拓扑结构的地理数据格式,它使用拓扑结构来表示地理对象,可以更有效地压缩和转移数据,从而加快数据加载速度。 TopoJSON格式构成 TopoJSON文件由三部分组成,transform、objects和arcs组成。transform描述了变换参数; objects描述地理实体…

【无代码】【VR开发】【Unity】【VRTK】4-导入VRTK Tilia Package

【导入VRTK V4】 VRTK的Tilia Package包含了一整套空间开发方案。导入后你可以在PackageManager中看到它们。 所有的Tilia包都可以在如下页面找到: https://www.vrtk.io/tilia.html Tilia包有一个安装器,可以让你仅仅安装需要的包。包的种类很多,按照适用方向分类。 点击H…

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(一)

熟悉项目环境 1. 苍穹外卖项目介绍1.1 项目介绍1.2 技术选型 2. 开发环境搭建2.1 前端环境2.2 后端环境搭建2.3 Git版本控制2.4 nginx反向代理和负载均衡 3.登录功能4. Swagger4.1 介绍4.2 使用步骤4.3 常用注解 1. 苍穹外卖项目介绍 1.1 项目介绍 苍穹外卖是专门为餐饮企业&…

MCU常见通信总线串讲(四)—— SPI总线协议

&#x1f64c;秋名山码民的主页 &#x1f602;oi退役选手&#xff0c;Java、大数据、单片机、IoT均有所涉猎&#xff0c;热爱技术&#xff0c;技术无罪 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 获取源码&#xff0c;添加WX 目录 前言一…

智能网联汽车基础软件信息安全需求分析

目录 1.安全启动 2.安全升级 3.安全存储 4.安全通信 5.安全调试 6.安全诊断 7.小结 1.安全启动 对于MCU&#xff0c;安全启动主要是以安全岛BootROM为信任根&#xff0c;在MCU启动后&#xff0c;用户程序运行前&#xff0c;硬件加密模块采用逐级校验、并行校验或者混合校…

深度图(Depth Map)

文章目录 深度图深度图是什么深度图的获取方式激光雷达或结构光等传感器的方法激光雷达RGB-D相机 双目或多目相机的视差信息计算深度采用深度学习模型估计深度 深度图的应用场景扩展阅读 深度图 深度图是什么 深度图&#xff08;depth map&#xff09;是一种灰度图像&#xf…

2011年408计网

第33题 TCP/IP 参考模型的网络层提供的是&#xff08;&#xff09;A. 无连接不可靠的数据报服务B. 无连接可靠的数据报服务C. 有连接不可靠的虚电路服务D. 有连接可靠的虚电路服务 本题考查TCP/IP 参考模型的网络层 若网络层提供的是虚电路服务&#xff0c;则必须建立网络层的…

vite + electron引入itk报错

代码 import { readImageArrayBuffer } from itk-wasm console.log(readImageArrayBuffer)通过itk-wasm官网&#xff0c;创建新的项目vitevue&#xff08;vue2或者vue3&#xff09;&#xff0c;都没问题。加入electeon后包此错。通过排查&#xff0c;意外找到原因&#xff0c;…

TCP/IP的基础知识

文章目录 TCP/IP的基础知识硬件&#xff08;物理层&#xff09;网络接口层&#xff08;数据链路层&#xff09;互联网层&#xff08;网络层&#xff09;TCP/IP的具体含义传输层应用层&#xff08;会话层以上的分层&#xff09;TCP/IP分层模型与通信示例发送数据包的一个例子接收…