http请求/响应报文及工作原理

http(Hypertext transfer protocol,超文本传输协议),属于应用层协议,目前主流web浏览器使用的是http/1.1,它是基于请求/响应的模型,基于http开发的web应用都是典型的C/S(Client/Server)结构,即客户端发送请求,服务端响应请求。客户端发送的请求包含在请求报文中,服务端响应请求的内容也包含在响应报文中。http协议是无状态的,也就是说一次访问了服务器,下次服务器不会记得客户端曾经访问过,正因为这个特性,使得http支持多并发很容易。

HTTP请求报文


HTTP请求报文由四部分组成,分别是请求行,请求头部,空行,请求包体

请求行

有三个字段,分别是Method、URI、Version,中间用空格隔开
请求方法WEB开发最常用的就是GET和POST了,
GET从名字上看就是获取资源,通过GET想服务器请求资源时,服务器将URL指定的URL的资源回送给客户端,如果有参数用“?parameter1=xxxx&parameter2=yyyy”追加到URL后面,get传送的数据量是有限制的,不适合传送大文本或者多媒体资源,而且提交重要信息时用get不安全,因为请求参数是暴露的。

POST是向服务器传送数据的,用来传送大量文本时,比如更新信息,提交表单,将提交的信息封装在请求报文中,以名称/值得形式传送给服务器。相比GET而言,大小没有限制,而且安全性更高,但是效率不及GET

URI(Uniform Resource Identifier,统一资源标识)就是向服务器请求的资源,用来定位web上的资源。

Version:目前使用的版本是http/1.1,http/2.0也即将到来,据说是采用的https://

请求头部

请求头部是以键值对的形式存在的,在请求头部键和值使用:隔开的。

Host: www.baidu.com
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
Cookie: BAIDUID=C33A80E4932B6D19A78900566D13F1A2:FG=1; BIDUPSID=C33A80E4932B6D19A78900566D13F1A2; BD_UPN=13314552; BD_HOME=0; H_PS_PSSID=13165_12942_1430_13075_12867_13322_12691_13348_12723_12797_13309_13325_13203_13161_13256_8498
Connection: keep-alive

上面是一个请求报文的请求头
Host:请求的主机名
User-Agent:浏览器信息
Accept: 浏览器可接受的响应MIME的类型,*/*表示可以接受任意的类型
Accept-Language: 浏览器接受的语言
Accept-Encoding: 浏览器可接受的编码和压缩方式
Cookie:发送的Cookie信息
Connection:连接方式有CLOSE和KEEP-ALIVE,短连接和长连接,早起都是采用的CLOSE方式,及请求后得到响应就释放连接,后来为适应互联网的法中采用了keep-alive,它能在响应后还保持一定时间的连接。

空行

标记请求头部结束

请求包体

请求包体是为POST使用的,它封装了表单信息

响应报文


响应报文由四部分组成,分别是响应行,响应头部,空行,响应包体

响应头

响应头由三个部分组成,分别是版本协议,状态码,状态描述三部分

HTTP/1.1 200 OK

上面响应头部表示http协议的版本是1.1,
200是状态码,表示请求发送成功,而且也成功收到服务器的回应
状态描述是OK,表示浏览器接受成功
状态码分为以下几类:
1XX 请求已发出
2XX 处理请求成功
3XX 重定向
4XX 客户端出现错误
5XX 服务端出现错误

WEB开发最常见的状态码404,表示服务器找不到资源,500,服务器异常,不能完成一次请求。

响应头部

Server: bfe/1.0.8.1
Date: Sat, 04 Apr 2015 02:49:41 GMT
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
Cache-Control: private
cxy_all: baidu+8ee3da625d74d1aa1ac9a7c34a2191dc
Expires: Sat, 04 Apr 2015 02:49:38 GMT
X-Powered-By: HPHP
bdpagetype: 1
bdqid: 0xb4eababa0002db6e
bduserid: 0
Set-Cookie: BDSVRTM=0; path=/
BD_HOME=0; path=/
H_PS_PSSID=13165_12942_1430_13075_12867_13322_12691_13348_12723_12797_13309_13325_13203_13161_13256_8498; path=/; domain=.baidu.com
__bsi=18221750326646863206_31_0_I_R_2_0303_C02F_N_I_I; expires=Sat, 04-Apr-15 02:49:46 GMT; domain=www.baidu.com; path=/
Content-Encoding: gzip
X-Firefox-Spdy: 3.1

上面是一个响应头信息
Server:是服务器软件和版本
Date:信息发送时间
Content-Type:向浏览器指明接受内容的类型
Vary:不可缓存的请求头列表;
Cache-Control:指定缓存机制,有如下缓存机制:public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。
public,可被任何缓存区缓存
private,指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。
no-cache:指示不可缓存
no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
根据缓存超时
max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale 指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以
接收超出超时期指定值之内的响应消息。

Expires: 表示存在时间,允许客户端在这个时间之前不去检查(发请求),等同max-age的
效果。但是如果同时存在,则被Cache-Control的max-age覆盖。

空行

标记响应头部结束

请求包体

服务器返回给客户端的内容,如果是web浏览器返回html页面

http请求响应步骤


http请求步骤归纳起来就是:
建立连接->发出请求->响应->释放连接

http是应用层协议,离不开传输层协议的支撑,所以客户端与服务端必须先建立tcp连接,然后通过这个连接向服务端发送请求报文,服务器就收到请求报文后,根据请求资源的路径读取资源文件,并写入到I/O,通过tcp连接由客户端连接,当一次响应结束后,根据请求报文的Connection字段判断是否该断开连接。

如果在地址栏输入了http://www.whizape.com发生了什么呢?

1.查找dns域名服务器对应的ip地址。
2.根据端口号80,与远程服务器建立tcp连接
3.浏览器发送请求报文到服务器,该请求作为tcp三次握手的第三个报文发送给服务器。
4.服务器响应请求,将html页面发送给浏览器
5.释放tcp连接
5.浏览器解析html文本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值