http请求/响应报文及工作原理 您所在的位置:网站首页 python发送can报文 http请求/响应报文及工作原理

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

#http请求/响应报文及工作原理| 来源: 网络整理| 查看: 265

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¶meter2=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; 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文本



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有