【Golang】go中如何在不断加载输出的页面加载完成后进行自动跳转/重定向
有个场景,是页面在不断地使用fmt.Fprintf(w, "something...")
进行输出,其中w
被定义为w http.ResponseWriter
。需求是在输出完成后,页面自动进行一次跳转,或者说重定向。首先想到使用http.Redirect
进行重定向,结果发现报错:
http: superfluous response.WriteHeader call from
第一反应是纳闷:我之前也没调用过w.WriteHeader
函数啊,为啥会报错捏?
首先,使用http.Redirect(w, r, "https://example.com", http.StatusFound)
是不行的,这是因为在WriteHeader
的手册里,有这么一段话:
If WriteHeader is not called explicitly, the first call to Write will trigger an implicit WriteHeader(http.StatusOK). Thus explicit calls to WriteHeader are mainly used to send error codes.
大意是说,WriteHeader存在隐式调用。若Write先呼叫时会自动预设状态码为http.StatusOK,因此后续再呼叫WriteHeader时就会变成多重写入状态码的问题发生,导致客户端收到不正确的状态。
也就是说,fmt.Fprintf(w, "something...")
中,调用w
进行写操作已经触发了对w.WriteHeader
的隐式调用。
所以疑问解开了。那应该怎么解决这个需求呢?其实很简单,因为fmt.Fprintf(w, "something...")
中是可以传入html代码的!因此只要进行如下操作即可:
// 前提是w已经加载为html网页,
// 类似:fmt.Fprint(w, "<html><head><title></title></head><body></body></html>")
// 或者:tmpl, err := template.ParseFiles("xxx.html"), err = tmpl.Execute(w, nil)fmt.Fprintf(w, "something1...")
fmt.Fprintf(w, "something2...")
// ...
// 输出完成,准备自动重定向(window.location.replace("url")或者window.location.href="url"选一个需要的)
// 别忘了加<script>标签
fmt.Fprintf(w, "<script>window.location.href=\"https://example.com/\";</script>")
// ...
【Golang】go中如何在不断加载输出的页面加载完成后进行自动跳转/重定向相关推荐
- html中加载解析,HTML页面加载和解析流程详细介绍
序言: 我一直都认为"网页制作"这个词是一个不怎么高端的词,在我的印象中网页制作的词是没有生命力的一个制作,我喜欢用HTML 这样简单直接,这词凸显高端,有大气漂亮的UI.一套完美 ...
- linux优化网页加载过程,HTML页面加载和解析流程 介绍
1.浏览器加载和渲染html的顺序 1.1.IE下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的. 1.2.在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相 ...
- instant.page —— 一个 JS 脚本实现网站预加载,提升页面加载速度
instant.page 使用即时预加载技术,在用户点击之前预先加载页面.当用户的鼠标悬停在一个链接上超过 65 毫秒时,浏览器会对此页面进行预加载,当用户点击链接后,就从预加载的缓存中直接读取页面内 ...
- html页面判断其他div为空,将外部html加载到div - 页面加载然后变为空白
我确信这会变成一个愚蠢的事情,但这是因为我是一个JavaScript菜鸟. 我正在尝试将外部html的内容加载到我的索引页面中,所以在我的index.html中我有这个div我要加载html: ` 以 ...
- php项目css加载失败,CSS页面加载失败的原因有哪些
CSS加载失败的常见原因有:路径错误.浏览器不兼容.网络原因.编码格式不同等错误 才刚刚入门CSS,经常会碰到CSS加载失败的问题,网页上什么样式都没有,今天将要和大家分享的是常见的CSS加载失败的原 ...
- h5首页加载慢_页面加载速度缓慢时,如何优化?
提高页面加载速度,优化方法: 1.使用免费 cdn 加载第三方资源 2.合并压缩js,css,减少请求次数以及减少流量的消耗 3.代码优化: HTML头部的JavaScript和写在HTML标签中的S ...
- wi8ndows无法加载,Win8.1系统更新Flash插件后无法自动加载插件怎么办
当前,为了实现各种编码格式的音频.视频节目的播放,不少第三方媒体提供商均开发了自己的播放器插件,提供音频.视频节目的网站一般会提示您下载.安装相应的插件或程序.Flash是Win8.1系统内置的播放器 ...
- html5页面加载执行动作,页面加载完成后执行JS的5种方式
在js和jquery使用中,常用到页面加载完成后执行某一方法.经过整理,大概是五种方式.javascript 1.jQuery的$( function(){} );html 2.jQuery的$(do ...
- 阻止html页面加载,如何防止页面加载重复的JS?
我自己写了一个页面,除了公共部分的页头页脚以外,其余内容都是通过Ajax加载过来的,现在遇到了比较头疼的问题: 先说一下我加载的方式 $.ajax({ type : "GET", ...
最新文章
- matplotlib - ax.bar()ax.pie()
- oracle的本地安装和PUTTY+XMING远程连接安装和oracle翻页功能
- elastic 修改map_Amazon Elastic Map Reduce使用Apache Mahout计算建议
- 基于海思开发板的屏幕截图程序(二)
- mysql5.0 执行定时计划
- [转] 数据挖掘 机器学习 模式识别的关系
- 38.线程交换与线程移动
- c语言累加和校验_累加和校验算法(CheckSum算法)
- java摄像头_Java实现 海康摄像头抓拍图像
- 笔记本硬盘直接安装win7系统教程(不用U盘和PE)
- uniapp css实现轮播图片逐渐放大效果
- Unity 面积测量
- 开源库3dTagCloudAndroid使用,实现3D球形云标签tag效果
- 服务器 国产CPU 什么型号,国产cpu服务器
- qt invalid use of incomplete type class QDebug
- ESP32--WIFI
- android+系统画面恢复,坚持Android系统恢复?轻松修复它
- java全栈系列之JavaSE-面向对象(抽象类)041
- 媲美软件安装管家的网站
- 服务器运维难题之300台服务器如何管理