
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: 请求报文格式
请求报文可以用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 :响应报文格式
相应阶段报文,给一个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等应用层协议!



本文地址:http://www.rainfly.cn/?post=240
版权声明:若无注明,本文皆为“雨夜轩”原创,转载请保留文章出处。

还有小板凳哦!