欢迎来到宁波培训网 时间
 位置: 宁波上元教育培训网 >> 机械电子 >> 技术文章 >> 正文
  • 机械电子学习
  • -网上报名-
  • 更多

什么是 Web 框架?

文章来源:宁波上元教育培训网    作者:Admin    点击次数:     更新时间:2018/4/28

Web 应用框架,简称为 web 框架,是编写 web 应用程序的基石。不管简单的博客系统,还是 Ajax 为主的应用,网络上所有的页面都是代码构成的。进来我发现,很多想学习诸如 Flask 或者 Django 等 web 框架的开发者,并不很了解 web 框架是什么,它们的作用和工作原理。

这篇文章,我将会讲一下这个通常会被忽略的话题。希望读完这篇文章,你能比较深刻地理解 web 框架到底是什么,还有为什么会有 web 框架。这些知识将有利于你学习新的 web 框架,而且在选择 web 框架的时候有法可依。

WEB 是什么工作的?

在讨论框架之前,我们要先了解一下网页是怎么工作。我们就从你在浏览器输入一个网址,摁下 enter 键说起。打开你的浏览器,输入 http://jeffknupp.com(译者注:原作者的个人网站首页),我们来看看你的浏览器做了那些事情(DNS 查询的 buffer 就略过),才能显示你看到的网页。

web servers,和 web … servers …

浏览器接接收到的网页都是 HTML 文件, HTML 是一种描述网页内容和结构的语言。负责给浏览器发送 HTML 的程序称为 web server,容易混淆的是,这个应用程序所在的机器通常也被称为 web server。

最重要的一点是,所有的 web 应用做的事情就是把 HTML 内容发送给浏览器。不论这个 web 应用有多么复杂,最终的任务都是把 HTML(我故意忽略掉其他格式的内容,比如 JSON,CSS 文件,因为原理都是一样的)发送给浏览器。

问题来了:web 应用如何知道要发送什么内容给浏览器呢?答案:它会发送浏览器请求的内容。

HTTP

浏览器从 web server 下载内容所用的是 HTTP 协议(协议在计算机科学中,指的是双方通信所共同遵循的数据格式和通信步骤)。 HTTP 协议的基础是 请求-应答 ( request-response) 模型。客户端(你的浏览器) 请求 某台物理机上 web 应用的数据,web server 则负责 应答请求的数据。

有个重要的事情是:所有的通信都是客户端(你的浏览器)发起的。服务端(web server)是不可能主动连接你,发送没有请求的数据的。如果你收到了数据,只是因为你的浏览器主动请求了这些数据。

HTTP 方法

HTTP 协议的每条消息都有对应的方法(method),不同的方法对应了客户端能发起的不同请求,也对应了客户端不同的意图。比如,请求 网页的 HTML 和提交一个表格在逻辑上是不同的,所以这两种方法需要两种不同的方法。

HTTP GET

顾名思义, GET 方法就是从 web server 获取(get)数据, GET 请求也是目前最常用的 HTTP 请求。 处理 GET 请求的过程中,web 应用只需要返回请求的数据,无需其他操作。尤其是,不应该修改应用的状态(比如, GET 请求不应该导致一个新用户被创建)。因为这个原因, GET 请求通常被看做是 安全 的。

HTTP POST

和网站的交互,明显不只是查看网页的。我们还会通过表格等形式发送数据给 web 应用,这些操作需要用到另外一种请求: POST。 POST 请求通常会传递用户创建的信息,导致 web 应用执行某些动作。输入自己的信息,来注册某个网站就会用到 POST 请求,请求中会包含你输入的数据。

和 GET 请求不同的是, POST 请求通常会导致 web 应用状态的改变。上面提及的例子中,表单被提交后,一个新的用户会被创建。还有一点不同, POST 请求的结果可能不会返回 HTML 数据给客户端,客户端需要通过 response code 来判断操作是否成功。

HTTP response code

正常情况下,web server 会返回 200 的 response code,意思是:我已经完成了你要我做的事情,并且一切都没有问题。 response code 是三位的数字,每次应答都要包含一个 response code,来标识请求的结果。 200 表示 OK,是 GET 方法常见的返回值。 POST请求经常会返还 204(No contnet),表示:一切正常,但是我没有数据可以展示给你。

还需要注意的是: POST 请求发送给的 url,可能和数据发送出去的 url 不同。继续以我们的注册页面为例,注册表可能位于 http://foo.com/signup,点击 submit 之后,包含着注册数据的 POST 请求可能被发送到 http://foo.com/process_signup。 POST 请求要发送到的地址,一般在注册表格的 HTML 源码里指定。

Web 应用

掌握 GET 和 POST 方法就能做很多事情,因为它们是 web 上最常用的两个方法。总结一下,web 应用就是接收 HTTP 请求,然后返回 HTTP 应答,一般是包含请求数据的 HTML。 POST 方法会导致 web 应用执行某些动作,例如在数据库添加一条记录。当然还有其他的 HTTP 方法,但目前我们只需要关心 GET 和 POST 就足够啦。

最简单的 web 应用长什么样呢?我们就来写一个监听在 80 端口的 web 应用,一旦和客户端建立连接,就等待客户端发起请求,并返回非常简单的 HTML

这个程序是这样的:

  1. import socket

  2. HOST = ''

  3. PORT = 80

  4. listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

  5. listen_socket.bind((HOST, PORT))

  6. listen_socket.listen(1)

  7. connection, address = listen_socket.accept()

  8. request = connection.recv(1024)

  9. connection.sendall("""HTTP/1.1 200 OK

  10. Content-type: text/html

  11. <html>

  12.    <body>

  13.        <h1>Hello, World!</h1>

  14.    </body>

  15. </html>""")

  16. connection.close()

(如果上面的程序报端口错误,可以把 PORT 的值修改成其他值,比如 8080。)

上面的代码只会接收一个连接和一个请求,不管请求的 URL 是什么,都会返回同样的 HTTP内容,response code 是 200。(很明显,这不算真正的 web server)。在这个例子,我们告诉客户端,返回的数据格式为 HTML,而不是其他的格式,比如 JSON

request 请求解析

如果看一下上面例子中发送的 HTTP 请求(译者注:可以使用 chrome 的 inspect elements -> Network,或者抓包工具 tcpdump 等工具查看发送的 HTTP 请求),就会发现它和应答很相似。请求的第一行是:

  1. <HTTP Method> <URL> <HTTP version>

在这个例子里就是 GET / HTTP/1.1。第一行后面跟着的是请求的头部(headers),比如 Accept: */*(表示可以接收任何格式的内容作为应答)。基本上就这么多。

我们发送的应答也是类似的格式,第一行是:

  1. <HTTP version> <HTTP Status-Code> <Status-Code Reason-Phrase>

这个例子中就是 HTTP/1.1 200 OK。然后是头部,和请求的头部一样。最后是应答的实际内容。注意:应答也可能是字符串或者二进制对象,头部的 Content-typ 就是来标识应答内容,让客户端来解析的。

web server 更多琐碎的细节

上一篇: 伺服驱动器的原理 下一篇: 没有了
网上报名>>
姓名:  性别:
电话: 
地址:
课程:

联系地址:宁波市海曙区中山东路137号7楼
咨询热线:0574-87325693、87325823、87326973、0574-87329343、87329353、87329683、87327805、87323725、87324192

Copyright © 无锡市上元教育咨询有限公司 All Rights Reserved   苏ICP备09027265号-70

邦元教育工作时间