注册

HTTP协议原理结构分析
首页 > 嵌入式开发 > Linux嵌入式    作者:RainFly   2016年8月15日 9:19 星期一   热度:5155°   字号:   评论:1    
时间:2016-8-15 9:19   热度:5155°  评论:1 条 

1.协议特点 


 a.C/S模式

 b.客户端向服务器发出Request 只需传送请求方法和路径, 通信速度快


方法:                                                                        
GET  通过请求URI得到资源     浏览器向服务器一般请求
POST,用于添加新的内容         发送form表单
PUT 用于修改某个内容
DELETE, 删除某个内容
CONNECT, 用于代理进行传输,如使用SSL
OPTIONS 询问可以执行哪些方法
PATCH, 部分文档更改
PROPFIND  查看属性
PROPPATCH  设置属性
MKCOL   创建集合(文件夹)
COPY 拷贝
MOVE   移动
LOCK  加锁
UNLOCK   解锁
TRACE 用于远程诊断服务器
HEAD  类似于GET, 但是不返回body信息,用于检查对象是否存在,以及得到对象的元数据


c. 传输类型很灵活:只需要给它加上Content-Type  MIME类型值即可

d.发送完请求报文,立即和服务器断开连接(PS:虽然TCP的80端口可以建立多个Socket连接但是如果连接过多服务器响应其他请求放慢),服务器所需要完成的是将端口接受请求放入等待队列,根据算法进行选择相应的连接请求进行处理。 节省了客户端进行等待的时间

e.发送完数据包之后,如果服务器不Response,需要将所有的数据包重新发送。

 2.文件格式

                 Request: 请求报文格式

                bcee8ee1-8718-3b39-aaea-e905effbabf8.gif

            请求报文可以用Google浏览器进行查看其发送 

发送的报文实例

POST报文头如下:

POST /sn/index.php HTTP/1.1
Accept: */*
Accept-Language: zh-cn
host: localhost


Content-Type: application/x-www-form-urlencoded
Content-Length: 12
Connection:close
sn=123&n=asa
在http头后边有一空行,空行后边接着发送post数据,长度通过Content-Length: 12
指出,此post数据中包含两项
sn=123
n=asa
其中:Content-Type: application/x-www-form-urlencoded 指定POST数据的编码类型
Content-Length: 12 POST数据的长度

GET:
GET报问头如下:
GET /sn/index.php?sn=123&n=asa HTTP/1.1
Accept: */*
Accept-Language: zh-cn
host: localhost


Content-Type: application/x-www-form-urlencoded
Content-Length: 12
Connection:close

 

                   Response :响应报文格式

                1136702c-79ea-3bf7-b2a0-c4826296d46f.gif

相应阶段报文,给一个API 调试工具 使用GET请求获得数据 http://apistore.baidu.com/astore/toolshttpproxy

我给http:www.baidu.com服务器发送了一个GET请求下面是相应回复的报文 

Response Header
HTTP/1.1 200 OK
Date: Tue, 16 Aug 2016 01:58:22 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: Keep-Alive
Vary: Accept-Encoding
Set-Cookie: BAIDUID=E6BADB45ADCAFAF36BAE6C63E46613C9:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BIDUPSID=E6BADB45ADCAFAF36BAE6C63E46613C9; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1471312702; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BDSVRTM=0; path=/
Set-Cookie: BD_HOME=0; path=/
Set-Cookie: H_PS_PSSID=1465_18241_17949_18560_17001_11693_20848_20856_20837_20771_20719; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Cache-Control: private
Cxy_all: baidu+955142e509dca9cdda759e1be73fb859
Expires: Tue, 16 Aug 2016 01:57:59 GMT
X-Powered-By: HPHP
Server: BWS/1.1
X-UA-Compatible: IE=Edge,chrome=1
BDPAGETYPE: 1
BDQID: 0xc83e2bbf001302cc
BDUSERID: 0
Content-Encoding: gzip

 这里可以看到对应上面图二的结果

版本信息:HTTP/1.1   

HTTP 1.1中的五类状态码:  

100-199 用于指定客户端应相应的某些动作。   

200-299 用于表示请求成功。   

300-399  用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。   

400-499 用于指出客户端的错误。  

 500-599 用于支持服务器错误。 

OK:就是OK

剩余的都是头部行,携带了一些关于发送时间 格式 编码之类的信息

Content-Encoding: gzip  此处是指服务器将Response文件进行GZIP压缩, 当客户端接收后根据Content-Encoding: gzip执行解压缩 (这种方法会降低服务器宽带压力,但是增加了服务器压力,加快网页打开速度)

对文件部分解码的到了Response Body, 就是HTML信息。

在HTTP协议是建立在TCP/IP传输控制协议基础上的,所以所有的文件必须是客户端和服务器TCP三次握手已经建立连接,后面我还会继续了解剖学习 , 还会用C语言实现 HTTP FTP等应用层协议!


  您阅读这篇文章共花了:  
捐赠支持:如果觉得这篇文章对您有帮助,请 "扫一扫"鼓励作者!
二维码加载中...
本文作者:RainFly      文章标题: HTTP协议原理结构分析
本文地址:http://www.rainfly.cn/?post=240
版权声明:若无注明,本文皆为“雨夜轩”原创,转载请保留文章出处。

还有小板凳哦!

宁国房产网  Google Chrome 55.0.2883.87 Google Chrome 55.0.2883.87 Windows 7 Windows 7  2017-11-14 22:13 沙发
谢谢分享!还是很有必要的

QQ游客评论

返回顶部    首页    捐赠支持    手气不错    友情链接    关于我们    站长工具    站长介绍    手机版本    后台登陆   
版权所有:雨夜轩    站长:RainFly    特别鸣谢   文章归档   皖ICP备15003600号-1   百度统计
Copyright©2015 雨夜轩 Powered by emlog强力驱动 七牛CDN全球加速 360站长联盟安全认证 中国博客联盟荣誉成员 可信赖网站 站点地图   
页面加载耗时:0.034秒 数据库查询次数:13次
背景设置