【网络原理】关于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>
主要的区别:
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加密机制;
🌅🌅🌅~~~~最后希望与诸君共勉,共同进步!!
💪💪💪以上就是本期内容了, 感兴趣的话,就关注小编吧。
😊😊 期待你的关注~~~