C++解析HTTP协议

C++解析HTTP协议

HTTP(hypertext transport protocol 超文本传输协议):一种无状态的,以请求/应答方式运行的协议,它使用可扩展的语义和自描述消息格式,与基于网络的超文本信息系统灵活的互动。

1. http请求

http请求消息分为四部分
1. 请求行
	不管是get请求还是post请求,请求行分为三部分
2. 请求头
3. 空行
4. 客户端想服务器提交的数据
GET /doing HTTP/1.1
Host: 10.1.18.4
User-Agent: Mozilla/5.0 (Windows NT 6.2; rv:40.0) Gecko/20100101 Firefox/40.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
Referer: http://10.1.18.4/
Connection: keep-alive
1. 请求行	GET /doing HTTP/1.1
三部分:请求方式	请求的资源(/不代表服务器根目录,是服务器给客户端提供的资源目录)	HTTP协议版本	还有看不见的\r\n
2. 请求头	若干个键值对
Host: 10.1.18.4
User-Agent: Mozilla/5.0 (Windows NT 6.2; rv:40.0) Gecko/20100101 Firefox/40.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
Referer: http://10.1.18.4/
Connection: keep-alive
  • get

    • 提交的数据,不安全,提交的数据会显示到地址栏中,被别人看到之后,数据就泄露了
    • 图中的 useridroomid 就是浏览器向服务器提交的数据地址栏中的数据会放到某块缓冲中,地址栏对应的缓存是有上限的,在几k左右
  • post

    • 提交的数据并不会显示到地址栏中,完全不可见的,因此更安全
  1. 请求行,用来说明请求类型,要访问的资源以及所使用的http版本。get说明请求类型为get,该行的最后一部分说明使用的是http 1.1版本

  2. 请求头,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息。从第二行起为请求头部,host将指出请求的目的地。User-Agent,服务器端和客户端脚本都能访问它,它是客户端类型检测逻辑的重要基础。该信息由你的客户端来定义,并且在每个请求中自动发送等。

  3. 空行,请求头部后面的空行是必须的。即使第四部分的请求数据为空,也必须有空行。

  4. 请求数据也叫主体,可以添加任意的其他数据,上面的请求数据为空。

1.2 http响应

  1. 状态行,由http协议版本号, 状态码, 状态消息三部分组成。上面http版本号为http/1.1,状态码为200,状态消息为"OK"。
  2. 消息报头,用来说明客户端要使用的一些附加信息。Date:生成响应的日期和时间;Content-Type:指定了MIME类型的html(text/html),编码类型是UTF-8
  3. 空行,消息报头后面的空行是必须的。
  4. 响应正文,服务器返回给客户端的文本信息,空行后面的html部分为响应正文。

1.3 http状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进—步的操作(网络地址的重

新访问)

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

常见状态码

200 OK	客户端请求成功
400 Bad Request客户端请求有语法错误,不能被服务器所理解
401 Unauthorized请求未经授权,这个状态代码必须和Www-Authenticate报头域一起使用
403 Forbidden 服务器收到请求,但是拒绝提供服务
404 Not Found 请求资源不存在,eg:输入了错误的URL
500 Internal Server Error服务器发生不可预期的错误
503 Server Unavailable 服务器当前不能处理客户端的请求,一
段时间后可能恢复正常
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值