JAVAWeb07-WEB 开发通信协议-HTTP 协议-关联篇

news2025/1/14 18:17:16

1. 概述

1.1 官方文档及示例说明

1.1.1 请求头

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

1.1.2 响应头

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

1.1.3 HTTP 响应状态码

  • HTTP状态码
    当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
    HTTP状态码的英文为HTTP Status Code。

  • 下面是常见的HTTP状态码:
    200 - 请求成功
    301 - 资源(网页等)被永久转移到其它URL
    404 - 请求的资源(网页等)不存在
    500 - 内部服务器错误

  • HTTP状态码分类
    HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:

分类分类描述
1**信息,服务器收到请求,需要请求者继续执行操作
2**成功,操作被成功接收并处理
3**重定向,需要进一步的操作以完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5**服务器错误,服务器在处理请求的过程中发生了错误
  • 响应状态码列表
    请查看个人文档

1.2 什么是 HTTP 协议

  1. 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用广泛的一种网络协议。是工作在 tcp/ip 协议基础上的,所有的 WWW 文件都遵守这个标准。
  2. http1.0 短连接 http1.1 长连接
    在这里插入图片描述
  3. http 是 TCP/IP 协议的一个应用层协议,http 也是我们 web 开发的基础.

2. 快速入门 HTTP 协议

  1. 看一个hi.html 页面,页面核心代码如下:
    <h1>hello, http</h1>
  2. 使用火狐浏览器抓取 Http 请求和相应数据包[演示]
    2.1 快捷键 ctrl+shift+i
    2.2 找到网络在这里插入图片描述
  3. 使用 chrome 浏览器抓取 Http 请求和相应数据包[演示]
    快捷键 ctrl+shift+i
    在这里插入图片描述
  4. 画出 http 请求 hi.html 的 UML 时序图
    在这里插入图片描述

3. 页面请求的一个问题(分析)

● 创建 test.html 页面

<h1>abc</h1>
<img src="1.jpg"/>
<img src="2.jpg"/>

● 当访问 test.html 页面时, 问浏览器发出几次 http 请求?
1 次, 2 次, 3 次
答:一共 3 次

解读
(1) 第一次请求的 test.html
(2) 当浏览器解析发现 test.html 中有
<img src="imgs/1.png" width="300px">
<img src="imgs/2.png">
(3) 会向服务器继续发请求,要 1.png 和 2.png, 一共 3 次

● 抓包说明
在这里插入图片描述

4. HTTP 请求包分析(GET)

  1. HTTP 请求包分析(GET)图, 说明 可以通过浏览器抓包分析
  • 请求行
  • 请求头
    在这里插入图片描述
  1. 说明:HTTP 请求(GET)-有数据提交情况 WEB 程序员要学会分析 Http 包!
    案例说明:
    在这里插入图片描述
    在这里插入图片描述
  1. 创建 login.html
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>用户登录</title>
</head>
<body>
	<h1>用户登录</h1>
	<!-- 给我们的LoginServlet发出Get请求提交表单, method=post表示发出post请求 -->
	<form action="http://localhost:8080/http/login" method="get">
	u: <input type="text" name="username"/><br/>
	p: <input type="password" name="pwd"/><br/>
	<input type="submit" value="用户登录"> <input type="reset" value="清空">
	</form>
</body>
</html>
  1. 创建 LoginServlet.java
    并完成配置
@WebServlet(urlPatterns = {"/login"})
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.print("<h1>POST登录成功~~</h1>");
        writer.flush();
        writer.close();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {

        //服务端输出
        System.out.println("LoginServlet doGet() 被调用");
        //输出一句话, 返回给浏览器
        //1. 通response 获取流 PrintWriter, 可以给浏览器回复数据
        //2. 为了让浏览器显示中文,需要告诉浏览器,我们的编码是utf-8
        //解读: (1) 给会送数据设置编码 (2) text/html这个是MIME即告诉浏览器返回的数据
        //是 text类型下的html格式数据【MIME类型 大类型/小类型】(3)charset=utf-8数据编码
        //小小细节: 设置编码格式要在 response.getWriter()之前!!
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.print("<h1>GET()登录成功~~</h1>");

        //为了确保数据返回,可以把 flush()和close()
        //程序员有强迫症,一般会写
        //flush() 方法表示将缓存的数据进行刷新
        writer.flush();
        //close() 表示关闭流,及时释放资源,  有些语言是 close() 有 flush()
        writer.close();


    }
}

  1. 完成测试,并抓包分析
    在这里插入图片描述

5. HTTP 请求包分析(POST)

● HTTP POST 请求方式案例

  1. 修改 login.html, 将提交方式改成 post

在这里插入图片描述

  1. 修改 LoginServlet.java
public class LoginServlet extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter writer = response.getWriter();
		writer.print("<h1>登录成功~</h1>");
		writer.flush();
		writer.close();
	}
}

● 完成测试, HTTP 请求包分析(POST)图
在这里插入图片描述

说明:
1.%E4%BB%8A%E5%A4%A9%E4%BD%A0%E5%AD%A6%E4%B9%A0%E4%BA%86%E5%90%97%EF%BC%9F 是 url 编码 , 在服务端会自动解码 . 测试一把 http://tool.chinaz.com/tools/urlencode.aspx
在这里插入图片描述
2.http请求会将User-Agent的信息也发给服务器端,其实不是很安全=》https会保护
3.Accept-Encoding:指定浏览器可以支持的web服务器返回内容压缩编码类型。数据量大时会有优化

6. GET 请求 POST 请求分别有哪些?

● GET 请求有哪些

  1. form 标签 method=get [指定]
  2. a 标签
  3. link 标签引入 css [以get方式来获取资源]
  4. Script 标签引入 js 文件 [以get方式来获取资源]
  5. img 标签引入图片 [以get请求来获取图片]
  6. iframe 引入 html 页面 [不演示]
  7. 在浏览器地址栏中输入地址后敲回车[用的比较多]
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <!--通过get请求获取my.css-->
    <link rel="stylesheet" href="css/my.css">
    <!--通过get请求获取my.js-->
    <script type="text/javascript" src="js/my.js"></script>
    <title>用户登录~</title>
</head>
<body>
<h1>用户登录</h1>
<!-- 给我们的LoginServlet发出Get请求提交表单, method=post表示发出post请求 -->
<form action="http://localhost:8080/http/login" method="get">
    u: <input type="text" name="username"/><br/>
    p: <input type="password" name="pwd"/><br/>
    <input type="submit" value="用户登录"> <input type="reset" value="清空">
</form>
<h1>GET请求演示</h1>
<a href="http://www.baidu.com">goto百度</a><br/>
<!-- 是get请求 -->
<img src="imgs/1.png" width="400px"/>
</body>
</html>

● POST 请求有哪些

  1. form 标签 method=post

● HTTP 请求中怎样选择 Get 和 Post 方式

说明:在大部分情况下,我们不需要考虑这个问题,因为业务本身就会自动区别,比如你要显示图片,引入 css/js 这个天然的就是 get 请求,比如你登录,发帖,上传文件, 你就会使用 post(感情的自然流露)

传输的数据大小区别

  1. get 传送的数据量较小。不能大于 2KB(不同浏览器不一样)。
  2. post 传送的数据量较大。一般默认不受限制。

什么情况下使用 post 请求

  1. post 请求是会在浏览器上隐藏參数部分的,在安全要求的部分都会使用到 POST 请求。如用户登录。数据增上改等等。都会把參数隐藏起来,这样就不会通过你的请求暴露你的參数格式。
    比方:del?id=1,别人就能够用 del?id=3 来删除你其它数据。

  2. 在向 server 传递数据较大的时候。使用 POST,get 是有限制的, 比如发帖, 上传文件

什么情况下使用 get 方式呢?

  1. 在前台页面展示,比如分页内容等,可以保留传递参数, 可用来非常好的分享和传播, POST 中链接地址是不变化的。
    在这里插入图片描述

建议:

  1. get 方式的安全性较 Post 方式要差些。包括机密信息的话。建议用 Post 数据提交方式;
  1. 在做数据查询时。建议用 Get 方式;而在做数据加入、改动或删除时,建议用 Post方式

7. HTTP 响应包分析

● HTTP 响应包括 3 个部分

  1. 响应行
  2. 响应头
  3. 响应体

● HTTP 响应包分析图
在这里插入图片描述

8. 常用的状态码说明

  • 状态行
  1. 格式: HTTP版本号 状态码 原因叙述
  2. 举例:HTTP/1.1 200 OK
  • 状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类,如下所示:
    在这里插入图片描述

8.1 HTTP 响应状态码说明、常见请求和响应头

阅览文档

8.2 演示 302 状态码使用

1.举例说明 302 状态码的使用

  1. 浏览器请求 T1Servelt
  2. T1Servlet 返回 302 的状态码, 并且指定浏览器重定向到 hi.html
  3. 浏览器发出第二次请求 hi.html

2.代码写完[看项目]

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>hi</title>
</head>
<body>
<h1>hi.html页面 你好~</h1>
</body>
</html>

@WebServlet(name = "Servlet_Re", value = "/T1Servelt")
public class T1Servlet extends HttpServlet {

    //这里我们把 doGet和doPost合并处理
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //如果有一个请求来
        //重定向到hi.html
        //(1) 返回302状态码 (2) 响应头Location:/hi.html
        //response.sendRedirect("/http/hi.html");
        response.sendRedirect("http://www.baidu.com");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}

3.测试抓包
在这里插入图片描述

8.3 演示 304 状态码使用

1.演示 304 状态码
当我们请求资源的时,服务器会返回该资源的最近修改时间
Last-Modified: Mon, 21 Feb 2022 04:51:31 GMT
如果浏览器禁用缓存, 这个 Last-Modified: 信息就没有使用, 浏览器就每次要求返回该资源

  1. 如果浏览器没有禁用缓存,浏览器在请求时,就会
    If-Modified-Since: Mon, 21 Feb 2022 04:51:31 GMT, 含义
    (1) 告诉服务器我有该资源
    (2) 该资源的最近修改时间是 Mon, 21 Feb 2022 04:51:31 GM

  2. 这时服务器就会比较时间,如果服务器的资源更新, 就会返回该资源 , 如果发现没有修改,就返回
    304 状态码(但是不会返回该资源) http 请求机制

9. MIME 类型

9.1 MIME 介绍

1.MIME 是 HTTP 协议中数据类型。 MIME 的英文全称是"Multipurpose Internet Mail Extensions" 多功能 Internet 邮件扩充服务。MIME 类型的格式是"大类型/小类型",并与某一种文件的扩展名相对应
2.在响应包的Content-Type 就有指定, 如图
在这里插入图片描述

9.2 常见的 MIME 类型

在这里插入图片描述

10. 作业

在这里插入图片描述

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

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

相关文章

leetcode 1372. Longest ZigZag Path in a Binary Tree(二叉树中最长的之字形路径)

找出最长的之字型路径长度。 可以选择从二叉树的任意一个节点出发。 路径长度为路径中的节点数-1. 思路&#xff1a; 符合DFS的特征。 方向是左右交替的&#xff0c;可以定义0&#xff0c;1两个方向。 如果当前方向是左&#xff0c;下一方向就是右&#xff0c;反之亦然。每次…

FinClip|小程序云开发的那点事儿

在开发一个小程序时&#xff0c;除了考虑界面功能逻辑外&#xff0c;还需要后端的数据支持&#xff0c;开发者需要提前考虑服务器、存储和数据库等相关需求的支持能力&#xff0c;此外还可能需要花费时间精力在部署应用、和依赖服务的建设上。 因此&#xff0c;微信小程序为了…

dolphinscheduler3.1.3版本代码编译运行方法

说明 该文档适用于dolphinscheduler 3.1.3-release版本。 一 环境准备 需要使用的环境包括JDK1.8&#xff0c;以及Maven 3.6以上的版本&#xff0c;这里使用低于3.6版本的Maven也可以调试运行&#xff0c;不过在打包的时候会有报错&#xff0c;最好使用高版本的maven。 二 …

数字IC笔试面试常考问题及答案汇总(内含各岗位大厂题目)

经历了无数的笔试面试之后&#xff0c;不知道大家有没有发现数字IC的笔试面试还是有很多共通之处和规律可循的。所以一定要掌握笔试面试常考的问题。 数字IC笔试面试常考问题及答案汇总&#xff08;文末可领全部哦~&#xff09; 验证方向&#xff08;部分题目&#xff09; Q1…

android studio APP工程的项目结构说明及创建

目录 1.APP工程的项目结构图 2.功能说明 2.1app 2.2Gradle Scripts 3.创建新的APP页面 补充&#xff1a; 1.APP工程的项目结构图 2.功能说明 该项目下两个分类&#xff1a;一个是app&#xff08;代表app模块&#xff09;;另一个是Gradle Scripts。 2.1app app下面有3个…

虚拟机安装Centos7,ping不通百度

虚拟机安装Centos7&#xff0c;ping不通百度 一、虚拟机网络配置 网络适配器选择桥接模式&#xff0c;不勾选复制物理网络连接状态。 同时虚拟机使用默认配置都是桥接。 二、配置静态IP 1、首先&#xff0c;查看宿主机的IP和网关 2、配置静态ip的文件地址及修改命令如下&…

mybatis分页插件的基本理解和使用

mybatis分页插件的基本理解和使用 为什么要使用mybatis分页插件&#xff1f; 分页是一种将所有数据分段展示给用户的技术。用户每次看到的不是全部数据&#xff0c;而是其中一部分&#xff0c;如果在其中没有找到自己想要的内容&#xff0c;用户可以通过制定页码或者是翻页的…

就业并想要长期发展选数字后端还是ic验证?

“就业并想要长期发展选数字后端还是ic验证&#xff1f;” 这是知乎上的一个热点问题&#xff0c;浏览量达到了13,183。看来有不少同学对这个问题感到疑惑。之前更新了数字后端&数字验证的诸多文章&#xff0c;从学习到职业发展&#xff0c;都写过&#xff0c;唯一没有做过…

CRM系统能帮助企业解决哪些问题?

随着信息化技术的不断发展和全球化的推进&#xff0c;市场竞争越来越激烈&#xff0c;客户需求也在不断变化。为了应对这种情况&#xff0c;越来越多的企业开始使用CRM系统来管理与客户的关系。那么&#xff0c;CRM系统到底解决了企业哪些问题呢&#xff1f; 一、提高客户满意…

亿发软件:传统食品饮料批发行业如何通过信息化管理系统降本增效?

传统食品饮料批发行业信息化水平较低&#xff0c;存在多重管理难题&#xff0c;例如&#xff1a; 手动数据输入和管理&#xff0c;导致错误和效率低下&#xff1b; 数据缺乏实时可见性&#xff0c;无法实时了解企业仓库存量、销售额和其他关键业务指标&#xff1b; 低效的供应链…

【Android】之【常用布局】

一、简介 Android常用布局分别是 1、线性布局LinearLayout 2、相对布局RelativeLayout 3、绝对布局AbsoluteLayout 4、帧布局FrameLayout 5、表格布局TableLayout 6、网格布局GridLayout 7、约束布局ConstraintLayout 二、详解 2.1. LinearLayout (线性布局) 线性布局是一种非…

Rabbit与springboot整合-1

目录 1、整体结构 2、pom引入 3、配置文件 4、代码 公共类 controller类 JSON转换类 监听-接收发送消息类 1、整体结构 2、pom引入 <!--rabbitmq--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-st…

C++引用与引用两大应用场景,临时变量的常性,常引用与权限大小问题

tips 内存栈区的用习惯是先使用高地址&#xff0c;然后使用低地址嘛顺序表数组支持随机下标访问&#xff0c;也是目前已知的仅有的数据结构类当中的话&#xff0c;它不可以不仅可以去定义变量&#xff0c;它也可以定义函数&#xff0c;这个跟c当中的结构体不一样的&#xff0c…

数据结构考研版——队列的配置问题

一、正常配置下的情况 队空状态 frontrear;入队操作 出队操作 队满状态 在正常配置下元素的个数&#xff08;rear>front&#xff09; 当rear<front 综上所述用一个表达式表示&#xff1a;(rear-frontmaxSize)%maxSize 二、非正常配置下的情况1 队空状态 入队操作…

Stable Diffusion-webUI ckpt模型、lora模型的区别和使用

一、常用的两种模型&#xff1a;ckpt和Lora分别是什么&#xff1f;有什么区别&#xff1f; 1、CKPT&#xff08;CheckPoint&#xff09; 经过训练的图片合集&#xff0c;被称作模型&#xff0c;也就是chekpoint&#xff0c;体积较大&#xff0c;一般真人版的单个模型的大小在…

StarRC的妙用

在整个R2G的流程里边&#xff0c;寄生参数抽取&#xff08;StarRC&#xff09;是比较没有存在感的。大部分的时间&#xff0c;工程师们只是用这个工具来刷SPEF。并不会关注太多。这本身其实是一个好事情&#xff0c;反向证明了参数抽取工具的高度稳定性&#xff01; 但是&#…

虚拟数字人的3种驱动方式

虚拟数字人是由计算机程序所构建的具有人类特征的虚拟实体&#xff0c;目前的虚拟数字人经过了三代的更迭&#xff0c;划分每一代更迭的标准则是虚拟数字人的驱动方式。 一、虚拟数字人1.0&#xff1a;动画&CG驱动 虚拟数字人1.0就是目前我们所熟知的&#xff0c;比如&am…

[NOIP2000 提高组] 进制转换

[NOIP2000 提高组] 进制转换 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置为指数,以 10为底数的幂之和的形式。例如 123 可表示为 10^22*10^13*10^0 这样的形式。 与之相似的&#xff0c;对二进制数来说&#xff0c;也可表示成…

运行时内存数据区之执行引擎(二)

JIT编译器 第一种是将源代码编译成字节码文件&#xff0c;然后在运行时通过解释器将字节码文件转为机器码执行。 第二种是编译执行&#xff08;直接编译成机器码&#xff09;。现代虚拟机为了提高执行效率&#xff0c;会使用即时编译技术(JIT,Just In Time)将方法编译成机器 …

北邮22信通:(13)二叉树 书上重要知识点补充 例4.3 统计结点总数 深度和叶子结点数

北邮22信通一枚~ 跟随课程进度每周更新数据结构与算法的代码和文章 持续关注作者 解锁更多邮苑信通专属代码~ 上一篇文章&#xff1a; 下一篇文章&#xff1a; 目录 一.统计结点总个数 二.统计二叉树深度 三.统计叶子结点总数 四.完整代码 4.1测试int存储类型&…