jannahuang / blog

MIT License
0 stars 0 forks source link

HTTP 相关 #22

Open jannahuang opened 2 years ago

jannahuang commented 2 years ago

GET和POST的区别是什么

区别一:幂等性

区别二:请求参数

区别三:TCP packet

错误理解

GET 安全性低,POST 安全性高? GET 内容可以在地址栏看到参数,POST 内容可以在控制台查看。从传输角度来说,都是不安全的,因为 HTTP 在网络上是明文传输的,只要在网络节点上抓包,就能完整地获取数据报文。想要安全传输,只能用加密协议 HTTPS。 GET 传送的数据量较小,POST 传送的数据量较大? HTTP 协议没有 Body 和 URL 的长度限制,对 URL 限制的大多是浏览器和服务器的原因。服务器处理长 URL 会消耗较多资源,出于性能和安全考虑会限制 URL 长度。

HTTP 缓存有哪些方案

缓存(强缓存)

HTTP 1.0 时可用 Expires 字段为服务端返回的到期时间。即下一次请求时,请求时间小于服务端返回的到期时间,直接使用缓存数据。但问题是,到期时间是由服务端生成的,但是客户端时间可能跟服务端时间有误差,这就会导致缓存命中的误差。 所以 HTTP 1.1 的版本,使用 Cache-Control 替代。

Cache-Control 是最重要的规则。常见的取值有 no-cache、no-store、max-age、private、public,默认为private。

命中强制缓存的情况下,返回的HTTP状态码为200(from memory cache)。

HTTP 1.1

Cache-Control: max-age=3600 自动缓存一个小时,这时间内如果请求相同则直接返回缓存
Etag: ABC  Etag缓存文件的特征值,在缓存过期时,请求时用Etag查询缓存是否可用

HTTP 1.0

Expires: Wed, 21 Oct 2015 02:30:00 GMT
Last-Modified: Wed, 21 Oct 2015 01:00:00 GMT    

内容协商(弱缓存)

协商缓存,也称为对比缓存。协商缓存机制下,浏览器需要向服务器去询问缓存的相关信息,进而判断是重新发起请求、下载完整的响应,还是从本地获取缓存的资源。

如果服务端提示缓存资源未改动(Not Modified),资源会被重定向到浏览器缓存,这种情况下网络请求对应的状态码是 304 Not Modified。

HTTP 1.1

If-None-Match: ABC 响应状态码:304 或 200

HTTP 1.0

If-Modified-Since: Wed, 21 Oct 2015 01:00:00 GMT 响应状态码:304 或 200

参考http缓存详解

HTTP 和 HTTPS 的区别

网络协议是计算机之间为了实现网络通信而达成的一种“约定”或者”规则“,有了这种”约定“,不同厂商的生产设备,以及不同操作系统组成的计算机之间,就可以实现通信。 HTTP协议是超文本传输协议的缩写,英文是Hyper Text Transfer Protocol。它是从WEB服务器传输超文本标记语言(HTML)到本地浏览器的传送协议。

HTTP

HTTP(HyperText Transfer Protocol:超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。 简单来说就是一种发布和接收 HTML 页面的方法,被用于在 Web 浏览器和网站服务器之间传递信息。 HTTP 默认工作在 TCP 协议 80 端口,用户访问网站 http:// 打头的都是标准 HTTP 服务。 HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

HTTPS

HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议)是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。 HTTPS 默认工作在 TCP 协议443端口。

区别

三次握手和四次挥手是什么

建立 TCP 连接时 server 与 client 会经历三次握手 三次握手

  1. 浏览器向服务器发送 TCP 数据:SYN(seq=x) 第一次握手:第一次握手是客户端发送同步报文到服务端,这个时候客户端是知道自己具备发送数据的能力的,但是不知道服务端是否有接收和发送数据的能力;

  2. 服务器向浏览器发送 TCP 数据:ACK(seq=x+1) SYN(y) 第二次握手:当服务端接收到同步报文后,回复确认同步报文,此时服务端是知道客户端具有发送报文的能力,并且知道自己具有接收和发送数据的能力,但是并不知道客户端是否有接收数据的能力;

  3. 浏览器向服务器发送 TCP 数据:ACK(seq=y+1) 第三次握手:当客户端收到服务端的确认报文后,知道服务端具备接收和发送数据的能力,但是此时服务端并不知道自己具有接收的能力,所以还需要发送一个确认报文,告知服务端自己是具有接收能力的。

关闭 TCP 连接时 server 与 client 会经历四次挥手 四次挥手

  1. 浏览器向服务器发送 TCP 数据:FIN(seq=x) 第一次挥手客户端发起关闭连接的请求给服务端;

  2. 服务器向浏览器发送 TCP 数据:ACK(seq=x+1) 第二次挥手:服务端收到关闭请求的时候可能这个时候数据还没发送完,所以服务端会先回复一个确认报文,表示自己知道客户端想要关闭连接了,但是因为数据还没传输完,所以还需要等待;

  3. 服务器向浏览器发送 TCP 数据:FIN(seq=y) 第三次挥手:当数据传输完了,服务端会主动发送一个 FIN 报文,告诉客户端,表示数据已经发送完了,服务端这边准备关闭连接了。

  4. 浏览器向服务器发送 TCP 数据:ACK(seq=y+1) 第四次挥手:当客户端收到服务端的 FIN 报文过后,会回复一个 ACK 报文,告诉服务端自己知道了,再等待一会就关闭连接。

浏览器同源策略和跨域

同源是两个 URL 的协议、域名和端口完全相同相同。 只要在浏览器里打开页面,就默认遵守同源策略。postman 等请求工具则不受同源策略限制。 优点:保证用户信息的安全,防止恶意的网站窃取数据。 缺点:当前端需要访问另一个域名的后端接口时,浏览器会阻止其获取响应。此时就需要跨域。

跨域方法

JSONP

  1. A 站点利用 script 标签可以跨域的特性,向 B 站点发送 get 请求。
  2. B 站点改造 JS 文件的内容,将数据传进回调函数。
  3. A 站点通过回调函数获取 B 站点的数据。

CORS

Cookie、Session、LocalStorage、SessionStorage 的区别

Cookie 对比 LocalStorage

LocalStorage 对比 SessionStorage

Cookie 对比 Session

HTTP 1 和 HTTP 2 的区别