返回顶部
首页 > 资讯 > 前端开发 > JavaScript >web前端实用的响应头是什么
  • 787
分享到

web前端实用的响应头是什么

2024-04-02 19:04:59 787人浏览 八月长安
摘要

这篇文章主要介绍了web前端实用的响应头是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇WEB前端实用的响应头是什么文章都会有所收获,下面我们一起来看看吧。一、预览、下载

这篇文章主要介绍了web前端实用的响应头是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇WEB前端实用的响应头是什么文章都会有所收获,下面我们一起来看看吧。

一、预览、下载 让人操碎了心?

1.1 场景

我不止一次听到同事、群友们讨论这个问题:

后端提供了一个 txt(或者 pdf/'JSON' 等)文件的下载 url,可以当我用 a 标签打开时,却变成了预览……怎么办?救!!!”

此时,就会有人上去推荐 FileSaver.js 或者 “手写读流另存为”。

然后还有人附和...

我:???

这是需要写代码才能解决的问题吗?

如果你有了解过 Content-Disposition 这个 Response Header,那你一定知道,只需要响应头上增加一行,问题就能迎刃而解。

1.2 介绍

Content-Disposition:这个响应头可以决定内容是 预览 还是 下载

它支持三种格式的值:

  • Content-Disposition: inline
    此时,消息体会以页面的一部分或者整个页面的形式展示。(预览)

  • Content-Disposition: attachment
    消息体应该被下载,默认文件名和 url 格式有关。

  • Content-Disposition: attachment; filename="filename.jpg"
    消息体应该被下载,默认文件名可指定。

注:如果需要预览,需要配合适当的 Content-Type 食用;

1.3 示例

为此,我特意写了一个 express 小示例。

大抵是在 express 应用下写了三个路由,如下:

const user = {
  name: "摸鱼的春哥",
  blogUrl: "https://juejin.cn/user/1714893870865303"
}

const contentDispositionInline = async (req, res, next) => {
  res.setHeader('Content-Disposition', 'inline')
  res.send(user)
}

const contentDispositionFilename = async (req, res, next) => {
  res.setHeader('Content-Disposition', 'attachment; filename="chunge.json"')
  res.send(user)
}

const contentDispositionNoFilename = async (req, res, next) => {
  res.setHeader('Content-Disposition', 'attachment')
  res.send(user)
}

然后我分别访问三个路由,效果差异:

web前端实用的响应头是什么

二、项目升级了,需要客户 清空缓存 ?

2.1 场景

实施:“客户反馈Bug 还是没修复。”
你:“哥,真修复了,要不你让客户清一下缓存?”
实施:“啊?客户说他不会清……”
……web前端实用的响应头是什么

永远不要期望你的客户会进行 “那些研发才懂” 的操作。也不要把你的问题,归因到 浏览器缓存 上。

浏览器缓存 是被发明出来优化用户体验的,并不是被发明出来阻碍用户的。

因此,理解如何使用 Cache-Control 这个响应头,是前端的必知技能。

2.2 介绍

Cache-Control:用来指定缓存机制。

缓存,作为前端八股文必考知识,相信大家已经耳熟能详。 常见的 Cache-Control 属性如下:

Response Header属性含义
cache-controlno-store不缓存,这个会让客户端、服务器都不缓存,也就没有所谓的强缓存、协商缓存了。
cache-controlpublic表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存,即使是通常不可缓存的内容。(例如:1.该响应没有max-age指令或Expires消息头;2. 该响应对应的请求方法是 POST 。)
cache-controlprivate表明响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它)。私有缓存可以缓存响应内容,比如:对应用户的本地浏览器。
cache-controlmax-age=<1000>设置缓存存储的最大周期,超过这个时间缓存被认为过期(单位秒)。与Expires相反,时间是相对于请求的时间。
  • 不缓存
    不缓存是最容易理解,每一次请求都会从服务端重新获取,不进行任何缓存。
    此策略只需要赋予 Cache-Control: no-store 响应头即可。

  • 强缓存
    有些资源文件,几乎不会发生变化(比如已经 hash化命名的文件),则可以直接从本地缓存获取,这就是所谓的 强缓存 ;
    通过 cache-control: public/private 或者 cache-control: max-age=<1000> 都可以指定机制为强缓存。

  • 协商缓存
    这是一种更为复杂缓存机制,无法再通过响应头 简单粗暴地 指定实现,而是需要前后端协作配合。
    简单来说,每次请求资源前前端会写代前一次的响应 hash,问询服务端 资源是否发生过变化,从而达到准确缓存的效果。
    本文不赘述,如果有兴趣,可以参考此文:juejin.cn/post/703078…

2.3 实际生产如何运用?

  • 凡是名称带有 hash 值的资源,一律可以强缓存。
    (毕竟内容一旦有变化,名称的hash 也跟着变了)

  • 凡是通过 cdn 引入的第三方库,均建议携带版本信息,这样也可以强缓存。
    (比如 /xx/xx/Jquery.min.js 切换为 jquery@3.6.0/dist/jquery.min.js

  • 凡是 htmlico 这类命名固定的文件,建议一律 不缓存 或者 协商缓存

三、我的 Cookie 不可能这么可爱!

3.1 场景

"春哥春哥,为啥我登录成功了,请求还是 401 ?"

"春哥春哥,为啥我存进 cookie 的值取不到?"

"春哥春哥,这破 cookie 是不是坏了,浏览器里看明明有值,为啥我访问不了?"

我:“兄弟,你有了解过一个叫 set-cookie 的响应头吗?”

是它!是它!就是它!关于 cookie 的各种异常,全靠它!

3.2 介绍

Cookie 曾经是 Web 开发无法绕开的一道门槛,而现在它的存在感越来越弱,但海量的存量项目并不会因为技术的趋势而消失,它们依然很有价值,依然需要维护。

set-cookie 响应头正是 Cookie 体系中最为核心的 第一主角

Set-Cookie: 是一个响应头,服务端赋值,让浏览器端产生 Cookie,并限定 Cookie 的各种特性。

这些特性就包括:

  • 过期时限;Expires=<date>

  • 存活周期;Max-Age=<number>
    在 cookie 失效之前需要经过的秒数。0-1 直接失效;此属性的优先级高于 Expires

  • 域名;Domain=<domain-value>
    指定 cookie 只能在什么域下生成;(允许通配,这个属性主要出于安全性)

  • 路径;Path=<path-value>
    Domain 更为细致的控制策略,甚至指定了 xx 路径下才能发送 Cookie

  • 只在 Https 产生;Secure
    如果 set-cookie 头中有 Secure 属性,那么浏览器只会在 Https 环境产生和发送 Cookie

  • 禁用 js 操作 apiHttpOnly
    如果 set-cookie 头中有 HttpOnly 属性,那么 Cookie 属性的生成、读写、发送就只能由浏览器通过 "响应头" 控制了,不在允许前端通过 js 操作 Cookie

  • 是否允许跨域携带;SameSite=<samesite-value>
    支持属性包括 StrictLaxNone,分别表示:

    • Strict: 完全不能跨域携带;

    • Lax: 只允许从外站导航到源站时携带 Cookie

    • None:跨域也行,不限制。

3.3 开发常见问题分析

  • 为啥你登录成功了,请求还是 401

    早期非常多的项目,使用 Cookie 作为用户身份识别的手段,比如 spring mvc 项目就是通过给 Cookie 一个 JSeesionId 的值作为识别,判断你是否出于当前会话。

    而 "登录了,却还 401" 这个现象,如果服务端没有问题的话,多半是 浏览器其实并未存储Cookie

    换个说法,你每次发起请求,服务端都认为你是一次 新的会话,和上一次 登录的你 并非同一人。

    如果你正处于 http 环境,那你可能需要暂时移除 Secure 属性。

  • 存不进、取不出?
    先确认 是否有域的限制是否有路径的限制是否有 HttpOnly?
    逐一排查下来,问题不难解决。

关于“web前端实用的响应头是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“web前端实用的响应头是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网JavaScript频道。

--结束END--

本文标题: web前端实用的响应头是什么

本文链接: https://lsjlt.com/news/98781.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • web前端实用的响应头是什么
    这篇文章主要介绍了web前端实用的响应头是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇web前端实用的响应头是什么文章都会有所收获,下面我们一起来看看吧。一、预览、下载 ...
    99+
    2024-04-02
  • 什么是Web前端
    本篇内容主要讲解“什么是Web前端”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是Web前端”吧!什么是web前端?大家越来越肯定前端的作用,如今也高端we...
    99+
    2024-04-02
  • web 前端 什么是
    Web前端是一个广泛的概念,它通常指的是在Web开发过程中负责客户端部分的技术和工作。Web前端开发是Web应用的三大核心技术之一,它旨在将Web应用程序的外观和行为与后端逻辑分离开来,以此实现更好的应用程序架构、更友好的用户界面和更高效的...
    99+
    2023-05-20
  • web前端是指什么
    Web前端又称为Web开发前端,是指用户在浏览器上看到和操作的网页界面。作为Web开发的重要组成部分,负责实现网页的可见界面和交互功能。Web前端的重要性在于,它是用户与网页之间的桥梁,直接影响着用户对网站的观感和体验。一个好的Web前端界...
    99+
    2023-08-04
  • web前端的概念是什么
    这篇“web前端的概念是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“web前端的概念是什么”文章吧。Web前端是给用户...
    99+
    2023-07-05
  • web前端跨域是什么
    这篇文章主要介绍“web前端跨域是什么”,在日常操作中,相信很多人在web前端跨域是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”web前端跨域是什么”的疑惑有所帮助!接...
    99+
    2024-04-02
  • web前端是什么意思
    Web前端,简而言之,就是网站的“外衣”和“大脑”。它负责展现给用户的Web页面的设计和交互,并与后台服务器进行数据通信和交互处理。Web前端技术一直处于高速发展之中,可以说是网站开发中不可或缺的部分。Web前端技术主要包括三个方面:HTM...
    99+
    2023-05-14
  • web前端是做什么的?优势是什么?
    Web前端是指开发Web页面的技术和工具,也称作前端工程师。随着互联网的迅速发展,Web前端在互联网领域中变得越来越重要。这篇文章将讨论Web前端是做什么的,以及为什么Web前端在今天的互联网领域中如此重要。一、Web前端是做什么的Web前...
    99+
    2023-05-14
    web前端 web
  • web前端架构指的是什么
    这篇文章主要讲解了“web前端架构指的是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“web前端架构指的是什么”吧!web前端架构是一系列工具和流程的集合,旨在提升前端代码的质量,并实现...
    99+
    2023-07-05
  • web前端主要做的是什么
    随着互联网的不断发展,Web前端开发在技术领域中也变得越来越重要。Web前端是指通过HTML,CSS和JavaScript等技术构建和维护网站的任务。那么,Web前端主要做的是什么呢?在这篇文章中,我们将详细讨论Web前端的职责和工作内容。...
    99+
    2023-05-14
  • web前端是做什么的知识
    随着互联网的发展,Web前端开发成为一个越来越重要的职业。Web前端开发是指通过编写HTML、CSS、JavaScript等代码,实现页面的设计和交互效果,最终呈现出给用户的网页界面。从某种意义上来说,Web前端开发就是将网页设计师所绘制出...
    99+
    2023-05-20
  • web前端中表单的作用是什么
    这篇文章主要讲解了“web前端中表单的作用是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“web前端中表单的作用是什么”吧!表单的作用有两个:1、对于用户而言是数据录入和提交的界面;2、...
    99+
    2023-07-05
  • web前端实时通信的方式是什么
    这篇“web前端实时通信的方式是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“web前端实时通信的方式是什么”文章吧。1...
    99+
    2023-06-30
  • web中大前端和小前端的区别是什么
    小编给大家分享一下web中大前端和小前端的区别是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • python中什么是响应头部
    这篇文章将为大家详细讲解有关python中什么是响应头部,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、...
    99+
    2023-06-14
  • web前端中的web指什么
    本篇内容主要讲解“web前端中的web指什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“web前端中的web指什么”吧! web是...
    99+
    2024-04-02
  • web前端三要素是什么
    本篇内容介绍了“web前端三要素是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!所谓三要素,即HTML...
    99+
    2024-04-02
  • web前端SEO是什么意思
    这篇文章主要介绍了web前端SEO是什么意思的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇web前端SEO是什么意思文章都会有所收获,下面我们一起来看看吧。SEO简介全称:Search English Opti...
    99+
    2023-06-27
  • 什么是web前端和网页
    本教程操作环境:windows7系统、Dell G3电脑。什么是web前端Web前端是给用户展示的网页页面,即网站的前台部分。web前端也被称为“客户端”,是关于用户可以看到和体验的网站的视觉方面,即用户所看到的一切Web浏览器展示的内容,...
    99+
    2023-05-14
    网页 web前端 web
  • web前端架构师是什么
    随着互联网行业的不断发展,Web前端技术也成为了一项非常重要的技能。在Web前端领域中,Web前端架构师是一个非常关键的职位,他们是整个Web前端团队的核心人物,负责为项目提供技术架构的选择和设计。Web前端架构师是指那些拥有深度技术能力并...
    99+
    2023-05-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作