当前位置: 首页 > article >正文

【网络原理】关于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加密机制;

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


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

                 😊😊  期待你的关注~~~


http://www.kler.cn/a/388533.html

相关文章:

  • HelloMeme 上手即用教程
  • 图片画廊 day2 (可复制源码)
  • 第74期 | GPTSecurity周报
  • 基于迭代重加权最小二乘法的算法及例程
  • 基于yolov8、yolov5的番茄成熟度检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • Java设计模式面试题及参考答案
  • 扁平化在APP设计领域成了过眼云烟,3D拟物化又开始回归了。
  • WPF中的依赖属性
  • 「QT」几何数据类 之 QSizeF 浮点型尺寸类
  • 14、NAT和桥接区别
  • STM32F405RGT6单片机原理图、PCB免费分享
  • 智慧城市路面垃圾识别系统产品介绍方案
  • 学习记录:js算法(九十):N皇后
  • Spring Boot 的核心注解
  • SH3001六轴 学习1
  • 【Vue】-组件开发
  • 【Vue】Vue3.0(十八)Vue 3.0中‘props‘一种使用频率最高的通信方式(全面解析)
  • MML 中使用 libevent +std::async unix socket domain 进程间通信
  • RT-Thread 配置工具
  • 英国留学论文写作中复合句式基础知识讲解
  • 算法复杂度
  • 【SpringMVC】记录一次Bug——mvc:resources设置静态资源不过滤导致WEB-INF下的资源无法访问
  • W3C HTML 活动
  • springboot使用aop防御用户重复请求
  • Centos Linux 7 搭建邮件服务器(postfix + dovecot)
  • cv2.threshold利用OSTU方法分割图像的前景和背景