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等应用层协议!