有个场景,是页面在不断地使用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中如何在不断加载输出的页面加载完成后进行自动跳转/重定向相关推荐

  1. html中加载解析,HTML页面加载和解析流程详细介绍

    序言: 我一直都认为"网页制作"这个词是一个不怎么高端的词,在我的印象中网页制作的词是没有生命力的一个制作,我喜欢用HTML 这样简单直接,这词凸显高端,有大气漂亮的UI.一套完美 ...

  2. linux优化网页加载过程,HTML页面加载和解析流程 介绍

    1.浏览器加载和渲染html的顺序 1.1.IE下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的. 1.2.在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相 ...

  3. instant.page —— 一个 JS 脚本实现网站预加载,提升页面加载速度

    instant.page 使用即时预加载技术,在用户点击之前预先加载页面.当用户的鼠标悬停在一个链接上超过 65 毫秒时,浏览器会对此页面进行预加载,当用户点击链接后,就从预加载的缓存中直接读取页面内 ...

  4. html页面判断其他div为空,将外部html加载到div - 页面加载然后变为空白

    我确信这会变成一个愚蠢的事情,但这是因为我是一个JavaScript菜鸟. 我正在尝试将外部html的内容加载到我的索引页面中,所以在我的index.html中我有这个div我要加载html: ` 以 ...

  5. php项目css加载失败,CSS页面加载失败的原因有哪些

    CSS加载失败的常见原因有:路径错误.浏览器不兼容.网络原因.编码格式不同等错误 才刚刚入门CSS,经常会碰到CSS加载失败的问题,网页上什么样式都没有,今天将要和大家分享的是常见的CSS加载失败的原 ...

  6. h5首页加载慢_页面加载速度缓慢时,如何优化?

    提高页面加载速度,优化方法: 1.使用免费 cdn 加载第三方资源 2.合并压缩js,css,减少请求次数以及减少流量的消耗 3.代码优化: HTML头部的JavaScript和写在HTML标签中的S ...

  7. wi8ndows无法加载,Win8.1系统更新Flash插件后无法自动加载插件怎么办

    当前,为了实现各种编码格式的音频.视频节目的播放,不少第三方媒体提供商均开发了自己的播放器插件,提供音频.视频节目的网站一般会提示您下载.安装相应的插件或程序.Flash是Win8.1系统内置的播放器 ...

  8. html5页面加载执行动作,页面加载完成后执行JS的5种方式

    在js和jquery使用中,常用到页面加载完成后执行某一方法.经过整理,大概是五种方式.javascript 1.jQuery的$( function(){} );html 2.jQuery的$(do ...

  9. 阻止html页面加载,如何防止页面加载重复的JS?

    我自己写了一个页面,除了公共部分的页头页脚以外,其余内容都是通过Ajax加载过来的,现在遇到了比较头疼的问题: 先说一下我加载的方式 $.ajax({ type : "GET", ...

最新文章

  1. matplotlib - ax.bar()ax.pie()
  2. oracle的本地安装和PUTTY+XMING远程连接安装和oracle翻页功能
  3. elastic 修改map_Amazon Elastic Map Reduce使用Apache Mahout计算建议
  4. 基于海思开发板的屏幕截图程序(二)
  5. mysql5.0 执行定时计划
  6. [转] 数据挖掘 机器学习 模式识别的关系
  7. 38.线程交换与线程移动
  8. c语言累加和校验_累加和校验算法(CheckSum算法)
  9. java摄像头_Java实现 海康摄像头抓拍图像
  10. 笔记本硬盘直接安装win7系统教程(不用U盘和PE)
  11. uniapp css实现轮播图片逐渐放大效果
  12. Unity 面积测量
  13. 开源库3dTagCloudAndroid使用,实现3D球形云标签tag效果
  14. 服务器 国产CPU 什么型号,国产cpu服务器
  15. qt invalid use of incomplete type class QDebug
  16. ESP32--WIFI
  17. android+系统画面恢复,坚持Android系统恢复?轻松修复它
  18. java全栈系列之JavaSE-面向对象(抽象类)041
  19. 媲美软件安装管家的网站
  20. 服务器运维难题之300台服务器如何管理

热门文章

  1. 10多家公司的Java开发面试常见问题合集
  2. Linux基础学习之Day7-6-Mount 挂载详解
  3. linux清除内存buffer,Linux清理Buffer/Cache内存空间让系统变流畅
  4. Magento付款流程的简化【7】
  5. IT外包的风险有哪些?如何规避这些风险?
  6. 解决谷歌游览器登陆出现不安全弹窗,而无法登陆问题
  7. 多级反馈队列调度算法C语言
  8. leetcode 518 零钱兑换II
  9. 信号反射的几个重要体现(过冲、下冲、振铃)及电路设计
  10. 2020PHP面试题总结笔记