【网络原理】关于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");
        // 构造 header
        request.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");
        // 构造 header
        request.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加密机制;

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


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

                 😊😊  期待你的关注~~~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

苹果发布iOS 18.2首个公测版:Siri接入ChatGPT、iPhone 16拍照按钮有用了

今天凌晨&#xff0c;苹果正式发布了iOS 18.2首个公测版&#xff0c;将更多AI功能大批量推送给用户。其中最重要的就是Siri接入ChatGPT了&#xff0c;用户不必创建账户就可以免费使用ChatGPT&#xff0c;Siri将利用ChatGPT的专业知识回答用户问题&#xff0c;并在查询之前征求用…

前端 Canvas 绘画 总结

目录 一、使用案例 1、基础使用案例 2、基本案例改为直接JS实现 二、相关资料 1、API教程文档 2、炫酷案例 一、使用案例 1、基础使用案例 使用Canvas的基本步骤&#xff1a; 1、需要一个canvas标签 2、需要获取 画笔 对象 3、使用canvas提供的api进行绘图 <!--…

高级 <HarmonyOS主题课>借助AR引擎帮助应用实现虚拟与现实交互的能力的课后习题

持而盈之&#xff0c;不如其已&#xff1b; 揣而锐之&#xff0c;不可长保。 金玉满堂&#xff0c;莫之能守&#xff1b; 富贵而骄&#xff0c;自遗其咎。 功成身退&#xff0c;天之道也。 VR (Virtual Reality): 虚拟现实技术 AR (Augmented Reality): 增强现实) XR.(Extend…

tp接口 入口文件 500 错误原因

一、描述 二、可能的原因 1、runtime目录没权限 2、关闭了Tp记录日志的功能 3、关闭debug调试模式 4、关闭了debug模式还是报错 一、描述 Thinkphp项目本地正常&#xff0c;上传到线上后静态文件访问正常&#xff0c;访问tp接口报500错误。 经调试发现&#xff0c;在php入…

解决:ros进行gazebo仿真,rviz没有显示传感器数据

目录 前言解决总结 前言 看了很多urdf、xacro文件的编写&#xff0c;每次看了都觉得自己会了&#xff0c;然后自己写一点&#xff0c;就是废物了。 在我这里的案例是&#xff0c;我在一个大方块上面&#xff0c;添加了两个VLP-16的雷达&#xff0c;然后我想获取雷达扫描的数据…

C语言 | Leetcode C语言题解之第546题移除盒子

题目&#xff1a; 题解&#xff1a; int dp[100][100][100];int calculatePoints(int* boxes, int l, int r, int k) {if (l > r) {return 0;}if (dp[l][r][k] 0) {int r1 r, k1 k;while (r1 > l && boxes[r1] boxes[r1 - 1]) {r1--;k1;}dp[l][r][k] calcu…

基于开源 AI 智能名片、S2B2C 商城小程序的用户获取成本优化分析

摘要&#xff1a;本文围绕用户获取成本&#xff08;CAC&#xff09;这一关键指标展开深入剖析&#xff0c;详细阐述其计算方式&#xff0c;并紧密结合开源 AI 智能名片与 S2B2C 商城小程序的独特性质&#xff0c;从多个维度探讨如何通过挖掘新的获客渠道、巧妙运用私域流量池等…

实践出真知:MVEL表达式中for循环的坑

目录标题 背景MVEL脚本(有问题的)MVEL脚本(正确的)结论分析 背景 需要从一个URL的拼接参数中解析出id的值并输出 比如&#xff1a; 存在URLhttps://xxxxxxxxxx?id999999&type123&name345 然后需要输出id999999 MVEL脚本(有问题的) 入参&#xff1a;parseThisUrlhttp…

【C#】使用.net9在C#中向现有对象动态添加属性

在 C# 中向现有对象动态添加属性并不像在 Python 或 JavaScript 中那样容易&#xff0c;因为 C# 是一种强类型语言。 但是&#xff0c;我们可以通过使用一些技术和库来实现这一点&#xff0c;例如扩展方法、字典等。本文将详细介绍如何在 C# 中实现这一点。ExpandoObject 方法 …

工作流初始错误 泛微提交流程提示_泛微协同办公平台E-cology8.0版本后台维护手册(11)–系统参数设置

工作流初始错误 泛微提交流程提示_泛微协同办公平台E-cology8.0版本后台维护手册(11)–系统参数设置...-CSDN博客 工作流初始错误 泛微提交流程提示_泛微OA 工作流WebService接口使用说明 工作流初始错误 泛微提交流程提示_泛微OA 工作流WebService接口使用说明-CSDN博客 工作…

如何有效销售和应用低代码软件?探索其市场机会与策略

随着技术的进步&#xff0c;企业对自动化和数字化的需求日益增加。低代码开发平台应运而生&#xff0c;成为企业实现快速应用程序开发的重要工具。然而&#xff0c;在市场上推广和应用低代码软件并非易事&#xff0c;需要深入了解客户需求&#xff0c;提供定制化的解决方案&…

【css】overflow: hidden效果

1. 不添加overflow: hidden 1.1 效果 上面无圆角 1.2 代码 <template><view class"parent"><view class"child1">child1</view><view class"child2">child2</view></view></template><…

VB6.0桌面小程序(桌面音乐播放器)

干货源码 Imports System.IO Imports System.Security.Cryptography Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Button1.Text “上一曲” Button4.Text “播放” Button3.Text “下一曲” Button2.Text “顺序播…

Android MVVM demo(使用DataBinding,LiveData,Fresco,RecyclerView,Room,ViewModel 完成)

使用DataBinding&#xff0c;LiveData&#xff0c;Fresco&#xff0c;RecyclerView&#xff0c;Room&#xff0c;ViewModel 完成 玩Android 开放API-玩Android - wanandroid.com 接口使用的是下面的两个&#xff1a; https://www.wanandroid.com/banner/jsonhttps://www.wan…

协程4 --- 一个特殊的栈溢出例子

文章目录 代码运行结果分析 代码 先看下面这个程序流程&#xff1a; 有个长度位24的字符数组buffer&#xff0c;前面16个字符初始化。 把attack函数的地址复制到后面8个字符&#xff08;编译成64位程序&#xff0c;指针大小为8Byte&#xff09;。 打印信息&#xff1a;do Some…

day01 - web开发简介

本课程涉及到的技术&#xff1a; Vue ElementUI/Html Js SpringBoot–Spring SpringMvc MyBatis(Plus) SSM Axios 学习路径&#xff1a; 前端主要&#xff1a; Html5css3JavaScript(JQuery)–>Vue(Node.js也可以学习一 下&#xff0c;服务端js)ElementUi(uni-app) 后端主要…

简单又便宜的实现电脑远程开机唤醒方法

现有的远程开机方案 1&#xff09;使用向日葵开机棒 缺点是比较贵一点&#xff0c;开机棒要一百多&#xff0c;而且查了评论发现挺多差评说不稳定&#xff0c;会有断联和无法唤醒的情况&#xff0c;而且设置也麻烦&#xff0c;还需要网卡支持WOL 2&#xff09;使用远程开机卡 …

自攻螺钉的世纪演变:探索关键设计与应用

自攻螺钉作为现代工业和建筑中的不可或缺的标准部件&#xff0c;经过了超过100年的发展和创新。从1914年最早的铁螺钉设计到今天的自钻自攻螺钉&#xff0c;自攻螺钉的设计不断优化&#xff0c;以适应更复杂的应用需求。本文将回顾自攻螺钉的演变历程&#xff0c;分析其设计原理…

[复健计划][紫书]Chapter 7 暴力求解法

7.1 简单枚举 例7-1 Division uva725 输入正整数n&#xff0c;按从小到大的顺序输出所有形如abcde/fghij n的表达式&#xff0c;其中a&#xff5e;j恰好为数字0&#xff5e;9的一个排列&#xff08;可以有前导0&#xff09;&#xff0c;2≤n≤79。枚举fghij&#xff0c;验证a…

OpenBayes 一周速览丨Ministral-8B革新侧端AI新体验!PsyDTCorpus心理咨询数据集上线,含5k个数字孪生对话数据

公共资源速递 This Weekly Snapshots &#xff01; 5 个数据集&#xff1a; * Labelme 图像标注数据集 * TIMIT 英语方言录音数据集 * Food-101 食品图像数据集 * SVHN 真实世界图像数据集 * PsyDTCorpus 心理咨询师数字孪生数据集 1 个模型&#xff1a; * Allegro 3…