大家好,欢迎来到IT知识分享网。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以戳这里获取
GET 和 POST 之间没有本质的区别
- 数据位置: GET 把自定义数据放到 query string, POST 把自定义数据放到 body
- 语义区别: GET 一般用于”获取数据”,POST 一般用于提交数据
- 幂等性: GET 请求一般会设计成”幂等”. POST 请求一般不要求设计成”幂等”(如果多次请求得到的结果一样, 就视为请求是幂等的)
- 可缓存: 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 的工作流程
① 引入对称加密
对称加密其实就是通过同一个 “密钥” , 把明文加密成密文, 并且也能把密文解密成明文.
解决办法: 对密钥进行加密传输.
② 引入非对称加密
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加戳这里获取
一个人可以走的很快,但一群人才能走的更远!不论你是正从事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