Silencer-1984 / Summary-of-front-end-work

总结包括一切关于前端学习的东西,面试、学英语、开发规范
0 stars 0 forks source link

HTTP 及 TLS #19

Open Silencer-1984 opened 3 years ago

Silencer-1984 commented 3 years ago

HTTP 请求中的内容

HTTP 请求由三部分构成,分别为:

Get和Post

后退按钮/刷新 无害 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
书签 可收藏为书签 不可收藏为书签
缓存 能被缓存 不能缓存
编码类型 application/x-www-form-urlencoded application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。
历史 参数保留在浏览器历史中。 参数不会保存在浏览器历史中。
对数据类型的限制 只允许 ASCII 字符(url编码)。 没有限制。也允许二进制数据。
可见性 数据在 URL 中对所有人都是可见的。 数据不会显示在 URL 中。

GET 和 POST 方法没有实质区别,只是报文格式不同。GET 和 POST 只是 HTTP 协议中两种请求方式,而 HTTP 协议是基于 TCP/IP 的应用层协议,无论 GET 还是 POST,用的都是同一个传输层协议,所以在传输上,没有区别。

因为get和post都是明文传输数据,所以它们都不安全。要想安全传输,就只有加密,也就是 HTTPS。

HTTP 和 TCP 区别

HTTP 状态码

HTTP 状态码为 3 位数,被归为 5 类:

2XX 成功

200 OK,表示从客户端发来的请求在服务器端被正确处理 204 No content,表示请求成功,但响应报文不含实体的主体部分 205 Reset Content,表示请求成功,但响应报文不含实体的主体部分,但是与 204 响应不同在于要求请求方重置内容 206 Partial Content,进行范围请求

3XX 重定向

301 moved permanently,永久性重定向,表示资源已被分配了新的 URL 302 found,临时性重定向,表示资源临时被分配了新的 URL 303 see other,表示资源存在着另一个 URL,应使用 GET 方法获取资源 304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况 307 temporary redirect,临时重定向,和302含义类似,但是期望客户端保持请求方法不变向新的地址发出请求

4XX 客户端错误

400 bad request,请求报文存在语法错误 401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息 403 forbidden,表示对请求资源的访问被服务器拒绝 404 not found,表示在服务器上没有找到请求的资源

5XX 服务器错误

500 internal sever error,表示服务器端在执行请求时发生了错误 501 Not Implemented,表示服务器不支持当前请求所需要的某个功能 503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求

HTTP 和 HTTPS 对比

TLS

在 TLS 中使用了两种加密技术,分别为:对称加密和非对称加密。

对称加密:

对称加密就是两边拥有相同的秘钥,两边都知道如何将密文加密解密。

这种加密方式固然很好,但是问题就在于如何让双方知道秘钥。因为传输数据都是走的网络,如果将秘钥通过网络的方式传递的话,一旦秘钥被截获就没有加密的意义的。

非对称加密:

有公钥私钥之分,公钥所有人都可以知道,可以将数据用公钥加密,但是将数据解密必须使用私钥解密,私钥只有分发公钥的一方才知道。 这种加密方式就可以完美解决对称加密存在的问题。假设现在两端需要使用对称加密,那么在这之前,可以先使用非对称加密交换秘钥。

简单流程如下:首先服务端将公钥公布出去,那么客户端也就知道公钥了。接下来客户端创建一个秘钥,然后通过公钥加密并发送给服务端,服务端接收到密文以后通过私钥解密出正确的秘钥,这时候两端就都知道秘钥是什么了。

HTTP1.0 和 HTTP1.1和HTTP2.0区别

  1. HTTP1.0比较基础只有get、post
  2. 1.1加入一些缓存,断点续传、支持长连接connction
  3. 压缩header、多路复用单个tcp可并行http请求、服务端推送

HTTPS加密过程

加密结合非对称加密和对称加密,大致过程是客获取公钥在加密。服务端用私钥解密生成随机码,之后使用随机码交流。

WebSocket和http区别

Silencer-1984 commented 3 years ago

fetch

当接收到一个代表错误的 HTTP 状态码时,从 fetch() 返回的 Promise 不会被标记为 reject, 即使响应的 HTTP 状态码是 404 或 500。相反,它会将 Promise 状态标记为 resolve (但是会将 resolve 的返回值的 ok 属性设置为 false ),仅当网络故障时或请求被阻止时,才会标记为 reject

Restful Api

传统api会把请求内容请求方式都放在url里面只会用get和post方法,Restful 会把当作一种资源标识,会用多个method方法。

http headers

常见的Request Headers

请求首部 作用
Accept 能正确接收的数据格式
Accept-Charset 能正确接收的字符集
Accept-Encoding 能正确接收的编码格式列表或者压缩格式如gzip
Accept-Language 能正确接收的语言列表
Connection 决定当前的事务完成后,是否会关闭网络连接,Keep-alive 一次tcp链接重复使用
Cookie 同域请求都会带
Host 服务器的域名
User-Agent 浏览器信息
Content-type 发送数据的格式如application/json

常见的Response Headers

响应首部 作用
Content-type 返回的数据格式如application/json
Content-length 返回的数据大小
Content-Encoding 返回的数据压缩算法如gzip
Set-Cookie 客户端重定向到某个 URL

自定义header

header可以自定义,通常用作权限验证

浏览器缓存header

可以设置浏览器网络缓存来缓存静态资源,通过在webpack设置js文件名+哈希值,每一次重新编译js就更换新的哈希名,这样就既能缓存也能更新新的文件。对于缓存用户强制刷新都是不生效的。

![image-20210512001425412](/Users/duzhihao/Library/Application Support/typora-user-images/image-20210512001425412.png)

Cache-Control强制缓存

在Response Headers中,由后端控制,用来控制强制缓存的逻辑,当设置了缓存且没有过期就不会重新请求直接使用缓存。Expires是以前的写法,已经被代替

http缓存-协商缓存

1620750396799 服务端判断数据是否更新,如果没有更新就返回304,更新就返回最新数据。

判断文件是否更新有两种方式,Last-Lodified(最后更新时间)和Etag(标识)。在Response Headers返回验证方式(可以同时存在)。在Request Headers中分别用If-Modified-Since、 If-None-Match把标识传给服务器,服务器判断标识是否改变。

一般推荐使用Etag方式,因为Last-Lodified只能精确到秒,而且资源被重复生成也会重新获取。Etag会更精确。

怎么请求取消