http请求
首行: [方法] + [url] + [版本]
header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示header部 分结束 body: 空行后面的内容都是body.
body允许为空字符串. 如果body存在, 则在header中会有 一个content-length属性来标识body的长度
http响应
首行: [版本号] + [状态码] + [状态码解释]
header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示header部 分结束
body: 空行后面的内容都是body. body允许为空字符串. 如果body存在, 则在header中会有 一个content-length属性来标识body的长度; 如果服务器返回了一个html页面, 那么html页 面内容就是在body中
实现一个最简单的 http 服务器.
在这个版本中, 我们只是简单解析 get 请求, 并根据请求的路径来构造出不同的响应.
路径为 /200, 返回一个 “欢迎页面”.
路径为 /404, 返回一个 “没有找到” 的页面.
路径为 /302, 重定向到其他的页面
在这个版本中, 我们只是简单解析 get 请求, 并根据请求的路径来构造出不同的响应.
在版本1 的基础上, 我们做出一些改进:
把解析请求和构造响应的代码提取成单独的类.
能够把 url 中的 query string 解析成键值对.
能够给浏南宁职业学院览器返回 cookie.
对照着 http 请求的格式, 创建属性: method, url, version, he小儿垂钓唐诗aders.
创建 patameters, 用于存放 query string 的解析结果.
创建一个静态方法 b北京高考状元揭晓uild, 用来完成解析 http 请求的过程.
从 socket 中读取数据的时候注意设置字符编码方式
创建一系列 getter 方法获取到请求中的属性.
单独写一个方法 parkv 用来解析 query string
根据 http 响应, 创建属性: version, status, message, headers, body
另外创建一个 outputstream, 用来关联到 socket 的 out成熟男人的网名putstream.
往 socket 中写入数据的时候注意指定字符编码方式.
创建一个静态方法 build, 用来构造 httprespon 对象.
创建一系列 tter 方法, 用来设置 httprespon 的属性.
创建一个 flush 方法, 用于最终把数据写入 outputstream
强化理解cookie
cookie就是一个字符串(里面的内容由程序员自己决定)
cookie从服务器来,服务器会在header中引入一个t-cookie字段,对应的值就会保存在浏览器中
cookie按照域名/地址来存,每个域名/地址有自己的cookie
cookei在后续访问相同的域名/地址的请求,就会自动带上cookie,服务器感知到这个cookie之后就可以在服务器端进行一些逻辑处理
在版本 2 的基础上, 再做出进一步的改进.
解析请求中的 cookie, 解析成键值对
解析请求中的 body, 按照 x-www-form-urlencoded 的方式解析.
根据请求方法, 分别调用 doget / dopost
能够返回指定的静态页面. 实现简单的会话机制.
属性中新增了 cookies 和 body
新增一个方法 parcookie, 在解析 header 完成后解析
cookie 新增了解析 body 的流程.
请求中没有cookie
响应中带有cookie字段,此时浏览器就会带有cookie
到此这篇关于java模拟实现http服务器项目实战的文章就介绍到这了,更多相关java http服务器内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-06 02:45:40,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/75ed1b66d62154cbe1f806502852be26.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Java模拟实现HTTP服务器项目实战.doc
本文 PDF 下载地址:Java模拟实现HTTP服务器项目实战.pdf
留言与评论(共有 0 条评论) |