HTTP协议简单了解,如何简单的实现一个web服务器

Stella981
• 阅读 499

其实这个协议有很多的可以分析的,然而HTTP又是最常用的协议了,于是就从这个入手吧。

分析用到的工具: firefox+WSExplorer

先通过一个浏览器访问 http://127.0.0.1:8080

通过在WsExplorer 中查看服务器的第一次请求中我们收到了

GET /index HTTP/1.1

Host: 127.0.0.1:8080

User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Connection: keep-alive

这个就是HTTP的请求头信息了,看来只是简单的在浏览器输入一个地址,程序还是做很多事情的,第一行中通过空格隔开了有3个参数,第一个参数代表当前使 用的请求方式,而通过浏览直接输入地址方式为GET,二的个参数为请求的路径,如果存在参数的也会直接在后面直接通过追加,而使用POST方式情况会是请求头信息结束完后在追加一个请求头信息 Content-Length: 13 来指定这个POST的数据域的大小。然后会是数据信息 就是这些参数告诉服务器用户的信息,如使用何种编码来请求服务器,用户使用浏览器信息,等。服务解析这些信息就能知道用户要请求那个页面

既然既然知道用户在请求那个页面服务器需要的就是返回用户信息。这里就是响应头了

HTTP/1.1 200 OK

Server: Apache-Coyote/1.1

Set-Cookie: JSESSIONID=34A40E9B57CAC849311E1096D4A151ED; Path=/zrlog/; HttpOnly

Content-Type: text/html;charset=UTF-8

Content-Length: 5071

Date: Tue, 17 Feb 2015 14:48:47 GMT

--- 这里数据

这里也通上面一样。第一行数据也是3个。不过这里多的是响应状态及描述

浏览器收到响应头就会做一些事情了。如, text/html;charset=utf-8 告诉了这个的MimeType和需要使用的编码方式。set-cookie 及添加一个cookie信息到用户的浏览器中。而浏览器需要怎样去处理服务器响应的数据就依赖这些响应头。而MimeType 就会表示这些数据是什么了。如是css还是Html

整个流大致为 浏览器发起HTTP请求(建立连接后就直接进行HTTP协议头和请求头) 服务器收到进行处理响应,服务端根据请求里面的Connect头信息决定是否关闭连接。

说道这里对HTTP协议就有一个大致的了解,动手简单实现一个webserver

http://git.oschina.net/94fzb/simplewebserver

这个只是简单的实现对浏览器请求的处理,可以简单的展示一些静态页面,支持文件的上传,JSON数据的响应,Cookie+Session 简单的会话的实现,请求路由的支持。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Souleigh ✨ Souleigh ✨
3年前
前端性能优化 - 雅虎军规
无论是在工作中,还是在面试中,web前端性能的优化都是很重要的,那么我们进行优化需要从哪些方面入手呢?可以遵循雅虎的前端优化35条军规,这样对于优化有一个比较清晰的方向.35条军规1.尽量减少HTTP请求个数——须权衡2.使用CDN(内容分发网络)3.为文件头指定Expires或CacheControl,使内容具有缓存性。4.避免空的
Stella981 Stella981
3年前
AndroidStudio封装SDK的那些事
<divclass"markdown\_views"<!flowchart箭头图标勿删<svgxmlns"http://www.w3.org/2000/svg"style"display:none;"<pathstrokelinecap"round"d"M5,00,2.55,5z"id"raphael
Wesley13 Wesley13
3年前
P2P技术揭秘.P2P网络技术原理与典型系统开发
Modular.Java(2009.06)\.Craig.Walls.文字版.pdf:http://www.t00y.com/file/59501950(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.t00y.com%2Ffile%2F59501950)\More.E
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这