热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ideatomcat启动访问不到_访问网页的背后,究竟发生了什么?

前言上一篇中,简单的介绍了如何使用flask框架搭建自己的第一个网页。在这个互联网时代,为什么你输入一个网页,等待几秒以后,

前言

上一篇中,简单的介绍了如何使用 flask 框架搭建自己的第一个网页。

在这个互联网时代,为什么你输入一个网页,等待几秒以后,网页上就会有内容了?其背后究竟发生了什么?又有怎样的过程呢?

今天就以 flask 创建网页以后,来对其探究一下吧!

互联网

在探究原理之前,不得不提到一个概念 - 互联网。正是因为它的存在,我们才可以忽略物理距离,来随心所欲的访问 all over the world。

互联网,大家并不陌生,但是日常挂在嘴边的互联网,你知道它实际上代表的含义吗?什么是互联网?为什么叫互联网?如果让你用图来描述一下,能把这么抽象的概念实体化吗?(各种问题抛出来!~)

以下故事,纯属虚构,如有雷同,纯属巧合。

上大学时,假设学校没有给接入网络的权限,但宿舍人手一台电脑,大家都想聚在一起玩游戏,那么该怎么办呢?于是,弄一台集线器,只需要把所有电脑的网线插到这个机器上,处于同一网络的电脑,就可以相互联机打游戏了,比如 CS 、DOTA。。。

这样形成的网络,叫局域网

741993d71c0b6117e222d17bfaeab28c.png
4d939bdb168cb644b4992138f39e6d13.png

虽然学校限制不让连接,但是现在每户人家的家中都可以连接到互联网了。原来每台电脑只能在一个局域网内组成一个小网络进行互动。而家用 wifi 路由器,它会随着连入的设备去提供网络节点,你的手机,电视,电脑都可以通过它来分配一个内网 ip 。就像下图这样:

4665e303b1d343dd465e7f0bf68b2b07.png

由路由器提供的网络,在家里形成了一个局域网。这也是为什么上篇文章中,如果你的电脑上启动一个 flask 的项目以后,如果手机和电脑处于一个网络中,手机可以直接访问到网页的原因。

路由器不仅对内,而且还有对外的一个公网 ip ,图中的大云彩便是互联网节点。互联网由这些节点相互组成在一起,才有了你在中国却能访问到外国的网站。由这些网络节点(云彩)组成的,叫互联网

专业人员,如果想了解计算机网络协议,推荐两篇文章,阮一峰老师写的互联网协议入门博客。

http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html

阮一峰博客

请求一个网页,发生了什么?

先来看一张图,此图描述了当我们访问一个 flask 项目后(其实整体流程,大部分都类似,比如 java 项目也是相似的逻辑,变动的只是应用的组件或者框架罢了),整体发生的流程:

8ce46ad9a54a35fd9277c327d69afd36.png

一般我们将浏览器(发送请求)的一方,称之为客户端。而处理请求的一方(web服务器,上篇文章中,就是我们启动 flask 项目自己的电脑),称之为服务端

出发点从我们的浏览器(客户端)讲起。当你在浏览器输入一个网址时,按下回车后的一瞬间。浏览器会生成一个 http 的请求,经由互联网发送到对应的 Web 服务器(服务端)。

当我们 flask 项目的那台电脑启动后,接收到浏览器发来的请求,会通过 WSGI 将我们 http 的请求转化为 flask 程序能使用的 Python 数据。

在项目中(上篇文章为例),flask 会根据请求的地址执行对应的视图函数,还记得 “泥豪,世界!”吗。。视图函数就是当时的这段:

@app.route('/')def hello_world(): return '泥豪,世界!'

经过程序获取返回值生成响应,响应经过 WSGI 转换再生成 http 响应传回 Web 服务器,最后被发出请求的客户端接收。

Duang~浏览器此时能看到我们服务端返回的数据。

d27d3b905894c8e8352da84d1397909c.png

同时渲染响应中包含的HTML和CSS代码,并执行Javascript代码,最终把解析后的页面呈现在用户浏览器的窗口中。当时仅仅返回了 HTML 标签,至于 CSS 和 Javascript 代码在后续文章中会介绍到。


额外普及:

真正 python web 开发的线上流程,大体是酱紫的(之前有画过,在介绍 if name 的文章中写过):

88c0d7fa1988e4c03f0c037b8e586183.png

WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。

wiki

WSGI 存在的目的有两个:

  1. Web 服务器知道如何调用 Python 应用程序,并且把用户的请求告诉应用程序。
  2. 让 Python 应用程序知道用户的具体请求是什么,以及如何返回结果给 Web 服务器。

如果用图来表示的话,下图(来源于网络):

f5bd110a1770953f4e194b103ce577fd.png

关于 http 协议

大家不难发现,上面的流程中有个关键点,就是 http 协议。这个协议在互联网中起着关键性的作用。对它熟练掌握,可谓是大大滴友好!(你滴,死啦死啦滴。。。)

网络爬虫的原理,离不开 http 协议。比如当你查询网站背后的数据地址时,模拟浏览器发出的 http 协议请求头时,发送时携带的 http 数据时,这些原理其实都是基于网页开发涉及到的知识。

所以如果当你知道了网页背后的运作流程,相对于理解爬虫来说,只会锦上添花!~

http 协议的相关知识,在介绍几点,至于浏览器 F12 开发者工具如何使用,想了解的小伙伴可以看下之前写的这篇文章 python小课堂30 - 爬虫之前必会的浏览器开发者工具

1. http状态码

756b26daa11d1e38d824e01833504384.png

状态码反映的是你这次请求后的结果状态,有时可以通过状态码来分辨是客户端的问题还是服务端的问题,常见的几种:

1383901cec8bd2dc15f4797983186af9.png

2. http 请求方法

http常见的几种请求方法,不仅仅以下几种,HTTP1.1 中新增了其他几个,没有列举出来:

a351319bc2890148ec5942aacc597cba.png

但是上最常用的两种方法就是 POST 和 GET。一般我们请求浏览器时发生的动作都是 GET 请求,比如当你访问百度时,打开 F12 看到:

b2ebbfb5939625a944295431bf4744c5.png

3. http 请求头:

6e30ff397694687f20788595635647c4.png

大家可以看到,截图中的部分,http 请求头是包含一些字段的,为什么有时候有些网站,我们写爬虫去请求时,如果不带上特定的请求头字段,就访问不到呢?

原理就是因为服务端对这些请求头的特定字段进行了检验,比如 user -agent 这个字段,如果不带上,服务端直接检验出你的请求没有此字段,说明不是浏览器发出的请求,是人为的行动。所以返回给你的信息有时候就是空白,或是假的。

关于 COOKIEs 这个字段,尽量不要将其暴露在公共的地方,会有安全的问题,所以截图中我把 COOKIEs 抹掉了。

总结

看完本文的你,是否对网页开发的背后整体逻辑有了更深层次的理解了呢?

从整体架构出发考虑,访问一个网页的流程大致如此,如果有什么问题,欢迎小伙伴们留言探讨!



推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文详细介绍了cisco路由器IOS损坏时的恢复方法,包括进入ROMMON模式、设置IP地址、子网掩码、默认网关以及使用TFTP服务器传输IOS文件的步骤。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 【工具篇】抓包中的王牌工具—Fiddler (1环境搭建)
    本文介绍了抓包工具Fiddler的概述,包括其功能、选择原因和安装方法。Fiddler是一款免费且功能强大的抓包工具,可用于网络代理、接口测试、安全测试和WEB调试等。安装配置简单,上手快速,适合新手使用。详细的安装地址为https://www.telerik.com/download/fiddl。 ... [详细]
  • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
author-avatar
功夫少年8
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有