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

这篇具有很好参考价值的文章主要介绍了【JavaEE】HTTP状态码-HTTP数据报的构造。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. HTTP状态码
  2. HTTP数据报的构造


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

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

1. HTTP状态码

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

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

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

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

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

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

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

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

1.1 200 - OK

  • 表示的是请求成功

抓包:

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

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

1.2 404 - Not Found

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

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

抓包:

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

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

  • 一些网站对应这些状态码的打印提醒比较独特
    【JavaEE】HTTP状态码-HTTP数据报的构造

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

1.3 403 - Forbidden

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

以码云为例:

  • 私有项目别人是没有权限访问的
    【JavaEE】HTTP状态码-HTTP数据报的构造

别人访问的话:

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

1.4 500 - Internal Server Error

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

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

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

博客片段:
【JavaEE】HTTP状态码-HTTP数据报的构造

1.5 504 - Gateway Timeout

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

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

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

1.6 302/301 重定向

302:Move temporarily 临时重定向

301:Moved Permanently 永久重定向

重定向是什么?

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

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

永久:以后都重定向


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

抓包:

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

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

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

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

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

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

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

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

  • teapot其实就是彩蛋的意思

在百度搜“黑洞”:
【JavaEE】HTTP状态码-HTTP数据报的构造

2. 构造HTTP请求

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

2.1 浏览器搜索栏输入url

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

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

2.2 HTML中,一些特殊标签

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

都是向网络索取资源的~

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

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

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

  • 本地资源就不会触发~

2.3 form表单

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

例子:

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

效果:

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

抓包:

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

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

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

不在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为例
  • 是一种标签形式的自定义数据格式
    【JavaEE】HTTP状态码-HTTP数据报的构造

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

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

Asynchronous,异步

  • synchronize,同步

同步异步的含义:

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

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

  • 用jQuery的ajax和api就好啦

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

即调用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:

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

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

抓包:

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

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

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

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

2.5 Postman

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

  • 有,使用一个软件—Postman

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

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

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

他甚至有对象 — Postwoman

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

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

操作流程:

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

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

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

创建标签页:

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

在这里构造http请求:

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

点击save改名:

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

选择请求的“方法”:

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

创造query string:

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

创造header:

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

构造body:

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

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

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

  • 但是响应是有cookie的~

获取响应:
【JavaEE】HTTP状态码-HTTP数据报的构造

fiddler抓包:

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

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

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

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

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

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

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

HTTP请求报文:

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

构造ajax:

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

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


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

HTTP的知识就讲到这里了,下一个章节:HTTPS~文章来源地址https://www.toymoban.com/news/detail-470606.html


到了这里,关于【JavaEE】HTTP状态码-HTTP数据报的构造的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【JavaEE】_ajax构造HTTP请求

    目录 1. ajax简述 2. ajax构造HTTP请求 2.1 jquery库的引入 2.2 ajax构造HTTP请求格式 3. ajax构造GET请求实例 4. ajax构造POST请求实例 本专栏关于form表单构造HTTP请求一文中已经提到:form表单构造法只支持GET和POST,且会触发页面跳转。 原文详情链接如下: 【JavaEE】_form表单构造HTTP请求-

    2024年02月22日
    浏览(32)
  • 第10天:基础入门-HTTP数据包&Postman构造&请求方法&请求头修改&状态码判断

    数据-方法头部状态码 常规请求-Get——访问网页获取资源 用户登录-Post——提交数据进行验证 head:与服务器索与 get 请求 一致的相应,响应体不会返回,获取包含在小消息头中的原信息(与get 请求类似,返回的响应中没有具体内容,用于获取报头) put:向指定资源位置上上

    2024年04月13日
    浏览(28)
  • 【JavaEE初阶】HTTP请求的构造及HTTPS

    常见的构造HTTP 请求的方式有以下几种: 直接通过浏览器地址栏, 输入一个 URL 就可以构造出一个 GET 请求. 直接点击收藏夹, 得到的也是 GET 请求. HTML 中的一些特殊标签也会触发 GET 请求, 如: link, script, img, a… 还可以通过 form 表单标签来实现 GET/POST 请求的构造. 通过 JS 中的 aj

    2024年02月15日
    浏览(30)
  • 010-基础入门-HTTP数据包&;Postman构造&;请求方法&;请求头修改&;状态码判断

    2、Cookie-身份替换 见上图 首先抓取PC浏览器网站登录上去的数据包 再抓取模拟机上登录失败的数据包 把数据包中的cookie进行替换,发现模拟机上从登陆失败变成登陆成功 结论: Response状态码 选中抓取数据包,发送至repeater( Repeater 是一个手动修改并补发个别 HTTP 请求,并分

    2024年04月23日
    浏览(28)
  • 学习JavaEE的日子 day12 构造方法 类的制作

    需求:创建人类的对象,并操作对象 分析: 人类 - Person 属性:name、sex、age 方法:eat、sleep 场景:创建多个对象,去操作对象 面向对象内存图: 注意: 1.class文件只加载一次 2.class文件中包含了该类中的所有信息(包含方法等) 3.new对象会在堆中开辟空间,存储成员变量 4.成员

    2024年01月17日
    浏览(40)
  • 关于http状态码302 请求重定向 前后端数据交互http302

    项目中前端都会统一处理后端返回的状态码给出提示需要在全配置axios拦截器 但是像302这种问题我们是捕捉不到的因为当状态是302时浏览器会根据redirectUrlt进行跳转 这就很难受 302表示临时性重定向 访问一个URL时被重定向到另一个url上 一般页面跳转时候会遇到 他与301的区别

    2024年02月16日
    浏览(23)
  • 计科web常见错误排错【HTTP状态404、导航栏无法点开、字符乱码及前后端数据传输呈现、jsp填写的数据传到数据库显示null、HTTP状态500】

    =======web排错记录====== 在使用javaweb的过程中会出现的一些错误请在下方目录查找。 目录 错误1:HTTP状态404——未找到 错误2:导航栏下拉菜单无法点开的问题 错误3:字符乱码问题 错误4:jsp网页全部都是??? 错误5:修改数据库后网页呈现无变化  错误6:jsp填写的数据传到

    2024年02月16日
    浏览(28)
  • flowable流程节点状态构造

    接口返回示例 前端展示效果

    2024年01月20日
    浏览(25)
  • JavaEE初阶:Java线程的状态

    目录 获取当前线程引用 休眠当前线程  线程的状态 1.NEW               2.TERMINATED  3.RUNNABLE 4.WAITING 5.TIMED_WAITING 6.BLOCKED 多线程的意义 单线程  多线程 这个方法返回当前线程的引用。但是我们会对static有疑惑,这其实是一个静态方法,更好的说法是这是一个 类方法, 调用这

    2024年02月11日
    浏览(30)
  • 【JavaEE】_线程的状态与转移

    目录 1. 线程的状态 1.1 NEW 1.2 RUNNABLE 1.3 BLOCKED 1.4 WAITING 1.5 TIMED_WAITING 1.6 TERMINATED  2. 线程状态的转移 在多线程Thread类相关一文中已经介绍过进程的状态:就绪状态与阻塞状态; 若需详情请查看原文,链接如下: 【JavaEE】_多线程Thread类及其常用方法-CSDN博客 这个状态决定

    2024年02月22日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包