2024年计算机网络 — HTTP协议 和 HTTPS(1),2024年最新你不懂还不学

2024年计算机网络 — HTTP协议 和 HTTPS(1),2024年最新你不懂还不学HTTPS 也是一个应用层协议 是在 HTTP 协议的基础上引入了一个加密层 SSL TLS

大家好,欢迎来到IT知识分享网。

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

GET 和 POST 之间没有本质的区别

  1. 数据位置: GET 把自定义数据放到 query string, POST 把自定义数据放到 body
  2. 语义区别: GET 一般用于”获取数据”,POST 一般用于提交数据
  3. 幂等性: GET 请求一般会设计成”幂等”. POST 请求一般不要求设计成”幂等”(如果多次请求得到的结果一样, 就视为请求是幂等的)
  4. 可缓存: GET 请求一般会被缓存 POST 请求一般不能被缓存
4.4 其他相关方法
  • PUT 与 POST 相似,只是具有幂等特性,一般用于更新
  • DELETE 删除服务器指定资源
  • OPTIONS 返回服务器所支持的请求方法
  • HEAD 类似于GET,只不过响应体不返回,只返回响应头
  • TRACE 回显服务器端收到的请求,测试的时候会用到这个
  • CONNECT 预留,暂无使用

这些方法都可以使用ajax来构造.(也可以通过第三方工具).

4.2 认识请求报头 (header)

① Host

表示服务器主机的地址和端口

② Content-Length

表示 body 中的数据长度

③ Content-Type

表示 body 中的数据格式的类型

1) application/x-www-form-urlencoded
2) multipart/form-data:
3) application/json

在这里插入图片描述
body格式
在这里插入图片描述

④ User-Agent
⑤ Referer
⑥ Cookie

在这里插入图片描述

4.3 认识请求正文 (body)

① application/x-www-form-urlencoded

在这里插入图片描述

② multipart/form-data

在这里插入图片描述

③ application/json

在这里插入图片描述

5. HTTP 响应(Response)

5.1 认识状态码 (status code)

在这里插入图片描述

① 200 OK

这是一个最常见的状态码, 表示访问成功.

在这里插入图片描述

② 404 Not Found

没有找到资源.

在这里插入图片描述

③ 403 Forbidden

表示访问被拒绝. 有的页面通常需要用户具有一定的权限才能访问(登陆后才能访问). 如果用户没有登陆直接访问, 就容易见到 403.

在这里插入图片描述

在这里插入图片描述

④ 500 Internal Server Error
⑤ 302 Move temporarily

临时重定向.
重定向就和呼叫转移一样,
就是换了个手机号,别人呼叫你旧手机号,会自动转到新手机号上

在这里插入图片描述

5.2 认识响应正文 (body)

正文的具体格式取决于 Content-Type.

① text/html

body中的数据格式是 HTML

在这里插入图片描述

② text/css

body中的数据格式是css

③ application/javascript

body中的数据格式是javascript

④ application/json

body中的数据格式是json

6. 构造 HTTP 请求

6.1 通过 form 表单构造 HTTP 请求

① 构造 GET 请求

代码:

 <form action="http://www.baidu.com" method="GET"> <input type="text" name="user"> <input type="password" name="password"> <input type="submit" value="提交"> </form> 

在这里插入图片描述
当输入 wwww zzzz 提交之后进行抓包
在这里插入图片描述

② 构造 POST 请求
 <form action="http://www.baidu.com" method="POST"> <input type="text" name="user"> <input type="password" name="password"> <input type="submit" value="提交"> </form> 

6.2 通过 ajax 构造 HTTP 请求

① 发送 GET 请求
 <script> // 1. 创建 XMLHttpRequest 对象 let httpRequest = new XMLHttpRequest(); // 2. 默认异步处理响应. 需要挂在处理响应的回调函数. httpRequest.onreadystatechange = function () { // readState 表示当前的状态. // 0: 请求未初始化 // 1: 服务器连接已建立 // 2: 请求已接收 // 3: 请求处理中 // 4: 请求已完成,且响应已就绪 if (httpRequest.readyState == 4) { // status 属性获取 HTTP 响应状态码 console.log(httpRequest.status); // responseText 属性获取 HTTP 响应 body console.log(httpRequest.responseText); } } // 3. 调用 open 方法设置要访问的 url httpRequest.open('GET', 'http://42.192.83.143:8080/AjaxMockServer/info'); // 4. 调用 send 方法发送 http 请求 httpRequest.send(); </script> 
② 发送 POST 请求
 <script> // 1. 创建 XMLHttpRequest 对象 let httpRequest = new XMLHttpRequest(); // 2. 默认异步处理响应. 需要挂在处理响应的回调函数. httpRequest.onreadystatechange = function () { // readState 表示当前的状态. // 0: 请求未初始化 // 1: 服务器连接已建立 // 2: 请求已接收 // 3: 请求处理中 // 4: 请求已完成,且响应已就绪 if (httpRequest.readyState == 4) { // status 属性获取 HTTP 响应状态码 console.log(httpRequest.status); // responseText 属性获取 HTTP 响应 body console.log(httpRequest.responseText); } } // 3. 调用 open 方法设置要访问的 url httpRequest.open('POST', 'http://42.192.83.143:8080/AjaxMockServer/info'); // 4. 调用 setRequestHeader 设置请求头 httpRequest.setRequestHeader('Content-Type', 'application/x-www-formurlencoded'); // 5. 调用 send 方法发送 http 请求 httpRequest.send('name=zhangsan&age=18'); </script> 
③ 通过第三方库来封装 ajax
    <script src="https://releases.jquery.com/git/jquery-git.min.js"></script>
    <script>
        $.ajax({
            type: 'GET',
            url:'http://www.baidu.com/index.html',
            success: function(data, status){
                // data 是响应body status 是状态码描述
                console.log(status);
                console.log(data);
            }
        })
    </script>

6.3 通过 Java socket 构造 HTTP 请求

import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.nio.charset.StandardCharsets; public class HttpClient { private Socket socket; private String ip; private int port; public HttpClient(String ip,int port) throws IOException { socket = new Socket(ip,port); this.port = port; this.ip = ip; } 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"); // GET 不需要 body, 构造完毕 OutputStream outputStream = socket.getOutputStream(); // outputStream 是一个字节流,以字节为单位进行写入,因此需要把 StringBuilfer 转换乘byte[] outputStream.write(request.toString().getBytes()); // 读取响应 InputStream inputStream = socket.getInputStream(); // 1M 大小的缓冲区,用来存放响应数据 byte[] buffer = new byte[1024 \* 1024]; // n 表示实际上读到的字节数 int n = inputStream.read(buffer); return new String(buffer,0,n,"utf-8"); } 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-Type: text/plain\n"); request.append("Content-Length: " + body.getBytes().length + "\n"); // 构造空行 request.append("\n"); // 构造 body 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"); } public static void main(String[] args) throws IOException { HttpClient httpClient = new HttpClient("42.192.83.143",9090); String resp = httpClient.get("/AjaxMockServer/info"); System.out.println(resp); // String resp = httpClient.post("/AjaxMockServer/info","这是正文"); // System.out.println(resp); } } 

7. HTTPS

7.1 什么是 HTTPS

HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层(SSL/TLS).

7.2 为什么引入 HTTPS

因为HTTP是明文传输, 本来要传什么,实际上就传了什么,但是一旦这样传输,在传输的过程中, 被第三方截获到了,就可能造成信息泄露.

于是引入了 HTTPS在HTTP基础上进行了加密,进一步的保护了用户的信息安全.

明文: 真正要传输的信息
密文: 加密之后的消息
 
加密: 就是把 明文 (要传输的信息)进行一系列变换, 生成 密文 .
解密: 就是把 密文 再进行一系列变换, 还原成 明文 .
 
在这个加密和解密的过程中, 往往需要一个或者多个中间的数据, 辅助进行这个过程, 这样的数据称为 密钥





7.3 HTTP 的工作流程

① 引入对称加密

对称加密其实就是通过同一个 “密钥” , 把明文加密成密文, 并且也能把密文解密成明文.

解决办法: 对密钥进行加密传输.

② 引入非对称加密

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

tps://img-blog.csdnimg.cn/be4bb37135bd482cafbfdb05d883a4a8.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd3d6enp6enp6eno=,size_20,color_FFFFFF,t_70,g_se,x_16)

解决办法: 对密钥进行加密传输.

② 引入非对称加密

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/136907.html

(0)
上一篇 2025-06-24 14:33
下一篇 2025-06-24 14:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信