Go语言从入门到精通-07| Web服务完善之图片文件支持

栏目: 服务器 · 发布时间: 6年前

内容简介:请从github下载配套代码:前面我们实现的Web服务器软件只能支持静态html文件,不能支持图片等复杂的html元素。下面本文将继续完善该Web服务器软件的功能使其可以支持图片资源。通过本文,我们在具体修改服务端代码之前,我们先看一下对于图片来说http的请求有什么差异。如下图是通过Wireshark捕获的对图片请求的,可以看出没有什么本质的区别,只是请求头里面路径是一个图片的路径(/house.png)。

请从github下载配套代码: https://github.com/shuningzhang/learn_golang

Go语言从入门到精通-07| Web服务完善之图片文件支持

Go语言从入门到精通-07| Web服务完善之图片文件支持

前面我们实现的Web服务器软件只能支持静态html文件,不能支持图片等复杂的html元素。下面本文将继续完善该Web服务器软件的功能使其可以支持图片资源。通过本文,我们 主要学习在 Go 语言中字符串相关的操作 。如下图是本文实现后的效果,在浏览器中会有一个字符串及一个小房子的图片:

Go语言从入门到精通-07| Web服务完善之图片文件支持

Go语言从入门到精通-07| Web服务完善之图片文件支持

HTTP协议

在具体修改服务端代码之前,我们先看一下对于图片来说http的请求有什么差异。如下图是通过Wireshark捕获的对图片请求的,可以看出没有什么本质的区别,只是请求头里面路径是一个图片的路径(/house.png)。

Go语言从入门到精通-07| Web服务完善之图片文件支持

图1 http请求消息

如下是Wireshark捕获的应答部分的内容,这里重点关注一下红色方框里面的内容,这里指出了应答内容的类型。浏览器会根据该类型进行解析。如果类型与实际内容不匹配,将导致解析出现问题。

Go语言从入门到精通-07| Web服务完善之图片文件支持

Go语言从入门到精通-07| Web服务完善之图片文件支持

服务端代码解析

下面我们看一下服务端代码的内容具体是哪些。这里主要修改了3个地方:

  1. 增加了请求消息头的解析函数,确定请求的内容及类型
  2. 增加了响应消息的封装函数,根据响应的内容的大小和类型组装应答消息头
  3. 修改主函数内容

首先 增加了一个请求消息头解析的方法 ,该方法用于解析请求消息头,将其方法、路径和版本信息解析出来。这里我们重点关注的是解析出请求的路径。因为路径里面包含文件名,而我们根据文件名就可以读取文件的内容,并且根据文件扩展名可以知道文件的类型。

Go语言从入门到精通-07| Web服务完善之图片文件支持

Go语言从入门到精通-07| Web服务完善之图片文件支持

该函数中主要使用了字符串处理的包strings,该包实现了子串的查找和字符串切割等功能。本函数通过这些功能解析出需要的内容。

其次,将之前的应答消息头组装的代码封装成一个函数,该函数有2个参数,分别是文件长度和内容的类型。

Go语言从入门到精通-07| Web服务完善之图片文件支持

Go语言从入门到精通-07| Web服务完善之图片文件支持

最后,我们修改了主函数,主函数的逻辑修改的不大,主要是通过调用前面两个函数来 实现请求的解析和内容的发送 。这里实现的比较简单,只是实现了基本逻辑,还有很多Bug。如1,根据解析的结果,如果请求是根路径,则发送index.html的内容,否则从请求路径获取内容。

Go语言从入门到精通-07| Web服务完善之图片文件支持

Go语言从入门到精通-07| Web服务完善之图片文件支持

这里有个明显的Bug,就是根据文件扩展名来拼装响应消息头的内容,但未必都是正常的,但目前来说是可以正常工作的。后面我们再逐步完善。

测试验证

照例我们验证一下,服务端运行程序,在浏览器输入地址后回车,可以看到运行的效果。

Go语言从入门到精通-07| Web服务完善之图片文件支持

Go语言从入门到精通-07| Web服务完善之图片文件支持


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java语言程序设计(基础篇 原书第10版)

Java语言程序设计(基础篇 原书第10版)

[美]粱勇(Y.Daniel Liang) / 戴开宇 / 机械工业出版社 / 2015-7 / 85.00元

《Java语言程序设计(基础篇 原书第10版)》是Java语言的经典教材,中文版分为基础篇和进阶篇,主要介绍程序设计基础、面向对象编程、GUI程序设计、数据结构和算法、高级Java程序设计等内容。本书以示例讲解解决问题的技巧,提供大量的程序清单,每章配有大量复习题和编程练习题,帮助读者掌握编程技术,并应用所学技术解决实际应用开发中遇到的问题。您手中的这本是其中的基础篇,主要介绍了基本程序设计、语法......一起来看看 《Java语言程序设计(基础篇 原书第10版)》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具