近来一个多星期一直在学习py的web编程,从零开始,短暂时间接受的很多知识都需要消化吸收,所以在这里把这个过程梳理一遍,尽量用自己的语言去描述这些知识点。
首先是web编程的必备知识:HTTP协议。超文本传输协议(HTTP),是一种通信协议,按照定义来直接去看容易一头雾水,但其实只需要了解:web服务器和客户端之间交流,必须要遵守统一的规矩,不然就跟你说汉语我说英文一样,互相不知对方在说什么。这个统一的规矩或者格式就是HTTP协议
而服务器和客户端之间的通信方式简而言之就是,客户端给服务器发了一个请求(request),服务器要根据这个request的内容来返回客户端要的东西(response),其他要学习的一切东西都是将这个过程变得更加细化和完备的过程。
从我们平时上网的过程来看,发生了如下的事情:
首先,我们在地址栏里输入了一个url: https://movie.douban.com:443/top250?start=25&filter=
它可以被解析分解为如下的部分:
https
这是我们指定的通信协议,通常有http/https。https是http协议的安全版本,是加密的。
movie.douban.com
这是服务器的主机ip地址(但是其实我们一般看见的都是域名,因为ip地址不好记,所以拿域名指代它。我们输入域名后,电脑会自动到一个叫DNS服务器的地方去查这个域名对应的ip地址)
443
这是指定的服务器端口,与host部分用冒号:分开。http默认80端口,https默认443端口,默认的端口一般不用填写
/top250
这是路径path,指定的是在这个服务器上你需要的文件存放的位置,跟电脑里文件夹的路径是一个道理
start=25&filter=
这是url里传的参数,与path用问号?分隔,它内部的每个参数之间用&符号分隔。(start=25,filter=这样的一对一对的就是“属性=参数”这样的格式,url里传的参数都是用的GET方法,之后会讲到)
嗯。。现在浏览器拿到了我输入的url,它就会解析(解析过程之后讲)我给的这个url,知道了我要拿到指定位置文件的需求。就会给服务器发一个request(是二进制字符串):
’GET /top250?start=25&filter= HTTP/1.1\r\nhost:movie.douban.com\r\n\r\n’
其实它是这样的:
GET /top250?start=25&filter= HTTP/1.1
Host: movie.douban.com
看见的这两行是request请求最基本的部分叫请求行,其实浏览器实际发送request的还有很多东西(
而以上的这些请求行和头部,其实都在上边那个request二进制字符串里,在最后的那\r\n\r\n之前 。请求行和头部完了之后,会有一个\r\n\r\n,表示这里要空一行出来。之后,会再跟上一块内容,叫body。body里存的是通过POST方法提交的参数,这个之后会讲。
以上就是request的全部内容,浏览器把这个request发给了服务器,服务器接收到request,然后拿去解析(解析过程之后讲),解析完之后按照request里的要求,拿出相应的数据,用html模板装好(静态页面直接返回指定文件就好),这一部分就会成为response的body体。response和request的结构一样,都是由 请求行/响应行 + header + 空行 + body组成的。
服务器回复的response如下:
这是响应行,后边还有其他一大堆东西(