请求的三次握手和四次挥手
建立TCP连接,三次握手:
- 客户端发送连接请求报文
- 服务端接收连接后返回ACK报文,并为这次连接分配资源
- 客户端收到ACK报文,并分配资源
四次挥手:
- 客户端发起中断连接请求(FIN报文,告诉服务端没有数据要发送了,但服务端若要传输数据可以不着急关闭)
- 服务端发送ACK报文,告诉客户端服务端收到请求,但没准备好(客户端此时就进入FIN_WAIT状态,继续等待server端的fin报文)。
- 服务端确定数据已发送完成,则向客户端发送FIN报文,告诉客户端可以关闭链接了。
- 客户端接收FIN报文,准备关闭链接,但怕服务器不知道要关闭,所以再给服务端发送了一个ACK报文,服务端收到该报文就知道可以断开链接了。客户端一定时间内没有收到回应,知道客户端也可以关闭链接了。
https 协议
http和https的区别
http:互联网应用最广泛的网络协议,是一个客户端和服务端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,可以使浏览器更加高效。
https:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SLL。
主要区别:
- https需要到ca申请证书,一般免费证书较少,因而需要一定费用。
- http是超文本传输协议,是明文传输。https是使用ssl加密传输。
- http、https是用的是完全不同的连接方式,端口也不同。http是80,https是443
http的连接简单,是无状态的。https协议由ssl+http协议构建的加密传输、身份认证的网络协议,比http协议安全。
https的加密过程
客户端通过https的URL访问web服务器,要求与web服务器建立ssl连接。
- 服务器收到客户端请求后,会将网站的证书信息(含公钥)传送一份给客户端。
- 客户端与服务器协商ssl连接的安全等级,即信息加密的等级
- 客户端根据安全等级,建立会话密钥,利用网站公钥将密钥加密,并传输给服务器
- 服务器利用私钥解密会话密钥
-
HTTPS的优缺点
优点:
使用HTTPS协议可认证的用户和服务器,确保数据发送到正确的客户机和服务器
- HTTPS协议是由SSL+HTTP协议构建的。可进行加密传输、身份认证,比http安全,可以防止数据传输过程中不被窃取、改变,确保数据完整性。
- HTTPS是现行架构下最安全的解决方案,虽不是绝对安全(掌握根证书的机构、掌握加密算法),但大幅增加了中间人攻击的成本
- https加密的网站在SEO的排名将会更高
缺点:
- https协议握手阶段费时,页面加载时间会变长,增加好点
- https连接的缓存没有http高校,会增加数据开销和公号
- ssl证书需要费用
- ssl证书需要绑定IP,不能再同一IP上绑定多个域名,IPv4资源无法支撑该消耗
- HTTPS协议的加密范围也比较有限,黑客攻击、拒绝服务攻击、服务器劫持方面起不到什么作用。ssl证书的信用链体系并不安全,某些国家可以控制ca根证书。
get和post的区别
get、post底层都是TCP/IP协议,可以给get加上request body,也可以给post带上url参数。
由于http的规定和浏览器/服务器的限制,出现了一些不同:
- GET在浏览器回退不产生影响,POST会再次提交请求。
- GET请求会被浏览器主动cache,POST不会,除非手动设置。
- GET请求只能进行url编码,POST支持多种的编码字符方式。
- GET请求参数会被完整保留在浏览器历史记录里,POST的参数不会被保存。
- GET请求在URL中传送的参数有长度限制,http协议中没限制,主要是浏览器及服务器的限制。而post没有。
- get参数直接暴露在URL上,相对比起来post放在request body中更为安全。
- get产生一个TCP数据包,而post产生两个TCP数据包。(即post第一次打个招呼,第二次真正传输数据。)但不是所有浏览器都发两个,例如 Firefox 就只传输一次。且网络环境好的情况下,没有太大效率区别,网络不好的情况下,两次包的TCP在验证数据包完整性上,有更大的优势。
常见的http状态码
| 1xx | 信息,服务器收到请求,需要请求者继续执行操作 |
|---|---|
| 2xx | 成功,操作被成功接收并处理 |
| 3xx | 重定向,需要进一步的操作以完成请求 |
| 4xx | 客户端错误 |
| 5xx | 服务器错误 |
常见状态码:
- 200 - 成功
- 204 - 服务器处理了,但没有返回
- 300、301 - 重定向
- 400 - 客户端请求语法错误
- 401 - 服务端需要验证登录信息
- 403 - forbidden 服务端禁止直行该请求
- 404 - 资源不存在
- 405 - 请求的方式不对
- 500 - 服务端报错
- 502 - 作为网关或代理服务器从上游未接受到相应
- 504 - 请求超时
从输入 URL 到页面加载全过程

流程:
- 浏览器查找当前URL的DNS缓存
- DNS解析URL对应的IP
- 根据IP建立TCP连接(三次握手)
- HTTP发起请求
- 服务器处理请求,浏览器接收HTTP响应
- 渲染页面,构建DOM树
-
TCP和UDP的区别
参考回答:
TCP是面向连接的,udp是无连接的即发送数据前不需要先建立链接。
- TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。并且因为tcp可靠,面向连接,不会丢失数据因此适合大数据量的交换。
- TCP是面向字节流,UDP面向报文,并且网络出现拥塞不会使得发送速率降低(因 此会出现丢包,对实时的应用比如IP电话和视频会议等)。
- TCP只能是1对1的,UDP支持1对1,1对多。
- TCP的首部较大为20字节,而UDP只有8字节。
- TCP是面向连接的可靠性传输,而UDP是不可靠的。
WebSocket的实现和应用
参考回答:
- 什么是WebSocket?
WebSocket是HTML5中的协议,支持持久连续,http协议不支持持久性连接。Httpl.0 和HTTP1.1都不支持持久性的链接,HTTP1.1中的keep-alive,将多个http请求合并为1个
- WebSocket是什么样的协议,具体有什么优点?
HTTP的生命周期通过Request来界定,也就是Request 一个Response, 那么在Httpl.0 协议中,这次Http请 求就结束了。
在Http 1.1中进行了改进,是的有一个connection: Keep-alive,也就是说,在一个Http连接中,可以发送多个Request,接收多个Responseo 但是必须记住,在Http中一个Request只能对应有一个Response,而且这个Response 是被动的,不能主动发起
WebSocket是基于Http协议的,或者说借用了Http协议来完成一部分握手,在握手阶段与Http是相同的。我们来看一个websocket握手协议的实现,基本是2个属性,upgrade, connection。
基本请求如下:
GET/chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDLlEzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com
多了下面2个属性:
| 1 | Upgrade:webSocket |
|---|---|
| 2 | Connection:Upgrade |
告诉服务器发送的是websocket
| 1 | Sec-WebSocket-Kev: x3JJHMbDLlEzLkh9GBhXDw= |
|---|---|
| 2 | Sec-WebSocket-Protocol: chat, superchat |
| 3 | Sec-WebSocket-Version: 13 |
一个图片 url 访问后直接下载怎样实现?
请求的返回头里面,用于浏览器解析的重要参数就是 OSS 的 API 文档里面的返回 http 头,决定用户下载行为的参数。
下载的情况下:
1. x-oss-object-type:
Normal
2. x-oss-request-id:
598D5ED34F29D01FE2925F41
3. x-oss-storage-class:
Standard
说一下 web Quality(无障碍)
能够被残障人士使用的网站才能称得上一个易用的(易访问的)网站。
残障人士指的是那些带有残疾或者身体不健康的用户。
使用 alt 属性:
有时候浏览器会无法显示图像。具体的原因有:
用户关闭了图像显示
浏览器是不支持图形显示的迷你浏览器
浏览器是语音浏览器(供盲人和弱视人群使用)
如果您使用了 alt 属性,那么浏览器至少可以显示或读出有关图像的描述。
