151-3895-5886

解答HTTP服务器中遇到的问题

2019年09月11日 维尼网络

基于HttpListener手写服务器并不是很难。这个过程中小编是基于早期写的一个Server雏形,项目名为 Kserver。接下来小编就和大家说说Kserver的调用。

 

3f469a61354d28eb7d8f69459d050ff1.png

在KServer_OnRequest中处理正常的HTTP请求,在KServer_OnError中处理程序错误,通常会返回HTTP 500给客户端。这个程序启动后占用 6600 端口,然后在 Apache 配置了反向代理。但是写Cookie始终不成功。

 

我设置Host为req.Url.Host。这个在本机是不会有问题的,单独在服务器中使用80端口也不会有问题,有问题的是即便通过反向代理,获取 Headers 中 的Host值始终还是 localhost,要通过X-Forwarded-Host才可以,这个大学时好歹了解过,平时开发全部基于IIS,没有反向代理,头一回遇到。

 

接下来就是源码引擎了,不用Razor了,说真的对Razor渐渐的没啥好感了,感觉挺笨重,所以选用了DotLiquid,用Liquid做源码引擎的应用可以说是特别多了。于是扩展了String类,增加了Html源码文件渲染 Html 的办法。

 

RenderBody 是模仿 Razor 搞的个关键词,表示是子页显示内容的区域。对于字体、脚本(第三方)、图片这些静态资源,我的想法是既然不会有大的变动,就让他永久缓存在浏览器好了。其他的就是处理POST,处理Cookie 了。HttpListenerRequest 是没法获取 Form 表单的值的,只能读取 InputStream 中的值,然后自己根据键值对获取了。Cookie 是不能简单的通过键值对分割,查询值按照等号分割没关系,因为 Value 都是编码了的,不会含有等号,但是 Cookie 中是可能会有等号的,比如 Base64 编码过的值里,大部分都有。同样,获取 Cookie 的办法也木有,自己从 Header 里找吧。接下来模拟登陆成功后的跳转,用过Asp.net 的知道有个Response.Redirect不过 HttpListenerRequest 肯定是没有这个办法的,可以通过设置 Header 302 重定向就行了。

 

对于较大的页面,也许还是希望用Gzip压缩一下,需要设置 Content-Encoding 为 Gzip。我这里处理比较简单,是不管客户端的 Accept-Type 的,不过现代浏览器基本都支持了。

 

对相应内容进行压缩:

 

既然是纯 C#,没有了 WebForm 和 MVC 这类框架,分页处理也显得不简单了,从网上改造了一个 PHP 写的分页类,果然 PHP 是最好的语言。这不是取数据时的分页,而是显示时候的分页。

 

用 SimpleMDE 作为 Markdown 编辑器,,谁用谁知道,对于富文本的排版,我始终无能为力,Word 也不会用,markdown 真好用!SimpleMDE 是没有上传图片的功能,需要自己处理,不过自定义按钮官方文档中有,我只是做了写微小的工作,为按钮加个选图片和上传的事件,这需要 jQuery 和 jQuery.Form 的支持。如果你的接口是外部服务或者阿里云OSS,要记得设置跨域,不然报错,这个搞过开发的都懂得。最初版本的后台 Markdown 渲染用的 Github 上的 star 最多的那一个 Markdig,在 CentOS 7 下 mono 环境运行报错,换了 CommonMark 使用,这个在 Nuget 上能找到。最终的最终,把所有资源都打包进了资源文件,用 ILMerge 合并程序集,你的服务端就只剩下一个 EXE 了。

 

以上就是小编的今日分享,希望对您有所帮助。

阅读更多内容
上一篇漫谈代理服务器与VPN
下一篇简析三种常用的服务器存储设备优缺点

声明:本页内容由郑州维尼网络收集编辑所得,所有资料仅供用户参考,转载请保留此链接http://www.zzwn.cn/domain/1818.html

本文标签:

 

相关资讯 Related Info
相关分类 News Classification
解决方案 Solutions
相关热点 Hot spot
无服务器知识大放送 无服务器知识大放送
  1. 我们的承诺
  2. 我们的实力
  3. 我们的未来
郑州做网站咨询电话 建站咨询

151-3895-5886

网站备案安全放心网站

地址:郑州市上街区和昌都汇广场 / 电话:151-3895-5886
客服QQ: 7758021 / 邮箱:admin@zzwn.cn
Copyright © 2010-2019 郑州融科网络 版权所有