【网络原理】关于HTTP状态码以及请求的构造的哪些事

前言

🌟🌟本期讲解关于HTTP协议的重要的机制~~~

🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客

🔥 你的点赞就是小编不断更新的最大动力                                       

🎆那么废话不多说直接开整吧~~

目录

1.HTTP状态码

1.1引言

1.2状态码

1.3常见的状态码

2.HTTP请求构造

2.1通过第三方工具进行构造

1.PostMan的下载

2.登录PostMan 

3.创建一个http请求

2.2通过代码进行构造

1.实现初始化

 2.构造GET方法

3.构造POST方法

4.总结

2.3其他方法构造

1.form表单构造

修改上⾯的代码, 把 form 的 method 修改为 POST

2.ajax 构造

3.总结

1.HTTP状态码

1.1引言

我们在平时上网的时候,有没有过这种出现404 not found的情况,当然是存在的,但是为什么没有搜索的网页的时候,就会出现这个呢???其实这就是一个HTTP的状态码,所以接下来小编将带你解开这其中的奥秘~~

1.2状态码

状态码:所谓的状态码就是用于请求中响应的结果如何;

所有的状态码的种类:

但是这里的状态码有些不常用,所以下面小编就选择几个比较重要的给大家讲一讲

1.3常见的状态码

1.200 OK

这里表示就是访问成功了,访问顺利的;

这里我们可以在fiddler进行抓包看看:

这里表示就是访问ok了

2.404 NOT FOUND

这里表示通过URL的路径没有找到资源

假如我们随机搜索一个网址,很明显这是不存在的,那么就会出现一下:

当小编添加了后缀后,发现此时就出现了大大的404 Not Found,但是在bilibili中就能够发现出现的404就更加好看一点

 

3.403 Forbidden

这里表示就是你没有权限访问这个网页

4.405 Method Not Allowed

这里表示就是服务器允许收到GET,但是这边你发送了一个POST

5.500 Internal Server Error

这里表示就是服务器内部出现了错误,就是“挂了”

6.503 Gateway Timeout

表示访问服务器超时,要么服务器挂了,要么就是网络挂了; 

7.302 Move temporarily

表示就是重新定向,原来访问的网站A,然后自动跳转到网页B上面去了(跳转访问)

这里还有301永久重定向,主要是影响到浏览器的缓存,下次访问,直接访问这个最终的目标地址即可;

并且在响应的请求头中,这里就会设计到一个location,其中就描述了最终跳转定位的网址

总结:

学习状态码的意义

更加好的认识问题所在,来进行调试,尤其是在我们自己编写服务器的时候,我们需要按照状态码的含义来进行编写

2.HTTP请求构造

2.1通过第三方工具进行构造

1.PostMan的下载

首先在网址下载PostMan,那么这里的网址就是:Download Postman | Get Started for Free

2.登录PostMan 

3.创建一个http请求

点击进入workspace然后创建一个http请求,构造界面如下所示:

然后开始构造:

在下面就可以看到服务发送给我们的响应:

2.2通过代码进行构造

1.实现初始化

这里的实现和我们之前构造tcp的请求和响应大差不差,具体代码如下伸所示:

public class HttpClient {private Socket socket;private String ip;private int port;public HttpClient(String ip,int port) throws IOException {this.ip=ip;this.port=port;socket=new Socket(ip,port);//建立TCP的连接}

 解释:

首先规定端口,IP地址,以及socket:就像是一个通信端点,它允许在不同的计算机或同一台计算机上的不同进程之间进行双向通信。可以把它想象成一个电话插孔,通过它可以建立起连接并进行数据的传输和接收。

 2.构造GET方法

代码如下:

  public String get(String url) throws IOException {StringBuilder request=new StringBuilder();//进行拼接request.append("GET " + url + " HTTP/1.1\n");// 构造 headerrequest.append("Host: " + ip + ":" + port + "\n");// 构造 空⾏request.append("\n");// 发送数据OutputStream outputStream = socket.getOutputStream();outputStream.write(request.toString().getBytes());// 读取响应数据InputStream inputStream = socket.getInputStream();byte[] buffer = new byte[1024 * 1024];int n = inputStream.read(buffer);return new String(buffer, 0, n, "utf-8");}

解释:

给服务器发送一个GET方法构造的请求,主要是通过拼接字符串,然后通过文件流IO的形式进行发送(是以二进制的方式进行的),注意这里的request是一个对象,所以需要进行tostring,最后转化为字符串utf8的数据编码格式

3.构造POST方法
public String post(String url, String body) throws IOException {StringBuilder request = new StringBuilder();// 构造⾸⾏request.append("POST " + url + " HTTP/1.1\n");// 构造 headerrequest.append("Host: " + ip + ":" + port + "\n");request.append("Content-Length: " + body.getBytes().length + "\n");request.append("Content-Type: text/plain\n");// 构造 空⾏request.append("\n");//以及构造的正文request.append(body);//发送OutputStream outputStream= socket.getOutputStream();outputStream.write(request.toString().getBytes());InputStream inputStream = socket.getInputStream();byte[] buffer = new byte[1024 * 1024];int n = inputStream.read(buffer);return new String(buffer, 0, n, "utf-8");}

解释:

这里和上面的区别不大,也是通过stringbuilder来进行字符串的拼接,但是post一般来说是带有正文的,所以这里就需要额外添加body;最后通过发送数据,以及接收数据来完成POST方法的构造;

4.总结

上述的代码主要是使用的字符串拼接来实现的格式的构造,然后通过outputstream和inputstream来实现数据的发送以及接收,总体来说还是比较简单的;

2.3其他方法构造

这里是通过代码来进行构造的http请求,当时日常生活中还需要使用HTML/JS来进行HTTP请求的构造,这里就有两种常见前端构造的方式:

1.form表单构造

这里小编没有咋学习过前端代码,这里就稍微举个小小的例子:

<form action="http://abcdef.com/myPath" method="GET"><input type="text" name="userId"><input type="text" name="classId"><input type="submit" value="提交">
</form>

 解释:

form 的 action 属性对应 HTTP 请求的 URL
• form 的 method 属性对应 HTTP 请求的⽅法
• input 的 name 属性对应 query string 的 key
• input 的 内容 对应 query string 的 value

修改上⾯的代码, 把 form 的 method 修改为 POST

代码如下:

<form action="http://abcdef.com/myPath" method="GET"><input type="text" name="userId"><input type="text" name="classId"><input type="submit" value="提交">
</form>

主要的区别:

method 从 GET 变成了 POST
数据从 query string 移动到了 body 中.
2.ajax 构造

代码如下:

<script src="https://code.jquery.com/jquery-3.6.3.min.js"></script>
<script>$.ajax({type: 'get',url: 'https://www.sogou.com?studentName=zhangsan',// 此处 success 就声明了⼀个回调函数, 就会在服务器响应返回到浏览器的时候触发该回调// 正是此处的 回调 体现了 "异步"success: function(data) {// data 则是响应的正⽂部分. console.log("当服务器返回的响应到达浏览器之后, 浏览器触发该回调, 通知到咱们}});console.log("浏览器⽴即往下执⾏后续代码");
</script>

解释:

这里没有解释,小编也不知道~~~,且待小编学习完前端知识再次归来;

3.总结

小编本期主要是接着上一期进行,主要讲解了关于HTTP的状态码,以及如何进行构造HTTP的请求,主要有三个发那个面“通过第三工具postman”“java代码构造”“前端form以及ajax”,下期小编将进行HTTPS的章节,立即SSL加密机制;

🌅🌅🌅~~~~最后希望与诸君共勉,共同进步!!


💪💪💪以上就是本期内容了, 感兴趣的话,就关注小编吧。

                 😊😊  期待你的关注~~~

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

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

相关文章

Day13杨辉三角

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 class Solution {public List<List<Integer>> generate(int numRows) {List<List<Integer>> res new Arra…

Docker基本概念汇总(更全面了解Docker)

Docker是一种开源的平台&#xff0c;用于开发、部署和运行应用程序。它通过“容器”技术实现了轻量级虚拟化&#xff0c;使应用程序和其依赖项能够一起打包、部署并运行。以下是Docker基本概念的详细解释。 图片来源网络 1. Docker 容器&#xff08;Container&#xff09; 容…

OpenCV视觉分析之目标跟踪(8)目标跟踪函数CamShift()使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 找到物体的中心、大小和方向。 CamShift&#xff08;Continuously Adaptive Mean Shift&#xff09;是 OpenCV 中的一种目标跟踪算法&#xff0…

【每日刷题】Day151

【每日刷题】Day151 &#x1f955;个人主页&#xff1a; 开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 【模板】01背包_牛客题霸_牛客网 【模板】01背包_牛客题霸_牛客网 //思路&#xff1a;动态规划 #incl…

学习Vue之商城案例(代码+详解)

目前&#xff0c;我们学习Vue的一些基础的知识&#xff0c;那么就让我们做一个像下图这样简单的商城案例吧。 目录 通过脚手架创建项目 安装axios和bootstrap组件 安装axios和bootstrap 在保存的时候不进行格式化校验 初步定义App.vue文件 初步渲染组件页面 根据接口渲染…

【测试】【Debug】vscode中同一个测试用例出现重复

这种是正常的情况 当下面又出现一个 类似python_test->文件夹名->test_good ->test_pad 同一个测试用例出现两次&#xff0c;名称都相同&#xff0c;显然是重复了。那么如何解决&#xff1f; 这种情况是因为在终端利用“pip install pytest”安装 之后&#xff0c;又…

基于C++的决策树C4.5机器学习算法(不调包)

目前玩机器学习的小伙伴&#xff0c;上来就是使用现有的sklearn机器学习包&#xff0c;写两行代码&#xff0c;调调参数就能跑起来&#xff0c;看似方便&#xff0c;实则有时不利于个人能力发展&#xff0c;要知道现在公司需要的算法工程师&#xff0c;不仅仅只是会调参&#x…

Mac解决 zsh: command not found: ll

Mac解决 zsh: command not found: ll 文章目录 Mac解决 zsh: command not found: ll解决方法 解决方法 1.打开bash_profile 配置文件vim ~/.bash_profile2.在文件中添加配置&#xff1a;alias llls -alF键盘按下 I 键进入编辑模式3. alias llls -alF添加完配置后&#xff0c;按…

VBA10-处理Excel的动态数据区域

end获取数据边界 1、基本语法 1-1、示例&#xff1a; 2、配合row和column使用 2-1、示例1 2-2、示例2 此时&#xff0c;不管这个有数值的区域&#xff0c;怎么增加边界&#xff0c;对应的统计数据也会跟着变的&#xff01;

无人车之路径规划篇

无人车的路径规划是指在一定的环境模型基础上&#xff0c;给定无人车起始点和目标点后&#xff0c;按照性能指标规划出一条无碰撞、能安全到达目标点的有效路径。 一、路径规划的重要性 路径规划对于无人车的安全、高效运行至关重要。它不仅能够提高交通效率&#xff0c;减少交…

【前端基础】CSS基础

目标&#xff1a;掌握 CSS 属性基本写法&#xff0c;能够使用文字相关属性美化文章页。 01-CSS初体验 层叠样式表 (Cascading Style Sheets&#xff0c;缩写为 CSS&#xff09;&#xff0c;是一种 样式表 语言&#xff0c;用来描述 HTML 文档的呈现&#xff08;美化内容&#…

一种高度集成的数字化管理平台:城市管理综合执法系统(源码)

什么是城市管理综合执法系统&#xff1f; 城市管理综合执法系统是一种高度集成的数字化管理平台&#xff0c;它旨在通过整合信息技术资源&#xff0c;实现对城市环境、秩序、设施等多方面的综合管理和高效执法。 城市管理综合执法系统通常包含以下几个核心要素和功能&#xff…

【Python】强大的正则表达式工具:re模块详解与应用

强大的正则表达式工具&#xff1a;re模块详解与应用 在编程和数据处理中&#xff0c;字符串的处理是不可避免的一项任务。无论是从文本中提取信息、验证数据格式&#xff0c;还是进行复杂的替换操作&#xff0c;正则表达式&#xff08;Regular Expression&#xff0c;简称Rege…

计算机毕业设计Python+图神经网络手机推荐系统 手机价格预测 手机可视化 手机数据分析 手机爬虫 Django Flask Spark 知识图谱

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

03.DDD六边形架构

学习视频来源&#xff1a;DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 什么是依赖DDD四层架构六边形架构代码实现 想要详细了解六边形架构&#xff0c;可以看我之前的一篇文章。是对六边形架构原文的翻…

前端开发实现自定义勾选/自定义样式,可复选,可取消勾选

基于后端返回数组实现多选、复选 以下代码基于vue2&#xff0c;如果有需要React/Vue3或者其他框架代码的&#xff0c;可以通过国内直连GPT4o进行代码转换&#xff0c;转换正确率99% 前端代码如下(直接拷贝到你的vue代码即可)&#xff1a; <!-- CustomCheckboxList.vue --&g…

新型智慧城市顶层设计方案(118页word)

文档介绍&#xff1a; 新型智慧城市顶层设计方案是一种全局性、前瞻性的规划&#xff0c;旨在通过整合城市各类资源&#xff0c;运用新一代信息技术&#xff0c;推动城市治理、民生服务、产业发展等领域的全面升级&#xff0c;以实现城市的可持续发展和居民生活质量的提升。该…

nginx-proxy-manager实现反向代理+自动化证书(实战)

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 cnginx-proxy-manager实现反向代理自动化证书 nginx-proxy-manager是什么搭建nginx-proxy-manage…

定时器入门:Air780E定时器基础与进阶

今天我们学习的是Air780E定时器基础与进阶&#xff0c;让大家更深入的了解定时器。 一、定时器(timer)的概述 在Air780E模组搭载的LuatOS系统中&#xff0c;定时器&#xff08;timer&#xff09;是一项基础且关键的服务。它允许开发者在特定的时间点或周期性地执行代码段&…

C语言复习第7章 自定义类型(结构体+位段+枚举+联合体)

目录 一、结构体1.1 内置类型和自定义类型1.2 结构体的概念1.3 结构体基本的声明1.4 区分两种创建结构体变量的方式1.5 结构体变量的定义和初始化1.6 区分一下typdef和变量列表1.7 匿名结构体类型1.8 访问结构体成员1.9 修改字符数组成员变量的时候 要用strcpy1.10 结构体的传参…