Socket
Socket:一套网络编程API,利用它可以建立网络连接
Socket(套接字):socket就是为网络服务提供的一种机制,通信的两端都是Socket,网络通信其实就是socket间的通信。
数据在两个socket间通过IO传输。
HTTP协议的协议传输实质就是Socket通信
Socket 原理
Socket 连接,至少需要一对套接字,分为 clientSocket,serverSocket 连接分为3个步骤:
- 服务器监听:服务器并不定位具体客户端的套接字,而是时刻处于监听状态;
- 客户端请求:客户端的套接字要描述它要连接的服务器的套接字,提供地址和端口号,然后向服务器套接字提出连接请求;
- 连接确认:当服务器套接字收到客户端套接字发来的请求后,就响应客户端套接字的请求,并建立一个新的线程,把服务器端的套接字的描述发给客户端。一旦客户端确认了此描述,就正式建立连接。而服务器套接字继续处于监听状态,继续接收其他客户端套接字的连接请求.
HTTP请求的特点:通信只能由客户端发起
所以,为了实现推送技术,很多技术方案都是轮询
轮询是指由浏览器每隔一段时间(如每几秒)向服务器发出HTTP请求,然后服务器返回最新的数据给客户端
http与socket的区别:
-
http是基于socket的实现;
-
http传输的数据格式是已经“规定好”的 socket实现数据传输是最原始的,socket实现数据传输格式可“自定义”;
-
Http协议:简单的对象访问协议,对应于应用层。Http协议是基于TCP链接的。
-
TCP协议:对应于传输层
-
IP协议:对应与网络层
-
TCP/IP是传输层协议,主要解决数据如何在网络中传输
-
而Http是应用层协议,主要解决如何包装数据。
-
Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。
-
Socket是对TCP/IP 协议的封装,Socket只是个接口不是协议,通过 Socket 我们才能使用TCP/IP 协议,除了 TCP,也可以使用 UDP 协议来传递数据。
-
Http连接:http连接就是所谓的短连接,及客户端向服务器发送一次请求,服务器端相应后连接即会断掉。
-
socket连接:socket连接及时所谓的长连接,理论上客户端和服务端一旦建立连接,则不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该链接已释放网络资源。所以当一个socket连接中没有数据的传输,那么为了位置连续的连接需要发送心跳消息,具体心跳消息格式是开发者自己定义的。
1.HTTP的长连接一般就只能坚持一分钟而已,而且是浏览器决定的,你的页面很难控制这个行为。
Socket连接就可以维持很久,几天、数月都有可能,只要网络不断、程序不结束,而且是可以编程灵活控制的。
2.HTTP连接是建立在Socket连接之上。在实际的网络栈中,Socket连接的确是HTTP连接的一部分。但是从HTTP协议看,它的连接一般是指它本身的那部分。
TCP/IP协议栈主要分为四层:应用层、传输层、网络层、数据链路层,
IP:网络层协议;(高速公路)
TCP和UDP:传输层协议;(卡车)
HTTP:应用层协议;(货物)。HTTP(超文本传输协议)是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议。客户端使用Web浏览器发起HTTP请求给Web服务器,Web服务器发送被请求的信息给客户端。
SOCKET:套接字,TCP/IP网络的API。(港口码头/车站)Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
WebSocket
为了能更好的节省服务器资源和带宽,并且能够更实时的进行通讯,HTML5规范中出现了WebSocket协议
WebSocket是基于TCP的,支持全双工通信的应用层协议
客户端、服务端,任何一方都可以主动发消息给对方
HTTP vs WebSocket
- HTTP和WebSocket属于平级关系,都是应用层的协议
TCP本身就是支持全双工通信的
只是HTTP是“请求-应答”模式,限制了TCP的能力
-
WebSocket使用80、443端口
-
与HTTP不同的是,WebSocket需要先建立连接
WebSocket - 建立连接
WebSocket需要借助HTTP协议来建立连接(也叫作握手,Handshake)
由客户端(浏览器)主动发出握手请求
HTTPDNS
HTTPDNS是基于HTTP协议向DNS服务器发送域名解析请求
可以避免Local DNS造成的域名劫持 和 跨网访问问题
FTP
File Transport Protocol,文件传输协议
是基于TCP的应用层协议
VPN(Virtual Private Network)
虚拟私人网络
俗称:科学上网
它可以在公共网络上建立专用网络,进行加密通讯
作用:
- 提高上网的安全性
- 保护公司内部资料
- 隐藏上网者的身份
- 突破网站的地域限制
- 突破网络封锁
VPN的实现原理:使用了隧道协议
网络爬虫
网络爬虫(Web Crawler)
也叫
网络蜘蛛(Web Spider)
模拟人类使用浏览器操作页面的行为,对页面进行相关的操作
常用爬虫工具:Python的Scrapy框架
缓存(Cache)
缓存,是指将服务器返回的数据,缓存在浏览器内存或者硬盘上
一般缓存的是GET请求的静态资源(比如HTML、CSS、JS、图片等)
缓存 - 响应头
Pragma:作用类似于Cache-Control
Expires: 缓存的过期时间(比如:2025年12月12日)
Cache-Control:设置缓存策略
- no-storage: 不缓存数据到本地
- public: 允许用户、代理服务器缓存数据到本地
- private:只允许用户缓存数据到本地
- max-age: 缓存的有效时间,单位秒(比如120秒)
- no-cache: 每次需要发请求给服务器询问缓存是否有变化,再来决定如何使用缓存
优先级: Pragma > Cache-Control > Expires
Last_Modified:资源的最后一次修改时间
ETag: 资源的唯一标识
优先级: ETag > Last_Modified