计算机网络 --- HTTP协议 和 HTTPS,2024年最新Golang外包是如何进入阿里的

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Golang全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

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

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

如果你需要这些资料,可以添加V获取:vip1024b (备注go)
img

正文

② 使用 Fiddler 观察 GET请求

在浏览器中输入sogou.com
在这里插入图片描述
GET 请求的特点

  • 首行的第一部分为 GET
  • URL 的 query string 可以为空, 也可以不为空.
  • header 部分有若干个键值对结构.
  • body 部分为空.(可以不为空)

关于 GET 请求的 URL 长度问题
HTTP 协议由 RFC 2616 标准定义.没有对 URL 的长度有任何的限制

4.2 POST 方法
① 构造 HTTP POST 请求的情况
  1. form表单
  2. ajax
  3. 第三方工具
② 使用 Fiddler 观察 POST 请求

在这里插入图片描述
POST 请求的特点

  • 首行的第一部分为 POST
  • URL 的 query string 一般为空 (也可以不为空)
  • header 部分有若干个键值对结构.
  • body 部分一般不为空. body 内的数据格式通过 header 中的 Content-Type 指定. body 的长度由header 中的 Content-Length 指定.
4.3 面试题: 谈谈 GET 和 POST 的区别

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)

header 的整体的格式也是 “键值对” 结构
每个键值对占一行. 键和值之间使用分号分割

① Host

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

② Content-Length

表示 body 中的数据长度

③ Content-Type

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

1) application/x-www-form-urlencoded

在 form 表单提交的时候会出现的数据格式类型.
在这里插入图片描述
此时的body的格式
在这里插入图片描述

2) multipart/form-data:

通常用于提交图片/文件
在这里插入图片描述
body的格式
在这里插入图片描述

3) application/json

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

④ User-Agent

字段User-Agent会将创建请求的浏览器和用户代理名称等信息传达给服务器
在这里插入图片描述
这里的 Windows NT 10.0;WOW64 表示操作系统的信息
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 表示浏览器信息

⑤ Referer

表示这个页面是从哪个页面跳转过来的.
在这里插入图片描述
如果直接在浏览器中输入URL, 或者直接通过收藏夹访问页面时是没有 Referer 的

⑥ Cookie

因为HTTP是无状态的协议,无法根据之前的状态进行本次的请求处理
为了保留无状态协议这个特征,于是引入了 Cookie 信息来控制客户端的状态.
Cookie会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie.当下次再给该服务器发送请求的时候,客户端会自动在请求报文中加入Cookie值后发送出去.
服务器端发现客户端发送来的 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 请求

代码:

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

② 构造 POST 请求

同样的输入 wwww zzzzz 进行抓包
在这里插入图片描述

6.2 通过 ajax 构造 HTTP 请求

① 发送 GET 请求
② 发送 POST 请求
③ 通过第三方库来封装 ajax

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).

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

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
img

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

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

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
[外链图片转存中…(img-28Sql8Sy-1713243487845)]

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值