![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络
y果子
愿你成为自己的太阳,无需借助谁的光
展开
-
超时与重试机制
nginx 对于非幂等方法会在超时会有重试机制转载 2022-09-27 17:29:49 · 517 阅读 · 0 评论 -
SDK 和 API 的区别是什么?
https://www.zhihu.com/question/21691705转载 2021-10-11 14:30:00 · 124 阅读 · 0 评论 -
网关工作原理
网关(Gateway)就是一个网络连接到另一个网络的“关口”。也就是网络关卡。假设你的名字叫 小不点 (很小),你住在一个大院子里,你的邻居有很多小伙伴, 父母 是你的网关。当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声他的名字,他听到了就会回应你,并且跑出来跟你玩。但是你 家长不允许你走出大门,你想与外界发生的一切联系,都必须由父母(网关)用电话帮助你联系。假如你想找你的同学小明聊天,小明家住在很远的另外一个院子里,他家里也有父母(小明的网关)。但是你不知道小明家的电话号码,不过你的 班主任老师转载 2020-10-29 14:32:36 · 7875 阅读 · 4 评论 -
关于TCP/IP,必须知道的十个知识点
https://www.toutiao.com/i6570218601117123080/本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养。一、TCP/IP模型TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议。基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层、网络层、传输层和应用层。下图表示TCP/转载 2020-10-27 20:25:05 · 232 阅读 · 0 评论 -
mac 查看本机的IP地址
mac 查看本机的IP地址ifconfig | grep "inet " | grep -v 127.0.0.1原创 2020-09-10 21:08:35 · 308 阅读 · 0 评论 -
跨域发送 cookie
Web项目前后端分离开发时,经常会遇到跨域请求和跨域携带Cookie的相关问题:需要解决前端pc跟服务端(java),跨域后都能获取到同一个cookie。使用二级域名共享cookie有一个限制条件,就是两个域名的二级域名必须相同前端pc访问域名:a.b.com后端接口域名:a-gateway.b.com这两个域名同属一个二级域名:b.com跨域访问服务器nginx增加以下配置,即可解决跨域访问的问题。也可以在程序中通过代码解决跨域访问。nginx配置文件location / {原创 2020-07-29 15:25:52 · 826 阅读 · 0 评论 -
什么情况下需要发送 HTTP 方法为 OPTIONS 的 preflight 请求
在做项目时,很多时候发送一个post请求,是先发送一个option请求,然后再发送post请求,一直这么用之前也没有仔细思考,今天有时间,好好了解一下为什么会多一次请求。疑问1:什么是options请求OPTIONS请求方法的主要用途有两个:1、获取服务器支持的HTTP请求方法;2、用来检查服务器的性能。例如:AJAX进行跨域请求时的预检,需要向另外一个域名 的资源发送一个HTTP OPTIONS请求头,用以判断实际发送的请求是否安全。这是浏览器给我们加上的,后端并没有做任何操作。疑问2原创 2020-07-29 14:49:05 · 4973 阅读 · 0 评论 -
HTTP-8种请求类型
八种请求类型的介绍GET请求从服务器取回数据。只是取回数据,并不会产生其他影响。例如用GET请求访问/employee/101/张三,可以取回该员工的详细资料。请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:/test/demo_form.asp?name1=value1&name2=value2POST请求创建一个实体,也就是一个没有ID的资源。一旦这个请求成功执行了,就会在HTTP请求的响应中返回这个新创建的实体的ID。我们通常用POST请求来上传文件或者表原创 2020-07-29 11:44:45 · 9006 阅读 · 0 评论 -
浏览器跨域访问限制
一.什么是跨域广义的跨域:(1) 资源跳转:A链接、重定向、表单提交(2) 资源嵌入:<link>、<script>、<img>、<frame>等dom标签,还有样式中background:url()、@font-face()等文件外链(3) 脚本请求:js发起的ajax请求、dom和js对象的跨域操作等其实我们通常所说的跨域是狭义的,是由浏览器同源策略限制的一类请求场景。二.什么是浏览器跨域限制?本质是什么?所谓浏览器跨域限制,其实是为了数据安转载 2020-07-29 11:12:34 · 4884 阅读 · 2 评论 -
HTTP Header 中影响缓存的Header
通过HTTP Header控制缓存经常通过缓存技术来加快网站的访问速度,从而提升用户体验。HTTP协议中也规定了一些和缓存相关的Header,来允许浏览器或共享高速缓存缓存资源。这些Header包括:Last-Modified 和 If-Modified-SinceETag 和 If-None-MatchExpiresCache-Control以上Header又可以分成两种类型:协商缓存:浏览器发送验证到服务器,由服务器决定是否从缓存中读取,如 1 和 2 。强缓存:浏览器验证缓存的有转载 2020-07-28 19:13:35 · 1305 阅读 · 0 评论 -
HTTP--header
http: 超文本传输协议HTTP采用了请求响应模型,浏览器或者其它客户端发出请求,服务器给予响应。包括message-header,message-body俩部分。首先传递message-header,即http header消息。http header 消息通常分为四部分:general header,request header,response header,entity header。大体分为:Request和Response俩部分。Accept:表示客户端期望服务器返回的媒体格式。客户端期转载 2020-07-28 10:42:38 · 739 阅读 · 0 评论 -
HTTP状态码
HTTP状态码当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。HTTP状态码的英文为HTTP Status Code。下面是常见的HTTP状态码:200 - 请求成功301 - 资源(网页等)被永久转移到其它URL404 - 请求的资源(网页等)不存在500 - 内部服务器错误HTTP状态码分类HTTP状态码由三个十进制数字组成,第一个十原创 2020-07-27 20:24:20 · 90 阅读 · 0 评论 -
HTTPS 原理及实现
HTTPS 简介在日常互联网浏览网页时,我们接触到的大多都是 HTTP 协议,这种协议是未加密,即明文的。这使得 HTTP 协议在传输隐私数据时非常不安全。 Netscape 公司设计了 SSL(Secure Sockets Layer) 协议,用于对 HTTP 协议传输进行数据加密,即 HTTPS 。HTTPS 和HTTP 协议相比提供了:数据完整性:内容传输经过完整性校验数据隐私性:内...转载 2019-09-05 22:46:16 · 610 阅读 · 0 评论 -
3.Windows socket 程序演示
演示了 Linux 下的 socket 程序,看一下 Windows 下的 socket 程序。同样,server.cpp 为服务器端代码,client 为客户端代码。服务器端代码 server.cpp:#include <stdio.h>#include <winsock2.h>#pragma comment (lib, "ws2_32.lib") //加载 w...原创 2019-07-28 18:19:51 · 176 阅读 · 0 评论 -
2.Linux socket程序演示
Linux下的socket程序Linux 下的代码,server.cpp 是服务器端代码,client.cpp 是客户端代码,要实现的功能是:客户端从服务器读取一个字符串并打印出来。服务器端代码 server.cpp:#include <stdio.h>#include <string.h>#include <stdlib.h>#include ...原创 2019-07-28 17:56:32 · 96 阅读 · 0 评论 -
1.Socket简介
1. Socket简介在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。socket 的典型应用就是 Web 服务器和浏览器:浏览器获取用户输入的URL,向服务器发起请求,服务器分析接收到的URL,将对应的网页内容返回给浏览器,浏览器再经过解析和渲染,就将...原创 2019-07-28 16:50:50 · 151 阅读 · 0 评论 -
IOCP---完成端口(CompletionPort)
假若—个应用程序同时需要管理为数众多的套接字,那么“完成端口”模型。往往可以达到最佳的系统性能,然而不幸的是,该模型只适用于以下操作系统(微软的):Windows NT和Windows 2000操作系统。因其设计的复杂性,只有在应用程序需要同时管理数百乃至上千个套接字的时候、而且希望随着系统内安装的CPU数量的增多、应用程序的性能也可以线性提升,才应考虑采用“完成端口”模型。要记住的一个基本准则是...原创 2019-08-02 21:26:11 · 552 阅读 · 0 评论 -
3. IP:网际协议
I P是T C P / I P协议族中最为核心的协议。所有的 T C P、U D P、I C M P及I G M P数据都以I P数据报格式传输。I P提供不可靠、无连接的数据报传送服务。不可靠(u n r e l i a b l e)的意思是它不能保证 I P数据报能成功地到达目的地。 I P仅提供最好的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区, I P有一个简单的错误...原创 2019-07-21 14:29:40 · 174 阅读 · 0 评论 -
2. 链路层
在T C P / I P协议族中,链路层主要有三个目的(1)为I P模块发送和接收I P数据报;(2)为A R P模块发送A R P请求和接收A R P应答;(3)为R A R P发送R A R P请求和接收R A R P应答。2.1 以太网和IEEE 802封装以太网这个术语一般是指数字设备公司( Digital Equipment Corp.)、英特尔公司( I n t e lC o...原创 2019-07-21 14:01:24 · 90 阅读 · 0 评论 -
1. TCP/IP详解--概述
1.1 分层网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能。一个协议族,比如 T C P / I P,是一组不同层次上的多个协议的组合。 T C P / I P通常被认为是一个四层协议系统,如图 1 - 1所示。每一层负责不同的功能:1) 链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒...原创 2019-07-21 13:32:39 · 275 阅读 · 0 评论 -
21. 基于UDP的服务器端和客户端
UDP中的服务器端和客户端没有连接UDP不像TCP,无需在连接状态下交换数据,因此基于UDP的服务器端和客户端也无需经过连接过程。也就是说,不必调用 listen() 和 accept() 函数。UDP中只有创建套接字的过程和数据交换的过程。UDP服务器端和客户端均只需1个套接字TCP中,套接字是一对一的关系。如要向10个客户端提供服务,那么除了负责监听的套接字外,还需要创建10套接字。但在...原创 2019-07-29 21:49:41 · 197 阅读 · 0 评论 -
10. 实现迭代服务器和客户端
前面的程序,不管服务器端还是客户端,都有一个问题,就是处理完一个请求立即退出了,没有太大的实际意义。能不能像Web服务器那样一直接受客户端的请求呢?能,使用 while 循环即可。修改前面的回声程序,使服务器端可以不断响应客户端的请求。服务器端 server.cpp:#include <stdio.h>#include <WinSock2.h>#pragma co...原创 2019-07-29 14:42:17 · 151 阅读 · 0 评论 -
9. 回声客户端的实现
所谓“回声”,是指客户端向服务器发送一条数据,服务器再将数据原样返回给客户端,就像声音一样,遇到障碍物会被“反弹回来”。对!客户端也可以使用 write() / send() 函数向服务器发送数据,服务器也可以使用 read() / recv() 函数接收数据。将实现 Windows 下的回声程序,Linux 下稍作修改即可,不再给出代码。服务器端 server.cpp:#include ...原创 2019-07-29 14:25:35 · 272 阅读 · 0 评论 -
8. sockt数据的发送和接收
在 Linux 和 Windows 平台下,使用不同的函数发送和接收 socket 数据。Linux下数据的接收和发送Linux 不区分套接字文件和普通文件,使用 write() 可以向套接字中写入数据,使用 read() 可以从套接字中读取数据。前面我们说过,两台计算机之间的通信相当于两个套接字之间的通信,在服务器端用 write() 向套接字写入数据,客户端就能收到,然后再使用 rea...原创 2019-07-29 12:59:04 · 278 阅读 · 0 评论 -
7. 使用listen()和accept()函数
对于服务器端程序,使用 bind() 绑定套接字后,还需要使用 listen() 函数让套接字进入被动监听状态,再调用 accept() 函数,就可以随时响应客户端的请求了。listen() 函数通过 listen() 函数可以让套接字进入被动监听状态,它的原型为:int listen(int sock, int backlog); //Linuxint listen(SOCKET s...原创 2019-07-29 12:51:38 · 410 阅读 · 0 评论 -
6. 使用bind()和connect()函数
socket() 函数用来创建套接字,确定套接字的各种属性,然后服务器端要用 bind() 函数将套接字与特定的IP地址和端口绑定起来,只有这样,流经该IP地址和端口的数据才能交给套接字处理;而客户端要用 connect() 函数建立连接。bind() 函数bind() 函数的原型为:int bind(int sock, struct sockaddr *addr, socklen_t a...原创 2019-07-29 12:41:25 · 486 阅读 · 0 评论 -
5. 使用socket()函数创建套接字
在Linux中,一切都是文件,除了文本文件、源文件、二进制文件等,一个硬件设备也可以被映射为一个虚拟的文件,称为设备文件。例如,stdin 称为标准输入文件,它对应的硬件设备一般是键盘,stdout 称为标准输出文件,它对应的硬件设备一般是显示器。对于所有的文件,都可以使用 read() 函数读取数据,使用 write() 函数写入数据。“一切都是文件”的思想极大地简化了程序员的理解和操作,使得...原创 2019-07-29 12:20:58 · 567 阅读 · 0 评论 -
4. WSAStartup()函数以及DLL的加载
WinSock(Windows Socket)编程依赖于系统提供的动态链接库(DLL),有两个版本:较早的DLL是 wsock32.dll,大小为 28KB,对应的头文件为 winsock1.h;最新的DLL是ws2_32.dll,大小为 69KB,对应的头文件为 winsock2.h。几乎所有的 Windows 操作系统都已经支持 ws2_32.dll,包括个人操作系统 Windows...原创 2019-07-29 12:08:53 · 164 阅读 · 0 评论 -
TCP 拆包 ,粘包
TCP 协议(只有TCP有粘包现象,UDP永远不会粘包)TCP 是一个面向字节流的协议,它是性质是流式的,所以它并没有分段。就像水流一样,你没法知道什么时候开始,什么时候结束。所以他会根据当前的套接字缓冲区的情况进行拆包或是粘包。下图展示了一个 TCP 协议传输的过程:发送端的字节流都会先传入缓冲区,再通过网络传入到接收端的缓冲区中,最终由接收端获取。当我们发送两个完整包到接收...原创 2019-07-02 23:17:20 · 102 阅读 · 0 评论 -
11. socket 缓冲区以及阻塞模式
socket缓冲区每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。write()/send() 并不立即向网络中传输数据,而是先将数据写入缓冲区中,再由TCP协议将数据从缓冲区发送到目标机器。一旦将数据写入到缓冲区,函数就可以成功返回,不管它们有没有到达目标机器,也不管它们何时被发送到网络,这些都是TCP协议负责的事情。TCP协议独立于 write()/send()...原创 2019-07-29 14:51:25 · 109 阅读 · 0 评论 -
12. TCP的粘包问题以及数据的无边界性
由socket缓冲区和数据的传递过程,可以看到数据的接收和发送是无关的,read()/recv() 函数不管数据发送了多少次,都会尽可能多的接收数据。也就是说,read()/recv() 和 write()/send() 的执行次数可能不同。例如,write()/send() 重复执行三次,每次都发送字符串"abc",那么目标机器上的 read()/recv() 可能分三次接收,每次都接收"ab...原创 2019-07-29 15:07:15 · 103 阅读 · 0 评论 -
20. UDP套接字
TCP 是面向连接的传输协议,建立连接时要经过三次握手,断开连接时要经过四次握手,中间传输数据时也要回复ACK包确认,多种机制保证了数据能够正确到达,不会丢失或出错。UDP 是非连接的传输协议,没有建立连接和断开连接的过程,它只是简单地把数据丢到网络中,也不需要ACK包确认。UDP 传输数据就好像我们邮寄包裹,邮寄前需要填好寄件人和收件人地址,之后送到快递公司即可,但包裹是否正确送达、是否损坏...原创 2019-07-29 21:08:54 · 143 阅读 · 0 评论 -
19. 在socket 中使用域名
客户端中直接使用IP地址会有很大的弊端,一旦IP地址变化(IP地址会经常变动),客户端软件就会出现错误。而使用域名会方便很多,注册后的域名只要每年续费就永远属于自己的,更换IP地址时修改域名解析即可,不会影响软件的正常使用。关于域名注册、域名解析、host 文件、DNS 服务器等自行学习。重点讲解如何使用域名。通过域名获取IP地址域名仅仅是IP地址的一个助记符,目的是方便记忆,通过域名并不...原创 2019-07-29 21:06:10 · 3936 阅读 · 0 评论 -
18. socket 网络字节序 以及 大端序 小端序
不同CPU中,4字节整数1在内存空间的存储方式是不同的。4字节整数1可用2进制表示如下:00000000 00000000 00000000 00000001有些CPU以上面的顺序存储到内存,另外一些CPU则以倒序存储,如下所示:00000001 00000000 00000000 00000000若不考虑这些就收发数据会发生问题,因为保存顺序的不同意味着对接收数据的解析顺序也不同。...原创 2019-07-29 20:46:57 · 197 阅读 · 0 评论 -
17. socket 文件传输功能的实现
socket 文件传输程序,这是一个非常实用的例子。要实现的功能为:client 从 server 下载一个文件并保存到本地。编写这个程序需要注意两个问题:文件大小不确定,有可能比缓冲区大很多,调用一次 write()/send() 函数不能完成文件内容的发送。接收数据时也会遇到同样的情况。要解决这个问题,可以使用 while 循环,例如: //Server 代码 int nCoun...原创 2019-07-29 19:59:03 · 560 阅读 · 0 评论 -
16. 优雅的断开连接 --- shutdown()
调用 close()/closesocket() 函数意味着完全断开连接,即不能发送数据也不能接收数据,这种“生硬”的方式有时候会显得不太“优雅”。图1:close()/closesocket() 断开连接上图演示了两台正在进行双向通信的主机。主机A发送完数据后,单方面调用 close()/closesocket() 断开连接,之后主机A、B都不能再接受对方传输的数据。实际上,是完全无法调用...原创 2019-07-29 19:27:19 · 146 阅读 · 0 评论 -
15. TCP四次握手断开连接
建立连接非常重要,它是数据正确传输的前提;断开连接同样重要,它让计算机释放不再使用的资源。如果连接不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资源,如果并发量高,服务器压力堪忧。建立连接需要三次握手,断开连接需要四次握手,可以形象的比喻为下面的对话:[Shake 1] 套接字A:“任务处理完毕,我希望断开连接。”[Shake 2] 套接字B:“哦,是吗?请稍等,我...原创 2019-07-29 19:20:05 · 99 阅读 · 0 评论 -
14. TCP数据的传输过程
建立连接后,两台主机就可以相互传输数据了。如下图所示:图1:TCP 套接字的数据交换过程上图给出了主机A分2次(分2个数据包)向主机B传递200字节的过程。首先,主机A通过1个数据包发送100个字节的数据,数据包的 Seq 号设置为 1200。主机B为了确认这一点,向主机A发送 ACK 包,并将 Ack 号设置为 1301。为了保证数据准确到达,目标机器在收到数据包(包括SYN包、FIN包...原创 2019-07-29 15:24:31 · 263 阅读 · 0 评论 -
13. TCP数据包结构以及三次握手
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口、物理链路等正确无误,为数据的传输开辟通道。TCP建立连接时要传输三个数据包,俗称三次握手(Three-way Ha...原创 2019-07-29 15:17:53 · 744 阅读 · 0 评论 -
socket套接字
利用socket进行通信,把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。Socket是介于应用层和传输层之间。Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socke...原创 2019-07-02 22:41:14 · 247 阅读 · 0 评论