1. 使用谷歌/火狐浏览器分析

在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来。而浏览器和服务器之间的传输协议是HTTP,所以:

  • HTML是一种用来定义网页的文本,会HTML,就可以编写网页;

  • HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信。

Chrome浏览器提供了一套完整地调试工具,非常适合Web开发。

安装好Chrome浏览器后,打开Chrome,直接打开网页按F12“”即可

说明

  • Elements显示网页的结构
  • Network显示浏览器和服务器的通信

我们点Network,确保第一个小红灯亮着,Chrome就会记录所有浏览器和服务器之间的通信:

2. http协议的分析

当我们在地址栏输入www.sina.com时,浏览器将显示新浪的首页。在这个过程中,浏览器都干了哪些事情呢?通过Network的记录,我们就可以知道。在Network中,找到www.sina.com那条记录,点击,右侧将显示Request Headers,点击右侧的view source,我们就可以看到浏览器发给新浪服务器的请求:

2.1 浏览器请求

说明

最主要的头两行分析如下,第一行:

    GET / HTTP/1.1

GET表示一个读取请求,将从服务器获得网页数据,/表示URL的路径,URL总是以/开头,/就表示首页,最后的HTTP/1.1指示采用的HTTP协议版本是1.1。目前HTTP协议的版本就是1.1,但是大部分服务器也支持1.0版本,主要区别在于1.1版本允许多个HTTP请求复用一个TCP连接,以加快传输速度。

从第二行开始,每一行都类似于Xxx: abcdefg:

    Host: www.sina.com

表示请求的域名是www.sina.com。如果一台服务器有多个网站,服务器就需要通过Host来区分浏览器请求的是哪个网站。

2.2 服务器响应

继续往下找到Response Headers,点击view source,显示服务器返回的原始响应数据:

HTTP响应分为Header和Body两部分(Body是可选项),我们在Network中看到的Header最重要的几行如下:

    HTTP/1.1 200 OK

200表示一个成功的响应,后面的OK是说明。

如果返回的不是200,那么往往有其他的功能,例如

  • 失败的响应有404 Not Found:网页不存在
  • 500 Internal Server Error:服务器内部出错
  • ...等等...
    Content-Type: text/html

Content-Type指示响应的内容,这里是text/html表示HTML网页。

请注意,浏览器就是依靠Content-Type来判断响应的内容是网页还是图片,是视频还是音乐。浏览器并不靠URL来判断响应的内容,所以,即使URL是http://www.baidu.com/meimei.jpg,它也不一定就是图片。

HTTP响应的Body就是HTML源码,我们在菜单栏选择“视图”,“开发者”,“查看网页源码”就可以在浏览器中直接查看HTML源码:

浏览器解析过程 

当浏览器读取到新浪首页的HTML源码后,它会解析HTML,显示页面,然后,根据HTML里面的各种链接,再发送HTTP请求给新浪服务器,拿到相应的图片、视频、Flash、JavaScript脚本、CSS等各种资源,最终显示出一个完整的页面。所以我们在Network下面能看到很多额外的HTTP请求。

3. 总结

3.1 HTTP请求

跟踪了新浪的首页,我们来总结一下HTTP请求的流程:

3.1.1 步骤1:浏览器首先向服务器发送HTTP请求,请求包括:

方法:GET还是POST,GET仅请求资源,POST会附带用户数据;

路径:/full/url/path;

域名:由Host头指定:Host: www.sina.com

以及其他相关的Header;

如果是POST,那么请求还包括一个Body,包含用户数据

3.1.1 步骤2:服务器向浏览器返回HTTP响应,响应包括:

响应代码:200表示成功,3xx表示重定向,4xx表示客户端发送的请求有错误,5xx表示服务器端处理时发生了错误;

响应类型:由Content-Type指定;

以及其他相关的Header;

通常服务器的HTTP响应会携带内容,也就是有一个Body,包含响应的内容,网页的HTML源码就在Body中。

3.1.1 步骤3:如果浏览器还需要继续向服务器请求其他资源,比如图片,就再次发出HTTP请求,重复步骤1、2。

Web采用的HTTP协议采用了非常简单的请求-响应模式,从而大大简化了开发。当我们编写一个页面时,我们只需要在HTTP请求中把HTML发送出去,不需要考虑如何附带图片、视频等,浏览器如果需要请求图片和视频,它会发送另一个HTTP请求,因此,一个HTTP请求只处理一个资源(此时就可以理解为TCP协议中的短连接,每个链接只获取一个资源,如需要多个就需要建立多个链接)

HTTP协议同时具备极强的扩展性,虽然浏览器请求的是http://www.sina.com的首页,但是新浪在HTML中可以链入其他服务器的资源,比如<img src="http://i1.sinaimg.cn/home/2013/1008/U8455P30DT20131008135420.png">,从而将请求压力分散到各个服务器上,并且,一个站点可以链接到其他站点,无数个站点互相链接起来,就形成了World Wide Web,简称WWW。

3.2 HTTP格式

每个HTTP请求和响应都遵循相同的格式,一个HTTP包含Header和Body两部分,其中Body是可选的。

HTTP协议是一种文本协议,所以,它的格式也非常简单。

3.2.1 HTTP GET请求的格式

  1. GET /path HTTP/1.1
  2. Header1: Value1
  3. Header2: Value2
  4. Header3: Value3

每个Header一行一个,换行符是\r\n。

3.2.2 HTTP POST请求的格式:

  1. POST /path HTTP/1.1
  2. Header1: Value1
  3. Header2: Value2
  4. Header3: Value3
  5. body data goes here...

当遇到连续两个\r\n时,Header部分结束,后面的数据全部是Body。

3.2.3 HTTP响应的格式:

  1. 200 OK
  2. Header1: Value1
  3. Header2: Value2
  4. Header3: Value3
  5. body data goes here...

HTTP响应如果包含body,也是通过\r\n\r\n来分隔的。

请再次注意,Body的数据类型由Content-Type头来确定,如果是网页,Body就是文本,如果是图片,Body就是图片的二进制数据。

当存在Content-Encoding时,Body数据是被压缩的,最常见的压缩方式是gzip,所以,看到Content-Encoding: gzip时,需要将Body数据先解压缩,才能得到真正的数据。压缩的目的在于减少Body的大小,加快网络传输。

本文转自:https://blog.csdn.net/qq_26442553/article/details/95031100 作者:牛大财有大才

老猿Python,跟老猿学Python!
博客地址:https://blog.csdn.net/LaoYuanPython
请大家多多支持,点赞、评论和加关注!谢谢!

转载于:https://www.cnblogs.com/LaoYuanPython/p/11166823.html

转:HTTP协议简介与在python中的使用详解相关推荐

  1. python的抽象类详解_第7.19节 Python中的抽象类详解:abstractmethod、abc与真实子类...

    第7.19节 Python中的抽象类详解:abstractmethod.abc与真实子类 一. 引言 前面相关的章节已经介绍过,Python中定义某种类型是以实现了该类型对应的协议为标准的,而不是以继 ...

  2. Python中self用法详解

    Python中self用法详解 https://blog.csdn.net/CLHugh/article/details/75000104 首页 博客 学院 下载 图文课 论坛 APP 问答 商城 V ...

  3. 【 Python 中 int 用法详解】(转载)

    Python 中 int 用法详解 欢迎转载,转载请注明出处! 文章目录 Python 中 int 用法详解 0. 参考资料 1. int 的无参数调用 2. int 接收数字作为参数 3. int ...

  4. Python 中 int 用法详解

    Python 中 int 用法详解 欢迎转载,转载请注明出处! 文章目录 Python 中 int 用法详解 0. 参考资料 1. int 的无参数调用 2. int 接收数字作为参数 3. int ...

  5. python中的字符串详解(附实现文字跑马灯效果)

    python中的字符串详解 1.什么是字符串 ​ 相信大家对字符串应该是再熟悉不过了吧,因为日常生活中的一句话,或是路边的一则广告,其实它都相当于一个字符串,而顾名思义,字符串也就是一串串的由零个或多 ...

  6. python中的GIL详解

    python中的GIL详解 参考Python-- GIL 锁简述 GIL是什么 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念.就 ...

  7. Python 中 with 用法详解

    浅谈 Python 的 with 语句:https://developer.ibm.com/zh/articles/os-cn-pythonwith/ python3,浅谈with的神奇魔法:http ...

  8. 『无为则无心』Python面向对象 — 47、Python中的self详解

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  9. Python中time模块详解

    转载自:http://qinxuye.me/article/details-about-time-module-in-python/ 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间 ...

最新文章

  1. 2020年最具潜力44个顶级开源项目,涵盖11类 AI 学习框架、平台
  2. 2021年Graph ML热门趋势和主要进展总结
  3. gSTM:Ubuntu 上的 SSH Tunneling 图形界面管理工具
  4. amd cpu 不兼容centos5.5_AMD放弃兼容性?这事简单也不简单
  5. ThreadLocal的理解
  6. oracle 01013 02063,Oracle11g dblink用户密码大写限制-ORA-02063: preceding line from FOR244_DBLINK...
  7. Springboot系列之Shiro、JWT、Redis 进行认证鉴权
  8. 手写 new 操作符
  9. php 转通达信数据格式,通达信数据格式
  10. php7安装详解、,php7安装详解(windows环境)
  11. 计算机编程与数控宏程序实例教程,数控车床编程教程,图文实例详解
  12. LBS基站定位接口代码示例
  13. oracle语句执行过程
  14. html a4纸张大小像素,CSS设置A4纸张大小
  15. 计算机应用程序无响应,必看!电脑运行卡或软件卡死无响应,怎么办?
  16. 计算机二级C语言公共基础知识,以及习题总结(三)查找和排序
  17. X509数字证书格式
  18. 使用easyExcel实现浏览器下载Excel。
  19. css布局——定位布局
  20. 上班族如何提高“非工资收入”?跟清北大咖零基础学理财

热门文章

  1. 玩转GIT系列之【如何配置GIT的用户名/密码/密钥】
  2. [Docker] Centos7 安装docker-18.03.1-ce(离线安装)
  3. Linux系统开机启动过程分析
  4. ARM Cortex-M3相比于ARM其他系列微控制器的优势和特点
  5. 树莓派gparted启动失败解决方法
  6. C/C++中rand()函数产生随机数的用法
  7. 一般线性模型和混合线性模型_线性混合模型如何工作
  8. 大疆 机器学习 实习生_我们的数据科学机器人实习生
  9. Ubuntu开启telnet服务
  10. 为什么越来越多的人都拒绝办信用卡?