http 知识整理

news2024/11/19 7:42:01

1. 启发式缓存

在不设置cache-control/expires的情况下,浏览器不会默认进入协商缓存。而是根据Date/LastModified去自动计算出合适的缓存时间。
计算方式为:(Date - LastModified) * n
n:LM-Factor,处于[0,1]之间

2. 强制缓存 ---- 再次请求时无需向浏览器发送请求。

Cache-control: 具有强大的缓存控制能力;
常用值:no-cache: 每次请求需要校验服务器资源的新鲜度
max-age=31536000: 浏览器在一年内都不需要像服务器请求资源。
Expires: 使用绝对时间。

3. 协商缓存 ---- 再次请求时需要向服务器校验新鲜度。若新鲜,返回304,从浏览器获取。

Last-Modified/If-Modified-Since: 匹配响应头的Last-Modified与请求头的If-Modified-Since是否一致。
Etag/If-None-Match: 匹配响应头中的Etag与请求头中的If-None-Match是否一致。

4. Last-Modified 局限性

a. 时间精度只有秒级别,但某文件在一秒内可以被更改n次。
b. 某一文件经过修改后但内容并未发生改变。(比如添加一行再删除一行)

5. Etag — Last-Modified的‘补丁’,精度更高。

针对文件内容进行hash计算,得到的hash值作为Etag的值。

6. 图片防盗链

a. Referer: 标识网页来源地址。
原理:通过判断referer来验证访问是否合法,不合法则返回403,禁止访问图片。
b. 给图片添加水印。

7. 防止图片防盗链

不发referer请求头,两种方式:
a. 直接浏览器输入url,自动不会携带referer。
b.Referrer-Policy设置不发送Referer请求头: Referrer-Policy: no-referrer

8. User-Agent

标识客户端,简称UA.
通过该头可获取到所用浏览器、浏览器版本、操作系统等信息。

9. 浏览器如何判断PC/Mobile

推荐库:https://github.com/kaimallea/isMobile

10. 项目缓存策略

对带有hash值的文件资源设置一年强缓存;(当源文件内容发生变更时,hash值发生改变,生成新的可永久缓存的资源地址,此时打包会遍历文件,更新缓存地址并清除掉旧缓存)。
对不带hash值得文件资源一定要显式的配置****Cache-Control: no-cache
如果不配置,就会触发启发式缓存,从而造成应用升级但是刷新不生效的问题。
tips: 不设置强缓存的时候,默认进入的是启发式缓存,而不是协商缓存)

11. No-cache/No-store 区别

no-cache: 可以在客户端存储资源,每次都必须去服务端做新鲜度校验,以此来决定从服务端获取新资源还是从客户端获取缓存。(协商缓存)
no-store:永远不在客户端存储资源,每次都去原始服务器获取资源。(彻底不缓存)

12. Max-age = 0,代表什么?

max-age=0 暗示内容立即被认为是陈旧的(并且必须重新获取),这实际上与 Cache-Control: no-cache 相同。
no-cachemax-age=0作为请求头,二者均会重新向服务器发起请求,哪怕该请求已被缓存。

13. 预检请求?

当一个请求跨域且不是简单请求时,就会发起一个OPTIONS请求,被称为预检请求。

预检请求用于检查服务器是否支持CORS, 以便确认最终是否发送正常请求,由于它通过响应头进行判断,无需 Body,因此关于 OPTIONS 请求的状态码可选择 204 No Content

如果预检请求失败,不允许跨域,则该复杂请求则会在浏览器控制台看到 CORS Error,并将该请求标记为红色。

在 Chrome 浏览器控制台中,跨域复杂请求旁,有 pre-flight 链 接指向该请求的预检请求

预检请求一般会携带以下三个请求头,用以向服务器咨询是否支持该跨域请求:

是否支持 POST 方法
Access-Control-Request-Method: POST

是否支持携带 content-type 请求头
Access-Control-Request-Headers: content-type

来自域名 https://shanyue.tech 的跨域请求
Origin: https://shanyue.tech
同时回复响应头,用以确认是否支持CORS.

允许跨域的头部
Access-Control-Allow-Headers: Content-Type,Content-Length,Accept-Encoding,X-CSRF-Token,accept,origin,Cache-Control,X-Requested-With,X-USE-PPE,X-TT-ENV

允许跨域的方法
Access-Control-Allow-Methods: POST, OPTIONS, GET

允许跨域的域名
Access-Control-Allow-Origin: *

OPTIONS 预检请求的缓存时间,即在 600s 内不会再次发送 OPTIONS 请求
Access-Control-Max-Age: 600

是否允许携带权限信息,比如 cookie 一类
Access-Control-Allow-Credentials: true

14. 简单请求

满足以下条件的即为简单请求:
1>. Method: 请求方法是GET,POST以及HEAD
2>. Header: 请求头是conten-Type且其值为:Accept-Language、Content-Language.
3>. Content-Type: 请求类型是 application/x-www-form-urlencoded、multipart/form-data 或 text/plain

15. 非简单请求

一般需要开发者主动构造,常见的简单请求有:content-type: application/json及Authorization:。

16. 设置默认携带cookie。(不设置则不携带)

fetch 发送请求时配置 credentials: include
server 响应时,配置响应头 access-control-allow-credentials: true
另外,无法向配置 **access-control-allow-origin: *** 的域名发送 Cookie,否则报错
在这里插入图片描述

17. Fetch credentials

credentials指在使用fetch发送请求时是否应当发送cookie.
Omit: 从不发送
Same-origin: 同源时发送,跨域则不发送。
Include: 同源与跨域都会发送cookie。

18. Access-Control-Allow-Origin

取值为: | *
其中,origin代表指定特定域名;* 代表所有域名。

19. 如何设置多个域名?

根据Origin请求头来设置响应头:Access-Control-Allow-Origin.
a.总是设置 Vary: Origin,避免 CDN 缓存破坏 CORS 配置
b.如果请求头不带有 Origin,证明未跨域,则不作任何处理
c.如果请求头带有 Origin,证明浏览器访问跨域,根据 Origin 设置相应的 Access-Control-Allow-Origin:

20. Vary: Origin,代表为不同的origin缓存不同的资源。

使用语法为:Vary:<header-name>,<header-name>, …
可理解为用以缓存的 key 值,常用于内容协商,因为内容协商往往会根据 Accept/Accept-Language 返回不同的资源。

21. 同域名浏览器会自动携带上cookie。

22. Cookie的属性 — 可跨域但不能跨站。

  • Domain: 为Cookie指定的域名。
  • Path: 为Cookie指定的路径
  • Expire/Max-age: Cookie的缓存时间。
  • HttpOnly:无法通过JS修改Cookie,但可以再浏览器看到其值。(可避免XSS攻击–跨站脚本攻击:通过注入脚本的方式获取到cookie,避免XSS攻击最有效的办法是CSP(内容安全策略),也是通过http配置.)
  • Secure: 仅能通过HTTPS协议传递
  • SameSite: 跨站点Cookie发送策略 (可用于防止CSRF攻击)

23. CSRF(cross-site request forgery)

跨站请求伪造,通过恶意引导用户一次点击劫持cookie及逆行攻击。

24. SameSite的值?

None: 任何情况下都会向第三方网站请求发送Cookie.
Lax: 只有导航到第三方网站的Get链接会发送cookie,而跨域的图片iframe,fetch请求,form Post表单等都不会发送cookie.
Strict: 任何情况下都不会向第三方网站请求发送cookie。

25. 状态码

100: 服务器检查请求头是否有问题。没问题返回100,有问题返回417.
101: 表示正在切换协议,如从http切换到websocket.
103: 提前声明对某些资源的优化提示
preload: 预加载。
preconnect: 提前建立链接。
201: 一般用以POST请求,代表服务器资源创建成功。
206: 当客户端指定 Range 范围请求头时,服务器端将会返回部分资源。当请求音视频资源体积过大时,一般使用 206 较多
401:当没有权限的用户请求需要带有权限的资源时,会返回 401,此时携带正确的权限凭证再试一次可以解决问题
413: Request Body过大,服务器处理不过来
429: 超过某一个 API 的 Rate Limit 规则,会被限流.(不同的接口,有不同的限流规则)

26. 502跟504区别

502 Bad Gateway: 一般表现为你自己写的应用层服务(Java/Go/PHP)挂了,或者网关指定的上游服务直接指错了地址,网关层无法接收到响应

  • 504 Gateway Timeout: 一般表现为应用层服务 (Upstream) 超时,超过了 Gatway 配置的 Timeout,如查库操作耗时三分钟,超过了 Nginx 配置的超时时间

扩展

1. etag的生成策略

(详见参考:https://blog.csdn.net/weixin_42989576/article/details/123695991)

静态文件(如css,js,图片等):文件大小的16进制+修改时间

字符串或Buffer:字符串/Buffer长度的16进制+对应hash值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/29548.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue的模版代码与数据绑定方式

目录 模版代码 插值语法 指令语法 数据多层访问 vue模版语小结 数据绑定方式 模版代码 插值语法 插值语法就是使用{{xxx}}描述的 <div id"root">{{name}} </div> 指令语法 <div id"root"><a :href"school.url">…

lazada买家订单导出

下载安装与运行 https://www.yuque.com/webcrawl/handbook/mtad3q 用途与功能 所见即所得的导出自由选择导出项支持Excel、JSON两种方式导出自由排序Excel导出列顺序导出过程中有进度提示&#xff0c;用户可以随时提前中止 导出过程演示 选择lazada订单导出&#xff0c;开始…

linux内核整体架构

操作系统概念 操作系统属于软件范畴&#xff0c;负责管理系统的硬件资源。OS具备的功能&#xff1a;1.为应用程序提供执行环境。2.为多用户和应用程序管理计算机的硬件资源。3.虚拟化功能。4.支持并发。 宏内核与微内核架构 宏内核&#xff1a;所有的内核代码都编译成二进制…

基于JAVA的学生课程后台管理系统【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86427641 开学选好课是具备学术能力的首要表现。学生不能为了拿高分&#xff0c;只选简单课程&#xff0c;也没有必要为了显示出自己热衷自我挑战&#xff0c;奋不顾身地一头扎进高难度课程。在…

强化深度学习中利用时序差分法中的Sarsa算法解决风险投资问题实战(附源码 超详细必看)

需要源码请点赞关注收藏后评论区留下QQ~~~ 一、Sarsa算法简介 Sarsa算法每次更新都需要获取五元组&#xff08;S,A,R,S,A&#xff09;这也是该算法称为Sarsa的原因&#xff0c;每当从非终止状态进行一次转移后&#xff0c;就进行一次更新&#xff0c;但需要注意的是&#xff0…

【论文阅读】社交网络传播最大化问题-04

Efficient Influence Maximization in Social Networks相关工作改进的贪心算法对独立级联模型的改进对加权级联模型的改进改进度折扣算法影响力最大化&#xff1a;在社交网络中找到一小部分能够最大化传播影响力的节点(种子节点)。一是改进原有的贪心算法&#xff0c;进一步缩短…

KMP算法——通俗易懂讲好KMP算法:实例图解分析+详细代码注解

文章目录1.kmp算法基本介绍2.字符串的最长公共前后缀&部分匹配表2.1 什么是最长公共前后缀2.2 什么是部分匹配表Next2.3 字符串最长公共前后缀&部分匹配表的代码实现2.4 代码测试3.根据部分匹配表搜索字符串匹配位置3.1 匹配成功一个就退出匹配的代码3.1.1 KMP算法的大…

Vue父组件给子组件传参数

别人在调用我们写的组件时&#xff0c;虽然要实现的结构一样&#xff0c;但如果别人想改一下显示的内容或者之类的&#xff0c;该怎么做呢&#xff1b;这时候就要提到“传参数”这个词了&#xff0c;别人可以通过传不同的参数&#xff0c;来实现他们具体的结构&#xff1b; 传参…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.22 RabbitMQ 安装

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.22 RabbitMQ 安装5.22.1 Erlang下载5.22.2 安装5.…

HTML+CSS期末大作业 中国传统美食网站设计 节日美食13页 html5网页设计作业代码 html制作网页案例代码 html大作业网页代码

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

3招学会TikTok电商选品,速看

Sensor Tower商店情报数据显示&#xff0c;2022年10月Instagram以将近6700万下载量&#xff0c;成为全球移动应用&#xff08;非游戏&#xff09;下载榜冠军&#xff0c;较2021年10月增长17.2%。其中&#xff0c;印度市场的下载量占45.2%&#xff0c;美国市场的下载量占比为5.4…

《码出高效:Java开发手册》笔记之二-面向对象

前言 第二章主要是讲面向对象&#xff0c;也就是oop&#xff0c;这个概念其实很多人已经听腻了&#xff0c;都是非常基础的知识&#xff0c;本章就是讲一些java以及很多编程语言的基础设计思想 正文 oop理念 面向对象是在早期滥用面向过程编程后出现的&#xff0c;面向过程…

CSS清除浮动的五种方法(超详细)

1.为什么要清除浮动? 浮动的原理是让图片脱离文档流&#xff0c;直接浮在桌面上。我们一般布局的时候都是只设置宽度不设置高度&#xff0c;让内容来自动填充高度。但使用浮动后会让原本填充的高度消失&#xff0c;父元素高度为0&#xff0c;后续添加内容布局会产生混乱,造成…

C语言tips-数组指针和指针数组

最近因为工作需要开始重新学c语言&#xff0c;越学越发现c语言深不可测&#xff0c;当初用python轻轻松松处理的一些数据&#xff0c;但是c语言写起来却异常的复杂&#xff0c;这个板块就记录一下我的c语言复习之路 数组指针 概念&#xff1a;顾名思义就是一个指针&#xff0c;…

英特尔oneAPI-用于异构计算的英特尔oneAPI

文章目录前景解决方案CUDA替代方案OpenMPOpenACCC 库Python 和 JavaSYCL 和 oneAPI结论如今&#xff0c;异构性广泛存在于高性能计算和消费电子产品中。这些系统在传统 CPU 的基础上增加了大量协处理器或加速器&#xff0c;例如 GPU、TPU 和 FPGA。然而&#xff0c;没有一种简单…

梯度下降——机器学习

一、实验内容 掌握基于密度的聚类方法的基本思想&#xff1b;掌握单变量函数的梯度下降的原理、算法及python实现&#xff1b;掌握双变量函数的梯度下降的原理、算法及python实现&#xff0c;并测试分析&#xff1b;理解学习率η的选择并测试分析。 二、实验过程 1、算法思想 在…

状态估计|基于 MMSE 的分析估计器的不确定电力系统分析(Matlab代码实现)

一、概述 在分布式电网系统中部署可再生资源带来了一系列新挑战&#xff0c;主要是由于它们的可变性和对气候参数的依赖性&#xff0c;这可能对测量潮流和状态估计所需的系统参数产生重大影响。第一个旨在根据某些参数的先验知识&#xff08;或预测&#xff09;计算整个系统参…

从头开始进行CUDA编程:流和事件

前两篇文章我们介绍了如何使用GPU编程执行简单的任务&#xff0c;比如令人难以理解的并行任务、使用共享内存归并&#xff08;reduce&#xff09;和设备函数。为了提高我们的并行处理能力&#xff0c;本文介绍CUDA事件和如何使用它们。但是在深入研究之前&#xff0c;我们将首先…

C++【智能指针】

文章目录一、什么是智能指针RAII思想std::auto_ptr二、智能指针的拷贝问题&#xff08;C98&#xff09;1.unique_ptr2.shared_ptrshared_ptr的问题循环引用的问题3.weak_ptr内存泄漏的危害一、什么是智能指针 #include<iostream>using namespace std; int div() {int a,…

哈希散列表hlist_head - linux内核经典实例

hlist_head和hlist_node用于散列表&#xff0c;分别表示列表头&#xff08;数组中的一项&#xff09;和列表头所在双向链表中的某项&#xff0c;两者结构如下: include/linux/types.h(line 190) struct hlist_head {struct hlist_node *first; };struct hlist_node {struct h…