Open Silencer-1984 opened 3 years ago
当接收到一个代表错误的 HTTP 状态码时,从 fetch()
返回的 Promise 不会被标记为 reject, 即使响应的 HTTP 状态码是 404 或 500。相反,它会将 Promise 状态标记为 resolve (但是会将 resolve 的返回值的 ok
属性设置为 false ),仅当网络故障时或请求被阻止时,才会标记为 reject
传统api会把请求内容请求方式都放在url里面只会用get和post方法,Restful 会把当作一种资源标识,会用多个method方法。
请求首部 | 作用 |
---|---|
Accept | 能正确接收的数据格式 |
Accept-Charset | 能正确接收的字符集 |
Accept-Encoding | 能正确接收的编码格式列表或者压缩格式如gzip |
Accept-Language | 能正确接收的语言列表 |
Connection | 决定当前的事务完成后,是否会关闭网络连接,Keep-alive 一次tcp链接重复使用 |
Cookie | 同域请求都会带 |
Host | 服务器的域名 |
User-Agent | 浏览器信息 |
Content-type | 发送数据的格式如application/json |
响应首部 | 作用 |
---|---|
Content-type | 返回的数据格式如application/json |
Content-length | 返回的数据大小 |
Content-Encoding | 返回的数据压缩算法如gzip |
Set-Cookie | 客户端重定向到某个 URL |
header可以自定义,通常用作权限验证
可以设置浏览器网络缓存来缓存静态资源,通过在webpack设置js文件名+哈希值,每一次重新编译js就更换新的哈希名,这样就既能缓存也能更新新的文件。对于缓存用户强制刷新都是不生效的。
![image-20210512001425412](/Users/duzhihao/Library/Application Support/typora-user-images/image-20210512001425412.png)
在Response Headers中,由后端控制,用来控制强制缓存的逻辑,当设置了缓存且没有过期就不会重新请求直接使用缓存。Expires是以前的写法,已经被代替
服务端判断数据是否更新,如果没有更新就返回304,更新就返回最新数据。
判断文件是否更新有两种方式,Last-Lodified(最后更新时间)和Etag(标识)。在Response Headers返回验证方式(可以同时存在)。在Request Headers中分别用If-Modified-Since、 If-None-Match把标识传给服务器,服务器判断标识是否改变。
一般推荐使用Etag方式,因为Last-Lodified只能精确到秒,而且资源被重复生成也会重新获取。Etag会更精确。
HTTP 请求中的内容
HTTP 请求由三部分构成,分别为:
Get和Post
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区别
HTTPS加密过程
加密结合非对称加密和对称加密,大致过程是客获取公钥在加密。服务端用私钥解密生成随机码,之后使用随机码交流。
WebSocket和http区别