常用的状态码
-
1XX
- 临时消息。服务器收到请求,需要请求者继续操作。 -
2XX
- 请求成功。请求成功收到,理解并处理。 -
3XX
- 重定向。需要进一步的操作以完成请求。 -
4XX
- 客户端错误。请求包含语法错误或无法完成请求。 -
5XX
- 服务器错误。服务器在处理请求的过程中发生了错误。
常见状态码:
200 OK
- 客户端请求成功
301
- 资源(网页等)被永久转移到其它URL
302
- 临时跳转
400 Bad Request
- 客户端请求有语法错误,不能被服务器所理解
404 - 请求资源不存在
,错误的URL。
500
- 服务器内部发生了不可预期的错误。
503 Server Unavailable
- 服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
讲一下TCP协议和UDP协议的区别和场景
我先说两个场景,大家可能就比较能理解了。
1) 第一个场景,浏览网页
。(TCP场景)
- 我们访问网页,网页肯定要把所有数据都正确的显示出来吧,如果这个过程中丢包了,那么肯定也会重新传包,不可能只显示一部分网页(保证数据正确性)
- 同样,网页中的内容肯定也需要是
顺序
的。比如我一个抽奖,不可能还没抽就把奖给你了。(保证数据的顺序) - 再来,在这个对数据要求严格的过程中,我们肯定需要两方建立起一个
可靠
的连接,也就是我们上述说到的要经过三次握手才开始传输数据,并且每次发数据包都需要回执(面向连接的) - 而这种连接中传输数据就是用的
字节流
,也就是有根管道,你想怎么传数据都行,想怎么接受数据也都可以,只要在这一根管道里面。
所以这种需要数据准确、顺序不能错、要求稳定可靠
的场景就需要用到TCP。
2)第二个场景,打游戏。(UDP场景)
打游戏最最重要的就是即时,不然我这个技能发出去了你那边还没被打中,这就玩不了了。
- 所以
UDP
是需要保证数据的即时性
,而不保证每个数据包都正确接收到,即使丢包了,也不会去找丢的那个是什么包,因为要显示当前时间的当前数据包。(不保证数据正确性和数据顺序,可能会丢包) - 同样,为了数据的即时性,
UDP
也就不会去建立连接了,不需要什么三次握手,每次你还要确认收没收到。管你收没收到,我只要快速把每个数据包丢给你就行了。(面向无连接的) - 因为是
无连接
的,所以就不需要用到字节流,直接每次丢一个数据报
给你,接收方也只能接受一个数据报(不能和其他发送方的数据报混淆)。(基于数据报的)
如果你还是有点晕,可以看看这篇文章(亚当和夏娃),很形象的比喻:
https://www.zhihu.com/question/51388497?sort=created
socket和WebSocket
虽然这两个货名字类似,但其实不是一个层级的概念。
-
socket
,套接字。上文说过了,在TCP建立连接的过程中,是调用了Socket的相关API,建立了这个连接通道。所以它只是一个接口,一个类。 -
WebSocket
,是和HTTP同等级,属于应用层协议。它是为了解决长时间通信的问题,由HTML5规范引出,是一种建立在TCP协议基础上的全双工通信的协议,同样下层也需要TCP建立连接,所以也需要socket。
科普:WebSocket在TCP连接建立后,还要通过Http进行一次握手,也就是通过Http发送一条GET请求消息给服务器,告诉服务器我要建立WebSocket连接了,你准备好哦,具体做法就是在头部信息中添加相关参数。然后服务器响应我知道了,并且将连接协议改成WebSocket,开始建立长连接。
如果硬要说这两者有关系,那就是WebSocket
协议也用到了TCP连接
,而TCP连接用到了Socket
的API。
Https的连接建立过程
说完了HTTP和TCP/IP,再说说HTTPS
。
上一篇文章说了HTTPS是怎么保证数据安全传输,链接
标签:请求,网络,TCP,基础知识,密钥,服务器,问答,连接,客户端 From: https://blog.51cto.com/u_15766933/5945621