http和socket的区别:

socket和http都能用于网络上的通信。

那既然有socket那么为什么需要http呢?

socket一般用于比较即时的通信和实时性较高的情况,最常见的就是QQ,微信等聊天和实时推送。

但是长时间网络连接耗电量快,对于手机来讲,手机网络情况复杂,进出电梯丢信号,需要实现复杂的重传。

手机网络连接是电信运营商的网关,网关不允许长时间连接。

然而http一般用于实时性要求不那么高的情况,比如信息反馈,图片上传,获取新闻信息。

http是一个无状态,无连接的协议。只能由客户端主动发起请求,服务器回送响应。

一个完整的HTTP请求过程,通常有下面7个步骤:

1.建立TCP连接

2.Web浏览器向Web服务器发送请求命令

3.Web浏览器发送请求头信息

4.Web服务器应答

5.Web服务器发送应答头信息

6.Web服务器想浏览器发送数据

7.Web服务器关闭TCP连接

一个HTTP请求一般由四部分组成:

1.HTTP请求的方法或动作,比如是GET还是POST请求

2.正在请求的URL,总得知道请求地址是什么吧

3.请求头,包含一些客户端环境信息,身份证信息等

4.请求体,也就是请求正文,请求正文可以包含提交的查询字符串信息,表单信息等

HTTP请求:

当我们在浏览器中输入一个URL然后回车,就会获取我们想要的资源。执行起来so easy!得到效果so amazing!

它是怎样发生的呢?

第一步我们在浏览器中输入baidu.com然后按下回车键。

第二步DNS解析出IP地址

解析出来bai.com.com ip地址是220.181.57.217:80

第三步浏览器向服务器发送请求。

浏览器向220.181.57.217:80发送请求

像“http://baidu.com/”中的斜杠是至关重要的。这种情况下,浏览器能安全的添加斜杠。而像“http: //example.com/folderOrFile”这样的地址,因为浏览器不清楚folderOrFile到底是文件夹还是文件,所以不能自动添加 斜杠。这时,浏览器就不加斜杠直接访问地址,服务器会响应一个重定向,结果造成一次不必要的握手。

第四步浏览器向web服务器发送給浏览器一个重定向响应。

这样浏览器就访问"https://www.baidu.com/"而不是"http://www.baidu.com/"

(这样做可能是为了安全考虑)

第五步浏览器跟踪重定向地址

现在浏览器知道“https://www.baidu.com/”是正确的访问地址,于是它便向它发送请求,并得到了响应,200表示成功。

第六步服务器HTML响应

连接状态:keep-alive

整个响应体是以gzip压缩的。

第七步浏览器渲染HTML响应

镶嵌在"https://www.baidu.com"html里面的内容多要经历和它一样的方式获取

这样我们就可以通过url获取从web服务器获取我们想要的数据。

HTTP协议请求篇

其实在我们整个访问中浏览器涉及到的就是HTTP协议中的请求,简单来说浏览器就是http协议中的请求部分

HTTP协议中请求包括三部分;
请求行,消息报头,请求正文

请求行以一个方法符号开头,以空格分开,后面跟着URL和协议版本,格式如下:

Method Request-URL HTTP-Version CRLF

Methon表示请求方法(GET , POST ,DELETE等);
Request-URI是一个统一资源标识符;
HTTP-Version表示请求的HTTP协议版本;
CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。

浏览器输入baidu.com

就是一个请求行:
Get baidu.com HTTP/1.1 CRLF
默认的是Get方式,HTTP版本协议可以在浏览器中查看,现在大多数多用的1.1

URL是网络上的资源定位符
每一个URL都代表唯一一个资源
就可以从web服务器获取你想要的数据了

了解到这里我们可以:

编写一个简单的HTTP客户端,通过原生的HTTP协议从任意的Web服务器上下载一些数据。

使用python内置库httplib,定义一个HTTPClient类,从远程主机获取数。

在fetch()方法中使用HTTP()函数及其他辅助函数(例如putrequest()和putheader())创建了一个虚拟的HTTP客户端,

客户端采用GET服务器获取资源

然后设定用户代理,其值为当前脚本(__file__)

Accept表明客户端可以接受任何类型数据信息。

此时完成了请求行:

Get baidu.com HTTP/1.1 CRLF

python httplib里面用的是HTTP/1.1版本

官方文档

发起请求的getreply()方法放在一个try-except块中。响应通过getfile()方法获取,然后读取数据流中的内容。

并且把从服务器获取类容打印出来

就可以看到从www.baidu.com中获取的一个网页

这样一个http浏览器就实现了。

下一篇将实现http服务器

HTTP协议--浏览器的实现相关推荐

  1. 浏览器服务器协议,浏览器工作原理之HTTP协议

    浏览器要做的事情, 就是把一个URL变成一个屏幕上可以显示的网页 大体流程是这样的: 浏览器首先使用HTTP协议或者HTTPS协议, 向服务端请求页面. 把请求回来的HTML代码经过解析, 构建成DO ...

  2. HTTP 协议 -- 浏览器缓存机制

    浏览器缓存机制 浏览器缓存机制主要是 HTTP 协议定义的缓存机制. HTTP 协议中有关缓存的缓存信息头的关键字有 Cache-Control,Pragma,Expires,Last-Modifie ...

  3. HTTP协议, 浏览器访问服务器, HTTP响应, HTTP请求, 访问百度

    浏览器访问服务器的过程 1/用户输入网址 2/浏览器请求DNS服务器,获取域名对应的IP地址(电脑连上网之后会被自动分配一个DNS服务器,域名跟ip是以键值对的形式存在DNS服务器,会按一定规则更新, ...

  4. http 协议 浏览器F12 拦击数据技巧

    过滤器里面可以放类似的链接地址 比如 get/api/等,就可以用了,多去尝试新鲜东西,不要怕,万一能行呢 点在在上面一点ctrl+F 全局搜索,就可以找到了要查找的字段,不要挨个去找,要想办法

  5. python 全栈开发,Day66(web应用,http协议简介,web框架)

    一.web应用 web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件.应用程序有两种模式C/S.B/S.C/S是客户端 ...

  6. (二)HTTP初相识--了解HTTP协议

    HTTP初相识--了解HTTP协议 浏览器背后的故事 HTTP协议的前世今生 透过TCPIP看HTTP DNS域名解析 回溯HTTP事务处理过程 与HTTP请求的第一次亲密接触 浏览器背后的故事 通过 ...

  7. Nodejs学习笔记(四)——http协议与服务器

    [目录] Nodejs学习笔记(一)--基础之全局对象.包和npm Nodejs学习笔记(二)--模块 Nodejs学习笔记(三)--同步和与异步之文件系统模块 Nodejs学习笔记(五)--expr ...

  8. javaweb_笔记1(系统架构;servlet分析,注册,生命周期;Servletconfig对象(四个方法)和Servletcontext对象;http协议,get,post)

    1.关于系统架构 1.1系统架构包括 C/S架构: Client/Server(客户端/服务器) 例如电脑上安装的各种软件,qq等,需要安装特定的软件 优点: 速度快(软件中数据大部分在客户端中,少量 ...

  9. 深入学习HTTP协议

    HTTP是什么?HTTP又不是什么? 简单来说HTTP是超文本传输协议,所以可以拆分成超文本.传输.协议 从协议上看 HTTP 是一个用在计算机世界里的协议.它使用计算机能够理解的语言确立了一种计算机 ...

最新文章

  1. Can't connect to MySQL server on '127.0.0.1' (10061) (code 2003)解决方法
  2. WCF的三个名称/命名空间,你是否傻傻分不清楚?
  3. 几个简单的shell脚本
  4. php 時間比較,PHP用strtotime()函數比較兩個時間的大小實例詳解
  5. updatePanle总结
  6. 又有程序员把产品经理给打了!
  7. itunes gift card apple id 充值接口API秒冲接口收藏
  8. 上帝视角!美国记者用公开数据,还原川普的全天行动轨迹
  9. linux中pingpong测试程序的解读
  10. 俞军推荐:一份完整的产品经理职业成长书单
  11. Java微信公众平台开发之素材管理
  12. 阅读心得:JDE:Towards Real-Time Multi-Object Tracking
  13. mysql查询一天内,一周,一个月内的消费记录
  14. 绝地求生亚服服务器维护,绝地求生亚服维护时间
  15. Joomla建站之幻灯片
  16. 微分的定义和介绍习题
  17. windows 2008 r2 sharepoint 2007 文档库 在windows资源管理器打开问题
  18. js-4 代理Proxy,object原型链, prototype, 继承,
  19. C#窗体猜数字小游戏AB
  20. Sailfish OS 2.0之初体验

热门文章

  1. 六大常用软件设计模式—工厂模式
  2. 31 给华为P10做个宣传海报 33 认识图标
  3. 签署《目标承诺书》,没完成目标,厚着脸皮不离职是否可行
  4. DIY 第三弹 封边与钥匙排
  5. CNN的输入图像尺寸问题
  6. rabbitmq死信队列详解与使用
  7. 手机拍照对比——原来相机的软件算法是如此重要!
  8. sklearn.svm.SVC中raise ValueError(“Unknown label type: %r” % y_type)ValueError: Unknown label type:处理
  9. Vs2019安装---QT vs TOOLS的方法及出错原因
  10. 加油站的智慧转型,你感受到了吗?