18.2 HTTP服务器-处理函数、响应404错误

news2025/1/16 8:11:53

1. 处理函数

处理来自客户端的请求,并回之以特定的响应,这是处理函数的主要任务。在处理函数中,我们通常会完成如下工作:

  • 验证请求路径
    • http.Request.URL.Path
    • http.NotFound(...) 当请求没有对应的处理函数时,返回404错误。
  • 区分请求类型
    • http.Request.Method
  • 获取请求数据
    • http.Request.URL.Query(),从访问连接url中获取查询信息
    • http.Request.Body,直接获取body内容
  • 处理业务逻辑
    • 验证身份合法性
    • 读取处理数据

处理来自客户端的请求,并回之以特定的响应,这是处理函数的主要任务。

  • 选择响应类型
    • http.Request.Header.Get("Accept"),通过该语句可以得知客户端所能接受的响应类型。
    • http.ResponseWriter.Header().Set("Content-Type", ...),在响应写入器中,通过Header()字段的Set方法设置“Content-Type”参数的值,来设置具体的响应类型。
  • 返回响应报文
    • http.ResponseWriter.Write(...),写入字节流,是整个响应过程的最后一步。

返回响应报文一定是整个处理过程的最后一步,因为响应报文一旦返回客户端,之后对它再做任何修改都将无济于事。

  • w.Write([]byte("Hello World!"))
  • w.Header().Set("X-My-Header", "I am setting a header!") // 无效操作

2. 响应404错误

缺省路由的任务是将所有没有指定处理函数的请求都定向到"/",并不能很有效的针对无效的地址返回404。

  • 鉴于所请求的路由并不存在,可在这里响应404错误
    • func rootHandler(w http.ResponseWriter, r *http.Request) {
    •         if r.URL.Path != "/" { // 如果所请求的路径并非根目录
    •                 http.NotFound(w, r) // 响应404错误
    •                 return
    •         }
    •         ... // 所请求的路径是根目录,正常处理
    • }
  • 404错误的响应报文类似下面这个样子:
    • HTTP/1.1 404 Not Found
    • Content-Type: text/plain; charset=utf-8
    • X-Content-Type-Options: nosniff
    • Date: Sat, 29 Dec 2018 06:28:54 GMT
    • Content-Length: 19
    • 404 page not found

 

// 相应404错误
// 默认路由器的行为是将所有没有指定处理程序的HTTP请求都定向到对“/”的
// 处理,在这里如果发现HTTP请求中的URL路径并不是“/”,就响应404错误 
// 通过curl发起HTTP请求,可执行如下命令: 
// curl -is "http://localhost:8000"
// curl -is "http://localhost:8000/dummy"
package main
import "net/http"
func rootHandler(w http.ResponseWriter,
    r *http.Request) {
    if r.URL.Path != "/" {
        http.NotFound(w, r)
        return
    }
    w.Write([]byte("Hello World!"))
}
func main() {
    http.HandleFunc("/", rootHandler)
    http.ListenAndServe(":8000", nil)
}

 

 

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

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

相关文章

机器学习笔记:label smoothing

在传统的分类任务中,我们通常使用硬标签(hard labels) 即如果一个样本属于某个类别,其对应的标签就是一个全0的向量,除了表示这个类别的位置为1。例如,在一个3类分类任务中,某个样本的标签可能是…

【Vue】购物车案例-构建项目

脚手架新建项目 (注意:勾选vuex) 版本说明: vue2 vue-router3 vuex3 vue3 vue-router4 vuex4/pinia vue create vue-cart-demo需要勾选上vuex,由于这个项目只有一个页面,vuex可勾可不勾 将原本src内容清空,替换成教学…

缓存更新策略中级总结

背景 看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查询操作…

数据结构(常见的排序算法)

1.插入排序 1.1直接插入排序 在[0 end]区间上有序,然后将(end1)的数据与前面有序的数据进行比较,将(end1)的数据插入,这样[0 end1]区间上就是有序的,然后再向后进行比较。 例如&a…

VXLAN技术

VXLAN技术 一、VXLAN简介 1、定义 VXLAN(Virtual eXtensible Local Area Network):采用MAC in UDP(User Datagram Protocol)封装方式,是NVO3(Network Virtualization over Layer 3&#xff09…

机器学习算法 —— 贝叶斯分类之模拟离散数据集

🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 目录 实战(贝叶斯分类)莺尾花数据模拟离散数据集库函数导入数据导入和分析模型训练和预测 总结 实战(贝叶斯…

C语言 | Leetcode C语言题解之第144题二叉树的前序遍历

题目: 题解: int* preorderTraversal(struct TreeNode* root, int* returnSize) {int* res malloc(sizeof(int) * 2000);*returnSize 0;if (root NULL) {return res;}struct TreeNode *p1 root, *p2 NULL;while (p1 ! NULL) {p2 p1->left;if (…

一道Delphi的For循环题目

起因 事情是这样的: 俺在一个Delphi交流QQ群,有点冷场,俺想热一下场子就发了下面这个段子。其实这是之前俺带新人时的一道题目。 第一个回答 第一个网友给的答案是 i:i-1; 俺说这个答案是不对的,因为 Delphi在编译时是不允许…

探索智慧机场运营中心解决方案的价值与应用

随着全球航空业的不断发展,机场运营中心的作用日益凸显。智慧机场运营中心解决方案以其高效的管理和智能化的运营模式,成为优化机场运营、提升服务水平的重要工具。本文将深入探讨智慧机场运营中心解决方案的价值与应用,揭示其在机场管理中的…

软件下载网站源码附手机版和图文教程

PHP游戏应用市场APP软件下载平台网站源码手机版 可自行打包APP,带下载统计,带多套模板,带图文教程,可以做软件库,也可以做推广app下载等等,需要的朋友可以下载 源码下载 软件下载网站源码附手机版和图文…

下拉框数据被遮挡 且 后续数据无法下拉的 解决方法

目录 前言1. 问题所示2. 原理分析3. 解决方法3.1 添加空白版2.2 调整z-index2.3 父容器的溢出属性2.4 调整样式属性4. 效果图前言 小程序使用的是Uniapp,原理都差不多,索性标题就不标注Uniapp(小程序) 对于该问题调试了一个晚上,最终解决,对此记录下来 1. 问题所示 执…

怎么取消Intellij IDEA中的项目和Git仓库的关联

这篇文章分享一种最简单的方法,取消已经开启代码控制的项目与git代码仓库的关联。 打开项目的位置,然后点击文件管理器上方的查看选项卡,勾选【隐藏的项目】。 删除.git文件夹 然后可以看到项目的文件夹下显示了一个隐藏的.git文件夹&#x…

MATLAB基础应用精讲-【数模应用】二元Logit分析

目录 算法原理 数学模型 极大似然法 Newton牛顿迭代法 logit回归分析步骤 一、二元logit分析 1.基本说明 2.数据处理 3.SPSSAU上传数据 4.分析前提示 5.SPSSAU分析 6.其它说明 二、多分类logit分析 1.基本说明 2.数据要求与处理 3.SPSSAU上传数据 4.SPSSAU分析…

微信小程序双层/多层 wx:for 循环嵌套,关于内外层的 index 和 item ;data-index 传递两个参数

微信小程序用 wx:for 循环可以快速将后端 js 的数组快速显示到前端&#xff1b; 那假如数组中嵌套数组&#xff1b;就存在内外层两层及以上的多层嵌套循环了。 那么如果两层的嵌套式循环 index 究竟是属于哪一层呢&#xff1f;item 又属于哪一个呢&#xff1f; <view><…

【优选算法】详解target类求和问题(附总结)

目录 1.两数求和 题目&#xff1a; 算法思路&#xff1a; 代码&#xff1a; 2.&#xff01;&#xff01;&#xff01;三数之和 题目 算法思路&#xff1a; 代码&#xff1a; 3.四数字和 题目&#xff1a; 算法思路&#xff1a; 代码&#xff1a; 总结&易错点&…

Java实现物候相机和植被分析导出相对指数成果图

一、基础概念 植被分析是利用地理信息系统&#xff08;GIS&#xff09;、遥感技术、生态学、环境科学等多学科交叉手段&#xff0c;对植被的分布、类型、结构、组成、动态变化、生产力、生态功能进行量化评估的过程。植被分析对于生态保护、生物多样性研究、资源管理、环境监测…

交易中的群体行为特征和决策模型

本文基于人的行为和心理特征&#xff0c;归纳出交易中群体的行为决策模型&#xff0c;并基于这个模型&#xff0c;分析股价波浪运行背后的逻辑&#xff0c;以及投机情绪的周期变化规律&#xff0c;以此指导交易&#xff0c;分析潜在的风险和机会&#xff0c;寻找并等待高性价比…

stm32MP135裸机编程:修改官方GPIO例程在DDR中点亮第一颗LED灯

0 参考资料 轻松使用STM32MP13x - 如MCU般在cortex A核上裸跑应用程序.pdf 正点原子stm32mp135开发板&原理图 STM32Cube_FW_MP13_V1.1.0 STM32CubeIDE v1.151 需要修改那些地方 1.1 修改LED引脚 本例使用开发板的PI3引脚链接的LED作为我们点亮的第一颗LED灯&#xff0c;…

教育的数字化转型——Kompas.ai如何变革学习体验

引言 在现代教育中&#xff0c;数字化转型逐渐成为提升学习效果的重要手段。随着科技的进步&#xff0c;人工智能&#xff08;AI&#xff09;在教育领域的应用越来越广泛。本文将探讨教育数字化转型的发展趋势&#xff0c;并介绍Kompas.ai如何通过AI技术变革学习体验。 教育数…

金融量化分析开源工具:TuShare

TuShare&#xff1a;一站式金融数据解决方案&#xff0c;让量化分析触手可及- 精选真开源&#xff0c;释放新价值。 概览 TuShare&#xff0c;是Github社区上一个专为金融量化分析师和数据爱好者设计的开源工具&#xff0c;提供了从数据采集、清洗加工到数据存储的全流程服务。…