【JavaEE】HTTP状态码-HTTP数据报的构造

news2024/11/25 6:55:28
  1. HTTP状态码
  2. HTTP数据报的构造


在这里插入图片描述

文章目录

  • JavaEE & HTTP状态码 & HTTP数据报的构造
    • 1. HTTP状态码
      • 1.1 200 - OK
      • 1.2 404 - Not Found
      • 1.3 403 - Forbidden
      • 1.4 500 - Internal Server Error
      • 1.5 504 - Gateway Timeout
      • 1.6 302/301 重定向
    • 2. 构造HTTP请求
      • 2.1 浏览器搜索栏输入url
      • 2.2 HTML中,一些特殊标签
      • 2.3 form表单
      • 2.4 ajax【重要】
      • 2.5 Postman

JavaEE & HTTP状态码 & HTTP数据报的构造

1. HTTP状态码

c语言也学到了一个全局的变量errno,在一些内存函数或者文件操作的时候,这个变量会有所变化,如果程序出错了,这个变量对应的值就代表了对应的错误信息,【errno - error no(number)】,通过一些函数去解析这个错误码就可以了~

而HTTP的状态码,就是反应网页的状态的(正确以及错误…)

  • 比如你所熟知的404,就是找不到这个网页的意思~
    • 而浏览器一般遇到错误信息,页面是打不开的,就会打印状态码和错误信息
  • 当然,HTTP的状态码不仅仅只有这个,还有很多~

传送门1:HTTP 响应状态码 - HTTP | MDN (mozilla.org)

传送门2:HTTP 状态码 | 菜鸟教程 (runoob.com)

在这里插入图片描述

可见,状态码的数量很多很多,但是我们并不需要掌握那么多,我们只需要掌握大概的意思,以及个别常见的状态码的含义即可~

在这里插入图片描述

1.1 200 - OK

  • 表示的是请求成功

抓包:

在这里插入图片描述

  • 抓到很多状态码为200的包~

1.2 404 - Not Found

  • 表示访问的资源不存在~

在这里插入图片描述

抓包:

在这里插入图片描述

b站的404错误信息则是显示成这样的:

  • 一些网站对应这些状态码的打印提醒比较独特
    在这里插入图片描述

  • 这个响应的正文,就是这个页面~

1.3 403 - Forbidden

  • 表示的含义就是,访问被拒绝,没有权限

以码云为例:

  • 私有项目别人是没有权限访问的
    在这里插入图片描述

别人访问的话:

在这里插入图片描述

1.4 500 - Internal Server Error

  • 服务器内部错误
  • 在互联网上不容易见到,但是在你自己写代码的过程中,你的服务器经常bug,抛了异常没catch,就会500~

在我们写的第一个Servlet程序的时候,就演示过这个500

  • 所以我们写代码要catch,不然是直接让整个网页挂了,catch到服务器那显示错误信息打印日志就行了~

博客片段:
在这里插入图片描述

1.5 504 - Gateway Timeout

  • 表示服务器访问超时
  • 浏览器给服务器发请求,服务器要响应才对,如果这个等待请求的时间异常,就会504

这就是超时重传后,又又又超时的“放弃访问”

  • 热门的时间点,抢火车票的时候就可能会出现

1.6 302/301 重定向

302:Move temporarily 临时重定向

301:Moved Permanently 永久重定向

重定向是什么?

  • 有一个笑话:一个男孩给喜欢的女孩送早餐,然后这个女孩就将这份早餐送给她喜欢的男孩,这就是重定向
    • 如果这个男孩是个舔狗,这个女孩如果一直不告诉这个男孩这件事情,那么就是永久重定向,如果是良心发现,就是临时重定向~
  • 另一个例子:呼叫转移
    • 我原本的一个手机号:135xxxx,后来我改了手机号153xxxx,但是我的好友只知道我的旧号码呀,那么我们就可以到营业厅,做一个业务“呼叫转移”,好友拨打135xxxx重定向到153xxxx

临时:下次要不要继续重定向?不清楚

永久:以后都重定向


所以重定向就是,访问旧地址被自动引导到新地址上~

抓包:

  • 在学校一些教务系统上就有,因为有些是有旧版本的,所以要重定向到新版本

在这里插入图片描述

这些就是常见的状态码了,其他遇到了再去查~

在这里插入图片描述

传送门1:HTTP 响应状态码 - HTTP | MDN (mozilla.org)

传送门2:HTTP 状态码 | 菜鸟教程 (runoob.com)

HTTP协议的标准文档中,还有一个特殊的状态码,418(彩蛋,隐藏剧情)

在这里插入图片描述

  • teapot其实就是彩蛋的意思

在百度搜“黑洞”:
黑洞

2. 构造HTTP请求

  • 至于HTTP响应,就得有HTTP服务器和收到请求才行,在Tomcat,Servlet中我们重写对应方法,计算和设置响应信息后,就会帮我们发去客户端

2.1 浏览器搜索栏输入url

  • 这样就会构造出一个GET请求~

在这里插入图片描述

2.2 HTML中,一些特殊标签

  1. link标签
  2. script标签
  3. img标签
  4. a标签

都是向网络索取资源的~

以我们做过的博客系统页面为例子:

在这里插入图片描述

这就是script发出的一个GET请求,去网络上索取jQuery

  • 本地资源就不会触发~

2.3 form表单

  • HTML中,form标签页能构造请求(GET/POST…)

例子:

在这里插入图片描述

效果:

在这里插入图片描述

抓包:

在这里插入图片描述

  • 这个url问号后面的query string就是两个input的对应关系(由于没输入,所以是空值)~
    • name=value
  • 层级路径就是action
  • 方法就是method

构造POST:
在这里插入图片描述

不在query string,而是在body:这里aaa和abc对应空值,就是因为输入框我没输入数据~

而且它有个Content-Type:application/x-www-form-urlencoded

form只支持get和post方法,其他的put 、delet 、options都无能为力~

使用form的话,版本号固定是HTTP/1.1

2.4 ajax【重要】

  • 现在最主流的前后端交互方式之一

Ajax即Asynchronous Javascript And XML(异步JavaScript和XML)

  • 在 2005年被Jesse James Garrett提出的新术语,用来描述一种使用现有技术集合的‘新’方法,包括: HTML 或 XHTML, CSS, JavaScript, DOM, XML, XSLT, 以及最重要的XMLHttpRequest。使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。

XML

  • Servlet编程maven的pom.xml为例
  • 是一种标签形式的自定义数据格式
    在这里插入图片描述

html来说,支持哪些标签,是啥含义,是标准委员会规定的

而xml的标签都是自定义的~

Asynchronous,异步

  • synchronize,同步

同步异步的含义:

  1. 同步与互斥(加锁的场景)
  2. 同步与异步(IO的场景)
    • 同步:请求的发起者主动获取这个响应(从服务器拿来)
      • 这里的同步是指主动拿来之后就可以直接用这份响应,与原计划同步
    • 异步请求的发气质被动获取这个响应(服务器推送过来)
      • 这里的异步是指被动获取之后,不一定立即用到这份响应,排在计划后面,与原计划异步

js提供了原生的ajax的api,这个api贼难用(不讲)

  • 用jQuery的ajax和api就好啦

在这里插入图片描述

即调用ajax函数,传参是一个大括号包住的一个东西,就是JS中的“对象”

  • 而里面的success就是之前说将的“函数指针”,这也就是一个回调函数,就是在ajax代码体中合适的时间调用这个函数!
    • 即ajax代码中的某一段逻辑是未定义的,是由这个函数来定义的~
  • 这类似于C语言的函数指针,类似于Java传参中的”对象”(比如lambda表达式,run方法,迭代器,比较器…)

这也是异步的原因,因为这个是我们“丢个函数”进去,让浏览器调用这个ajax,发送一个请求,之后浏览器获取到正确响应后自动执行这个success函数,执行处理响应的一些逻辑(body就是响应的正文),将响应“喂”给我们的代码,这个过程我们是被动的~

/*测试代码*/
<script>
    // $ 即jQuery的别名
    $.ajax(
    {
        url: "https://www.baidu.com",
        type: "GET",
        data: "this is body",
        contentType: "text/plain",
        success: function(body) {
            //写处理响应的代码
            console.log(body);
        }
    }
);
</script>

打开html按f12:

在这里插入图片描述

  • 这个错误的原因是请求发都没有发:

抓包:

在这里插入图片描述

这个是属于ajax的一个非常典型的问题: “跨域问题”

  • 现在运行的ajax的代码的页面域名与ajax里面的请求访问的域名不一致的话,(不是要求路径一模一样,而是域名一样,不如百度页面发出的请求得是百度内部的,反正都是baidu.com),哪怕服务器给你响应了数据,浏览器还是不能处理这个数据,而是直接报错~
    • 这个不是bug,而是浏览器考虑到安全问题做出的限制
      • 一般页面的跳转也不需要用到ajax,用其他的就行了(form则没有这个限制)
    • 在以后,在自己的页面发请求给自己的服务器,自然不会出现这个 “跨域问题”~

构造HTTP请求,不仅仅是js可以构造,java也可以构造,C++也能,任何一个可以操作网络的语言,都可以构造http请求,所以爬虫不仅仅只有python能做到

2.5 Postman

前面的方法都是通过写代码去实现的,有没有一种方法,不写代码也能发送请求呢?

  • 有,使用一个软件—Postman

下载传送门:Download Postman | Get Started for Free

在这里插入图片描述

  • 然后注册账号登录一下~(云存档)

他甚至有对象 — Postwoman

  • 有兴趣的可以去了解一下

在这里插入图片描述

操作流程:

在这里插入图片描述

  • 你会发现创建不了public,但是可以创建其他,这是因为public不允许中文~
    • 改为英文/数字/其他字符既可以
    • 这里我把名字改为mara-ring

在这里插入图片描述

创建标签页:

在这里插入图片描述

在这里构造http请求:

在这里插入图片描述

点击save改名:

在这里插入图片描述

选择请求的“方法”:

在这里插入图片描述

创造query string:

在这里插入图片描述

创造header:

在这里插入图片描述

构造body:

  • 也可以模拟form表单请求的body
  • none—无body

在这里插入图片描述

由于不是浏览器,所以没有cookie设置也很正常

  • 但是响应是有cookie的~

获取响应:
在这里插入图片描述

fiddler抓包:

在这里插入图片描述

可见请求没有cookie,响应首行没有方法和url,只有版本号和状态码和状态码描述

  • 补充:HTTP响应的首行比请求的首行多了一个部分:就是空格分割的状态码和状态码描述

  • 因为这个软件不是浏览器~

如果你对http报文格式特别熟悉,那么Postman的使用就不是问题~

Postman还有一个特别牛的功能:自动生成代码

在这里插入图片描述

HTTP请求报文:

在这里插入图片描述

构造ajax:

在这里插入图片描述

后面不是Native的,前提是要安装对应的库!


文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭🦆

HTTP的知识就讲到这里了,下一个章节:HTTPS~


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

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

相关文章

Express应用之记账本项目总结

前言 在学完nodejs相关知识后第一个实践就是这个记账本项目&#xff0c;本篇文章是对项目遇到的问题的总结。 先聊聊技术栈&#xff1a; 前端技术&#xff1a;h5结合bootstrap框架&#xff1b; 后端技术&#xff1a;nodejsExpress框架lowdb数据库。 gitee地址&#xff1a;ht…

FinalShell界面左侧为什么能够监测系统指标动态变化的原理并用python实现

前言&#xff1a; 我们可以看出FinalShell是用Java写的&#xff0c;具体怎么看出来的&#xff0c;不能光看界面logo是Java的logo&#xff0c;还要进它的安装目录下进行查看是否真是用Java编写的&#xff01;&#xff01;&#xff01; 具体查看如下&#xff1a; 查看finalshe…

软件外包开发在线监测工具

软件系统上线后需要在线网络工具监测系统的运行&#xff0c;这样在系统出现故障时第一时间通知到系统维护人员&#xff0c;对于软件系统的稳定运行是必不可少的监测工具。今天和大家分享一些常用的在线监测工具&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#…

Vue.js 中的 TypeScript 支持是什么?如何使用 TypeScript?

Vue.js 中的 TypeScript 支持 Vue.js 是一款流行的前端框架&#xff0c;它提供了一种简单、灵活的方式来构建用户界面。随着 TypeScript 的普及&#xff0c;Vue.js 也开始支持 TypeScript&#xff0c;使得开发者可以使用类型检查等 TypeScript 特性来提高代码质量和可维护性。…

看完这篇卡尔曼滤波原理,我被惊到了!

在网上看了不少与卡尔曼滤波相关的博客、论文&#xff0c;要么是只谈理论、缺乏感性&#xff0c;或者有感性认识&#xff0c;缺乏理论推导。能兼顾二者的少之又少&#xff0c;直到我看到了国外的一篇博文&#xff0c;真的惊艳到我了&#xff0c;不得不佩服作者这种细致入微的精…

Vue-- 锚点实现左右两栏联动--scrollIntoView方法

官网&#xff1a;scrollintoView 通过滚动浏览器窗口或某个容器元素&#xff0c;调用元素就可以出现在视窗中。 利用scrollIntoView() 函数 默认是true document.getElementById(需要滚动的div的id).scrollIntoView() 如果给该方法传入true作为参数&#xff0c;或者不传入任何参…

什么是 Vue.js 中的 computed 属性?

什么是 Vue.js 中的 computed 属性&#xff1f; 在 Vue.js 中&#xff0c;computed 属性是一个非常重要的概念。它提供了一种方便的方式来计算和监听 Vue.js 实例中的属性&#xff0c;从而使得代码更加简洁、易于维护。在本文中&#xff0c;我们将详细介绍 computed 属性的原理…

【SVN】设置ubuntu下SVN服务开机自启

目录 0.背景环境 1.开机自启步骤 0.背景环境 1&#xff09;ubuntu下&#xff0c;已搭建好svn版本库&#xff0c;具体搭建方法参考文末的其他博客链接 2&#xff09;在搭svn服务器的过程中&#xff0c;发现ubuntu重启后&#xff0c;svn服务就关闭了 svn正常开启时见下图 所以…

ps技术的革命创新-photoshop beta版

Photoshop 2023 Beta功能介绍 全新的Generative Fill功能现已加入Photoshop Beta桌面应用程序&#xff0c;可以让用户在非破坏性的基础上轻松地添加、扩展或删除图像内容&#xff0c;实现令人惊喜、高兴和震撼的真实效果&#xff0c;仅需数秒。使用此功能&#xff0c;只需要选…

Java编程中必须掌握的抽象类和接口

抽象类与接口是J--a中两个重要的概念&#xff0c;都用于实现多态性和代码重用。在本文中&#xff0c;将会介绍这两个概念的特点以及如何使用它们来实现继承父类同时实现接口&#xff0c;还有接口的多继承。 老规矩&#xff0c;思维导图我已经整理好放在文末&#xff0c;需要自…

【ARM AMBA AXI 入门 1 - AXI 握手协议】

文章目录 1.1 AXI 双向握手机制简介1.1.1 信号列表1.1.2 双向握手目的1.1.3 握手过程 1.2 数据通路的握手要求1.2.1 读数据通路1.2.2 读地址通路1.2.3 写数据通路1.2.4 写地址通路1.2.5 写回复通路1.2.6 全信号 1.3 不同数据通路间的约束关系1.3.1 读操作约束关系1.3.2 写操作约…

怎么将pdf文件免费转为扫描件

推荐两个工具&#xff0c;也算是给自己记一下 1、手机&#xff1a;扫描全能王APP 太好使了&#xff0c;可以直接拍照并转换为扫描件 不开会员的话会出现水印&#xff0c;因为我都是自己用或者交作业就没开 支持读取相册&#xff0c;一次一张、多张都可以 如果不想要水印也…

Grafana 如何监控容器指标(五)

Grafana 如何监控容器指标(五) 1、添加cadvisor CAdvisor 是用于收集有关我们容器信息的常用工具。它是普罗米修斯和格拉法纳用来抓取信息和可视化图表、图表、时间序列和其他各种形式的信息的代理人。CAdvisor从我们的容器中收集各种指标&#xff0c;这些信息被普罗米修斯刮擦…

SQL了解之复制(二)

&#xff08;续&#xff09;从另一个master初始化slave 前面讨论的假设你是新安装的master和slave&#xff0c;所以&#xff0c;slave与master有相同的数据。但是&#xff0c;大多数情况却不是这样的&#xff0c;例如&#xff0c;你的master可能已经运行很久了&#xf…

Pads和AD画图哪个更好?

Mentor Pads和Altium Designer&#xff08;简称&#xff1a;AD&#xff09;是两种常用的电子设计软件&#xff0c;用于PCB设计&#xff0c;它们拥有各自的优势及适用场景&#xff0c;但如何根据项目来选择工具&#xff1f;下面将比对Pads和AD在不同方面的比较&#xff0c;希望对…

chatgpt赋能python:Python安装包制作入门教程

Python 安装包制作入门教程 Python 作为一门简单易学且适用范围广的编程语言&#xff0c;不仅可以运行在各种操作系统上&#xff0c;还能够通过制作安装包方便地分享给其他人使用。本文将介绍如何使用 Python 的一些工具来制作安装包&#xff0c;以帮助 Python 开发者更加便捷…

VFP下载公众号消息图片,小白入门DAY2

封面张终于放正了。 VFP接收到的消息如下 <xml><ToUserName><![CDATA[gh_63145a34e897]]></ToUserName> <FromUserName><![CDATA[oljsK6OgHA9ftJxuCUWg7cFylj6Y]]></FromUserName> <CreateTime>1685926602</CreateTime>…

设置float后,按钮遇上position: relative点击失效

1 问题&#xff1a;设置button浮动到右边之后&#xff0c;button上的onClick事件无法触发 "点击"按钮点不了 2 原因&#xff1a;button浮动到右边之后&#xff0c;下面的div填补上来&#xff0c;但是下面的div设置了position: relative&#xff0c;结果下面的div直接…

“AI Earth”人工智能创新挑战赛:助力精准气象和海洋预测Baseline[3]:TCNN+RNN模型、SA-ConvLSTM模型

【机器学习入门与实践】入门必看系列,含数据挖掘项目实战:模型融合、特征优化、特征降维、探索性分析等,实战带你掌握机器学习数据挖掘 专栏详细介绍:【机器学习入门与实践】合集入门必看系列,含数据挖掘项目实战:数据融合、特征优化、特征降维、探索性分析等,实战带你掌…

ChatGPT 创业:如何用人工智能 AI 开一家赚钱的公司

这是一篇演示如何使用 ChatGPT prompt &#xff08;提示词&#xff09;的文章。 在了解 ChatGPT 的文案写作能力后&#xff0c;我产生了一个念头&#xff0c;如果让它来写一篇命题作文&#xff0c;会是怎样&#xff1f; Prompt 提示词&#xff0c;和人工智能 AI 对话中一个重要…