JavaWeb系列八: WEB 开发通信协议(HTTP协议)

HTTP协议

  • 官方文档
  • 什么是HTTP协议
  • 快速入门
  • 页面请求的一个问题(分析)
  • http请求包分析(get)
  • http请求包分析(post)
  • GET请求 POST请求分别有哪些
  • http响应包分析
  • 常用的状态码说明
    • 状态码200
    • 状态码404
    • 状态码500
    • 状态码302
    • 状态码304
  • MIME类型
    • MIME介绍
    • 常见的 MIME 类型

在这里插入图片描述

官方文档

HTTP常见请求和响应头-说明.pdf

HTTP响应状态码说明.docx

什么是HTTP协议

1.超文本传输协议(HTTP, HyperText Transfer Protocol)是互联网上应用广泛的一种网络协议, 是工作在 tcp/ip协议基础上的, 所有的 www 文件都遵守这个标准.

2.http1.0 短连接; http1.1 长连接在这里插入图片描述

3.http 是 TCP/IP 协议的一个应用层协议, http 也是我们 web 开发的基础.

快速入门

1.看一个D:\idea_project\zzw_javaweb\zzw_servlet\web\http\hi.html
<h1>hello, http</h1>

2.使用火狐浏览器抓取 Http 请求和相应数据包
快捷键: ctrl+shift+i在这里插入图片描述

4.画出 http 请求 hi.html 的 UML时序图在这里插入图片描述

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

1.创建D:\idea_project\zzw_javaweb\zzw_servlet\web\http\test.html

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

2.当访问 test.html 页面时, 问浏览器发出几次 http 请求?

1 次, 2 次, 3 次
答: 一共 3 次

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

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

http请求包分析(get)

1.HTTP 请求包分析(GET)图, 说明 可以通过浏览器抓包分析

  • 请求行
  • 请求头

2.说明: HTTP请求(GET)-有数据提交情况 WEB程序员要学会分析 Http 包!

●案例说明
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

1)创建D:\idea_project\zzw_javaweb\zzw_servlet\web\http\login.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录</title>
</head>
<body>
<form action="../login" method="get">用户名: <input type="text" name="username" placeholder="用户名"><br>密 码: <input type="password" name="password" placeholder="密码"><br><input type="submit" value="登录"/><input type="reset" value="重置"/>
</form>
</body>
</html>

2)创建D:\idea_project\zzw_javaweb\zzw_servlet\src\com\zzw\http\LoginServlet.java并配置

public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("LoginServlet doGet method");//输出一句话,给浏览器//1.通过response获取流Print Writer,它可以给浏览器回复数据//2.为了让浏览器显示中文,需要告诉浏览器我们的编码是utf-8//解读: setContentType给回送数据设置编码//(1)text/html这个是MIME类型即告诉浏览器返回的数据是text类型下的html格式数据[MIME类型 大类型/小类型]//(2)charset=utf-8数据编码//细节: 设置编码格式要在.getWriter()之前response.setContentType("text/html; charset=utf-8");PrintWriter writer = response.getWriter();writer.print("<h1>登陆成功</h1>");//flush()会将缓存的数据刷新, 大多数语言的 close() 包含 flush()writer.flush();//close() 关闭流, 及时释放资源writer.close();}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}

web.xml

<servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.zzw.http.LoginServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/login</url-pattern>
</servlet-mapping>

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

http请求包分析(post)

●基本介绍
1.post请求带url参数接收时跟get一样,用 @RequestParam接收,body里面内容用 @RequestBody接收

2.GET 有限制,POST两个地方都可以

●案例说明

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

<form action="../login" method="post">用户名: <input type="text" name="username" placeholder="用户名"><br>密 码: <input type="password" name="password" placeholder="密码"><br><input type="submit" value="登录"/><input type="reset" value="重置"/>
</form>

2.修改D:\idea_project\zzw_javaweb\zzw_servlet\src\com\zzw\http\LoginServlet.java

public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//输出一句话,给浏览器//1.通过response获取流Print Writer,它可以给浏览器回复数据//2.为了让浏览器显示中文,需要告诉浏览器我们的编码是utf-8//解读: setContentType给回送数据设置编码//(1)text/html这个是MIME类型即告诉浏览器返回的数据是text类型下的html格式数据[MIME类型 大类型/小类型]//(2)charset=utf-8数据编码//细节: 设置编码格式要在.getWriter()之前response.setContentType("text/html; charset=utf-8");PrintWriter writer = response.getWriter();writer.print("<h1>登陆成功</h1>");//flush()会将缓存的数据刷新, 大多数语言的 close() 包含 flush()writer.flush();//close() 关闭流, 及时释放资源writer.close();}
}

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

●说明: %E9%9F%A9%E9%A1%BA%E5%B9%B3url 编码 , 在服务端会自动解码 . UrlEncode编码/解码

GET请求 POST请求分别有哪些

●GET请求有哪些

  1. form 标签 method=get
  2. a 标签
  3. link 标签引入 css[以get方式来获取资源]
  4. Script 标签引入 js[以get方式来获取资源]
  5. img标签引入css[以get方式来获取资源]
  6. 在浏览器地址栏中输入地址敲回车

●POST请求有哪些

  1. form 标签 method=post
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>login</title><link type="text/css" rel="stylesheet" href="css/my.css"><script type="text/javascript" src="js/my.js"></script>
</head>
<body>
<!--给LoginServlet发出Get请求-->
<form action="http://localhost:8080/http/login" method="post">username: <input type="text" name="username"/><br/>password: <input type="password" name="password"/><br/><input type="submit" value="登录"/>
</form>
<a href="http://www.baidu.com">goto百度</a>
<img src="imgs/1.png" width="245px">
</body>
</html>

●GET传输的数据大小区别

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

●什么情况下使用POST请求

  1. post请求是会在浏览器上隐藏参数部分的, 在安全要求的部分都会使用到POST请求, 比如用户登录, 数据增删改等等.都会把参数隐藏起来, 这样就不会通过请求暴露自己的参数格式
    比如: del?id=1, 别人就可以用del?id=2来删除你的其它数据
  2. 在向server传递的数据较大的时候, 使用POST, get是有限制的, 比如发帖, 上传文件

●什么情况下使用GET请求

  1. 在前台页面展示, 比如分页内容, 可以保留传递参数, 可用来非常好地分享和传播, POST中链接地址是不变化的
  2. get方式的安全性较post方式要差些, 包括机密信息的话, 建议使用post数据提交方式
  3. 在做数据查询时, 建议使用get方式; 而在做数据插入, 改动, 或删除时, 建议使用post方式

http响应包分析

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>login</title><link type="text/css" rel="stylesheet" href="css/my.css"><script type="text/javascript" src="js/my.js"></script>
</head>
<body>
<!--给LoginServlet发出Get请求-->
<form action="http://localhost:8888/http/login" method="post">username: <input type="text" name="username"/><br/>password: <input type="password" name="password"/><br/><input type="submit" value="登录"/>
</form>
<a href="http://www.baidu.com">goto百度</a>
<img src="imgs/1.png" width="245px">
</body>
</html>

在这里插入图片描述

常用的状态码说明

HTTP响应状态码说明

HTTP 常见请求和响应头-说明

状态码200

在这里插入图片描述

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

  • 200
    OK 请求成功。一般用于GET与POST请求
    在这里插入图片描述
    在这里插入图片描述

状态码404

Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

状态码500

服务器内部错误, 无法完成请求.
在这里插入图片描述
在这里插入图片描述

状态码302

  • 301
    Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
  • 302
    Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI

步骤

  1. 浏览器请求Status_302
  2. Status_302返回302的状态码, 并且指定浏览器重定向到login.html
  3. 浏览器发出第二次请求 访问login.html
  4. 浏览器测试抓包
    在这里插入图片描述
    在这里插入图片描述
public class Status_302 extends HttpServlet {//将两个请求合并@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//如果有一个请求来了// 重定向到servlet/login.html// (1)返回302状态码 (2)响应头会带上Location:/login.htmlresponse.sendRedirect("/servlet/login.html");//response.sendRedirect("http://www.baidu.com");}
}

状态码304

  • 304
    Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源

在这里插入图片描述

MIME类型

MIME介绍

MIME是HTTP协议中的数据类型. MIME的英文全称是"Multipurpose Internet Mail Extension", 即多功能Internet邮件扩展服务, MIME类型的格式是"大类型/小类型", 并与某一种文件的扩展名相对应

常见的 MIME 类型

文件MIME类型
超文本标记语言文本.html, .htm text/html
普通文本.txt text/plain
RTF文本.rtf application/rtf
GIF图形.gif image/gif
JPEG图形.jpeg, .jpg image/jpeg
au声音文件.au audio/basic
MIDI音乐文件.mid, midi audio/mid, audio/x-midi
RealAudio音乐文件.ra, .ram audio/x-pn-realaudio
MPEG文件.mpg, .mpeg video/mpeg
AVI文件.avi video/x-msvideo
GZIP文件.gz appcalition/x-gzip
TAR文件.tar application/x-tar

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

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

相关文章

七个值得收藏的资源网站,一定要码住~

1、壁纸网站&#xff1a;wallhere https://wallhere.com/ 这是一个免费的高清壁纸网站&#xff0c;各种类型的壁纸资源都有&#xff0c;高清无水印&#xff0c;每款壁纸都能下载到不同的尺寸&#xff0c;适应电脑、安卓手机和苹果手机的屏幕 2、电子书网站&#xff1a;熊猫搜…

java编写的界面可以调用python吗

如何使用Java调用Python程序 本文为大家介绍如何java调用python方法&#xff0c;供大家参考。 实际工程项目中可能会用到Java和python两种语言结合进行&#xff0c;这样就会涉及到一个问题&#xff0c;就是怎么用Java程序来调用已经写好的python脚本呢&#xff0c;一共有三种…

【源码+文档+调试讲解】牙科就诊管理系统

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本牙科就诊管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

学法减分题库最新版,分享几个简单试用的学习和搜题工具 #微信#经验分享#知识分享

告别繁琐的查询步骤&#xff0c;用我们的拍照搜题功能&#xff0c;只需几秒钟&#xff0c;答案就出现在你眼前&#xff0c;让学习变得更加高效便捷。 1.减分侠 这是个辅助学分减分的公众号 根据新的学法减分考试大纲&#xff0c;涵盖小车、客车、货车、摩托车&#xff0c;各…

【AI落地应用实战】如何高效检索与阅读论文——302.AI学术论文工具评测

一、引言 作为一名学术领域的探索者&#xff0c;我们都知道&#xff0c;检索和阅读论文是我们获取知识、启发思考、验证假设的基石&#xff0c;也是日常学习中必不可少的基本功之一。然而在浩瀚的学术海洋中&#xff0c;如何快速、准确地找到我们需要的论文&#xff0c;就像是…

史上最全涵盖在线离线nginx安装手册(含国产信创环境下麒麟V10)

下载安装包略 下载地址&#xff1a;http://nginx.org/download/nginx-版本.tar.gz 配合下载资源食用更佳 https://download.csdn.net/download/ProGram_BlackCat/89480431 安装 tar -zxvf nginx-1.16.1.tar.gz && cd nginx-1.16.1# 创建安装目录(默认路径↓) mkdir /u…

摩柏BI,轻松实现word报告自动更新

|| 导语 告别手工&#xff01;在数字化办公的今天&#xff0c;高效、准确的数据处理能力已经成为职场人士必备的技能之一。尤其是对于财务分析师、市场研究员和管理人员&#xff0c;他们需要处理的报告不仅数量庞大&#xff0c;而且对数据的准确性和实时性要求极高。传统WORD报…

指针(一)

指针基础 在C中&#xff0c;指针是至关重要的组成部分。它是C语言最强大的功能之一&#xff0c;也是最棘手的功能之一。 指针具有强大的能力&#xff0c;其本质是协助程序员完成内存的直接操纵。 指针&#xff1a;特定类型数据在内存中的存储地址&#xff0c;即内存地址。 …

计算机网络课程实训:局域网方案设计与实现(基于ensp)

文章目录 前言基本要求操作分公司1分公司2总部核心交换机配置实现内部服务器的搭建acl_deny部分用户与服务器出口出口防火墙配置 前言 本篇文章是小编实训部分内容&#xff0c;内容可能会有错误&#xff0c;另外ensp对电脑兼容性及其挑剔&#xff0c;在使用之前一定要安装好。…

大模型日报|8 篇必读的大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.M2Lingual&#xff1a;在大语言模型中加强多语言、多轮次的指令对齐 指令微调对于大语言模型&#xff08;LLM&#xff09;按照指令进行对齐至关重要。最近提出了许多有效的 IFT 数据集&#xff0c;但大多数数据集都…

七天速通javaSE:第一天 入门:Hello,Word与程序运行机制

文章目录 前言一、Hello&#xff0c;Word&#xff01;1.新建一个文件夹存放代码2.新建一个.java文件3.编写代码 二、编译与运行1.在控制台编译java文件2.运行class文件 三、java程序运行机制1.高级语言的分类1.1 编译型语言1.2 解释型语言 2.程序运行机制 四、IDEA五、代码规范…

lambdastreammaven

1.Lambda &#xff08;1&#xff09;Java 8 Lambda 表达式 在 Java 8 以前&#xff0c;若我们想要把某些功能传递给某个方法&#xff0c;总要去写内部类 或匿名内部类类。代码示例&#xff1a; list.sort(new Comparator<User>() { Override public int compare(User …

AWS IAM 通过策略设置,实现对账户及其访问密钥(AK/SK)的IP白名单限制

AWS IAM 通过策略设置&#xff0c;实现对账户及其访问密钥&#xff08;AK/SK&#xff09;的IP白名单限制&#xff0c;也算是best practices了。 {"Version": "2012-10-17","Statement": {"Effect": "Deny","Action&qu…

Linux显示服务器Wayland切换到X11

1、临时切换 &#xff1a; 注销当前用户账户&#xff0c;返回到登录屏幕。 在登录屏幕上&#xff0c;选择您要登录的用户账户。 在输入密码之前&#xff0c;在登录屏幕的右下角可能有一个齿轮图标&#xff0c;点击它以展开更多选项。 在选项中选择“Ubuntu on Xorg”或“Ubu…

Windows的FLAT内存模式

在基于x86的Windows系统中&#xff0c;在x86保护模式下&#xff0c;地址总线是32位的&#xff0c;所有通用寄存器都是32位的&#xff0c;间接寻址时不用分段就可以寻址4GB的地址空间。保护模式下&#xff0c;所有段的基地址都是0&#xff0c;段限长是0xFFFFFFFF。段寄存器存放段…

SQL 高频面试题

SQL 初级面试题及其详细解答&#xff1a; 1. 什么是 SQL&#xff1f;简要解释其用途。 解答&#xff1a; SQL&#xff08;结构化查询语言&#xff09;是一种用于管理和操作关系数据库的标准语言。它用于执行查询、更新、插入、删除和其他数据库操作&#xff0c;帮助用户从数据…

selenium之批量删除按钮操作

具体需求&#xff1a; 需要将某个列表项目中只保留一条数据&#xff0c;但是不确定有没有&#xff0c;所以需要先判断列表中有没有数据&#xff0c; 如果有数据查看是否大于1条&#xff0c;大于1条则删除到只有1条&#xff0c;只有一条则直接进行修改操作&#xff1b; 如果没有…

FTP 550 No such file or directory-

FTP is a simple method to upload files to the server. Although, it is rather easy to transfer files, FTP users often get stuck with errors. One such FTP error is “550 No such file or directory“. Broadly speaking, this error means that the file or folde…

2732. 找到矩阵中的好子集

题目 给你一个下标从 0 开始大小为 m x n 的二进制矩阵 grid。 从原矩阵中选出若干行构成一个行的非空子集&#xff0c;如果子集中任何一列的和至多为子集大小的一半&#xff0c;那么我们称这个子集是好子集。 更正式的&#xff0c;如果选出来的行子集大小&#xff08;即行的…

CNN-O-ELMNet: 优化的轻量化通用模型,用于肺部疾病分类和严重性评估| 文献速递-先进深度学习疾病诊断

Title 题目 CNN-O-ELMNet: Optimized Lightweight andGeneralized Model for Lung DiseaseClassification and Severity Assessment CNN-O-ELMNet: 优化的轻量化通用模型&#xff0c;用于肺部疾病分类和严重性评估 01 文献速递介绍 肺部疾病是全球主要的致残和死亡原因。根…