之前写过一篇使用HttpListener作为简单的HTTP服务器,后面实际项目中就用到了,测试发现,在Win7下如果不是以管理员权限运行程序,使用HttpListener是会出错了。
所以就很好奇HTTP服务器是怎么个回事。也就借此机会熟悉一下HTTP协议的内容,用TCP来实现一遍HTTP客户端和服务端,啥简介的这里就不写了。直接记录一下关键内容。
HTTP请求报文格式:
请求行CRLF
请求头CRLF
CRLF
请求主体

请求行格式:请求方法 URL 协议版本
请求头信息与请求主体之间必须要添加CRLF。
如果是POST请求,则需要增加请求主体内容,此时请求头中必须添加Content-Length信息,标明请求主体信息的内容长度。
简易GET请求报文内容:
GET /remote HTTP/1.1\r\n
Host: localhost:1205\r\n
\r\n
Get请求无请求主体,所以请求主体为空
简易POST请求报文内容:
POST / HTTP/1.1\r\n
Host: localhost:1205\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Content-Length:22\r\n
\r\n
username=xiao&pwd=ming

C#实现如图:

HTTP响应报文格式
状态行CRLF
响应头CRLF
CRLF
响应主体

状态行格式:协议版本 状态码 描述
简易响应报文:
HTTP/1.1 200 OK\r\n
Content-Length:22\r\n
Content-Type: application/json\r\n
\r\n
{"info":"hello world"}
C#实现如图:

最新文章

  1. ubuntu15.04 nginx1.6.5 配置虚拟主机
  2. T-SQL实用查询之常用SQL语句
  3. POSIX正则表达式
  4. Android开源框架——Volley
  5. Kmeans方法
  6. LintCode Reverse LinkedList (ArrayList 和 LinkedList 的区别)
  7. ini_set 设置php配置项 在windows和linux下的不同
  8. As3 Anchored Container 代码设置锚点旋转
  9. (四)主控板改IP,升级app,boot,mac
  10. 用java运行Hadoop程序报错:org.apache.hadoop.fs.LocalFileSystem cannot be cast to org.apache.
  11. 并查集 poj1611&poj2492
  12. EBS-PAC成本更新事务处理
  13. Dos.ORM Select查询 自定义列
  14. Android中查看布局文件中的控件(view,id)在哪里被调用(使用)
  15. MySQL 优化实施方案
  16. Graham凸包算法简介
  17. BATCH+VBS脚本自动执行命令
  18. 解决:启用多线程调用webBrowsers函数报错:指定的转换无效
  19. bluemix创建docker容器
  20. 【转】 VGA时序及其原理

热门文章

  1. LeetCode---Bit Manipulation && Design
  2. 安装vncserver, vncviewer--远程桌面
  3. For 循环 kotlin(10)
  4. Log4j rootLogger根配置以及4种日志级别
  5. ubuntu下如何高速下载?
  6. 【转】jstat命令查看jvm的GC情况 (以Linux为例)
  7. Ansible 直接请求远程主机执行命令
  8. PHPBase64格式编码图片
  9. Java通过字节分割字符串
  10. linux下Eclipse进行C编程时动态链接库的生成和使用