Python实现web服务器入门学习之 HTTP协议简介

  HTTP(HyperText Transfer Protocol)是一种通讯协议,即浏览器(客户端)和web服务器之间向对方发送请求报文前组织待传输报文和收到应答报文后解析应答报文时所遵循的一种约定,而浏览器和web服务器之间的报文传输还是通过TCP协议。

  2.HTTP初体验

  2.1 一次简单的HTTP请求和应答

  下面通过Chrome浏览器充当客户端,将网络调试助手mNetAssist软件设置成TCP服务器来充当web服务器,来观察一次简单的HTTP请求。

  (1)mNetAssist充当服务器:

  (2)Chrome浏览器发起请求:

  (3)服务器接收到来自客户端的请求数据:

  浏览器发给服务器的请求一般不止如下所示的请求报文头,还包括请求报文体,只是浏览器发起请求的方式有很多,而此请求的特殊之处在于:浏览器的请求方式为GET,一般只有报文头。

  GET /index.html HTTP/1.1,表示浏览器以GET模式请求名为index.html的页面(第一个/后的指定路径下的文件,即为用户想要请求的网页),且HTTP协议版本号为1.1;

  Host: 192.168.0.105:8080,表示发起请求的服务器主机IP地址为192.168.0.105,端口为8080;

  Connection: keep-alive,表示连接方式为长连接;

  Upgrade-Insecure-Requests: 1

  User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36,表示常见浏览器及其版本;

  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9,表示指定浏览器接收指定格式的文件;

  Accept-Encoding: gzip, deflate,向服务器指明浏览器接受的文件压缩格式;

  Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,接受的语言

  (4)服务器回复数据给浏览器:

  实际上,服务器在根据浏览器的请求返回对应资源,如果服务器找到对应资源,则其回复浏览器的应答中,第一行必须是HTTP/1.1 200 OK,这是服务器应答报文头的一部分,而与之空一行的位置用于放置浏览器完成解析后要向用户展示的数据(即应答报文体),如此处的

  TakingCoding4Granted

  需要指出的是,服务器给浏览器的应答报文头一般远不止HTTP/1.1 200 OK,如下面是使用浏览器访问www.baidu.com时,由百度服务器返回的应答报文头:

  HTTP/1.1 200 OK,表示服务器找了浏览器请求的资源,200是成功应答码

  Cache-Control: no-cache

  Connection: keep-alive,表示连接方式为长连接

  Content-Encoding: gzip

  Content-Type: text/html;charset=utf-8,表示返回的资源格式为text或HTML,资源以utf-8编码,浏览器也需要以相同的编码格式解码才可以正确显示

  Coremonitorno: 0郑州做流产多少钱 http://www.kdwtrl.com/

  Date: Thu, 30 Apr 2020 14:02:56 GMT

  Server: apache,服务器类型和版本

  Set-Cookie: H_WISE_SIDS=146326_144703_143879_145114_145496_146114_145498_145858_144419_144134_145270_146538_131862_131246_144682_137743_144741_144250_141942_127969_146551_145804_140593_143492_145876_131423_100806_142209_145910_146002_145600_126064_107314_144378_140984_146136_139909_144872_139883_146395_144966_145607_140311_141910_145397_143859_145442_139914_110085; path=/; expires=Fri, 30-Apr-21 14:02:56 GMT; domain=.baidu.com,表示cookie设置

  Set-Cookie: bd_traffictrace=302202; expires=Thu, 08-Jan-1970 00:00:00 GMT

  Set-Cookie: rsv_i=9ee87s%2FgHvgZi7KfF1c8DHvRqrjal7kdF14ZHbPj6u3CMcnXDK3uJew3d7twPz8Sep3xfyg%2FnMHAB1cmzen%2FaQlfkpywhl0; path=/; domain=.baidu.com

  Set-Cookie: BDSVRTM=361; path=/

  Set-Cookie: eqid=deleted; path=/; domain=.baidu.com; expires=Thu, 01 Jan 1970 00:00:00 GMT

  Set-Cookie: __bsi=; max-age=3600; domain=m.baidu.com; path=/

  Strict-Transport-Security: max-age=172800

  Tracecode: 01766547700538102026043022

  Tracecode: 01762972250860277002043022

  Traceid: 158825537604496954988117031784588503278

  Vary: Accept-Encoding

  Transfer-Encoding: chunked

  (5)浏览器解析显示服务器返回的数据

posted @ 2020-05-21 16:41  网管布吉岛  阅读(380)  评论(0编辑  收藏  举报