py网络_HTTP简介笔记
前言
在标准的网络通讯之中肯定使用的是socket编程,而socket编程是对TCP、UDP协议进行的抽象实现,在整个的实现之中可以清楚地发现,几乎不需要过多的考虑TCP、UDP实现细节,而后完全基于socket就可以非常简单的实现了。
但是传统的socket编程本身会存在有一个问题,就是你必须要提供两个程序端:客户端、服务端,服务端是整个网络编程的核心所在,但是如果每一次服务端的升级都需要进行客户端的强制更新,那么这种做法就会显得非常的麻烦了,所以在传统网络编程的基础上就形成了HTTP协议(HTTP协议是针对TCP协议的一种更高级的包装,TCP协议本身也存在有性能问题,所以HTTP上也正是因为基于TCP的实现而有可能产生更大的性能问题,所以未来有可能在UDP协议基础上实现HTTP协议)。
HTTP协议
HTTP(Hyper Text Transfer Protocol、超文本传输协议)是一种应用在www万维网(World Wide web)上实现数据传输的一种数据交互协议。客户端基于浏览器向服务端发送HTTP服务请求,服务端会根据用户的请求进行数据文件的加载,并将要回应的数据信息一HTML(HyperText Markup Language、超文本标记语言)文件格式进行传输,当浏览器接收到此数据信息时就可以直接进行代码的解析并将数据信息显示给用户浏览。


在整个的HTTP开发流程之中,最为重要的设计就放在了HTML代码的编写上(本次重点不是HTML),对于WEB服务器开发者而言更重要的是要清楚HTTP服务器的开发。
虽然HTTP是基于TCP协议基础之上开发的新的协议,但是其本质并没有脱离掉传统的TCP协议(可靠连接、数据交互),随后在TCP协议的基础上扩充了HTTP自己的一些内容,就成为了新的协议,而这些内容实际上都是随着每一次请求和响应的头部信息来进行发送的,基本访问流程如下:

那么也就是说在整个HTTP请求和响应的处理过程之中,核心的问题就在与:请求和响应的头部信息有哪些、响应的状态码(HTTP服务请求之后的状态码是确定响应能否正确执行的关键部分)。
HTTP请求模式
在HTTP协议之中,为了便于用户的请求,所以设计有多种请求模式(比较常见的就是get/post),对于像一些流行的Restful设计的结构来讲,有可能会进行这些不同模式的请求区分,随着HTTP版本的不断提升,请求的模式也在不断地追加。
| No. | 方法 | 描述 |
|---|---|---|
| 1 | GET | 请求指定的页面信息,并返回实体主体。 |
| 2 | HEAD | 类似get请求,只不过返回的响应中没有具体的内容,用于获取请求头部数据 |
| 3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件) |
| 4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容 |
| 5 | DELETE | 请求服务器删除指定的页面 |
| 6 | CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器 |
| 7 | OPTIONS | 允许客户端查看服务器的性能 |
| 8 | TRACE | 回显服务器收到的请求,主要用于测试和诊断 |
HTTP请求头部
在每一次客户端发送HTTP请求的时候除了真实的内容之外,还会包含有许多的头部信息:
| No. | 头信息 | 描述 | 示例 |
|---|---|---|---|
| 01 | Accept | 设置客户端显示类型 | Accept: image/webp,image/apng,image/,/*;q=0.8 |
| 02 | Accept-Encoding | 设置浏览器可以支持的压缩编码类型 | Accept-Encoding: gzip, deflate, br |
| 03 | Accept-Language | 浏览器可接受的语言 | Accept-Language: zh-CN,zh;q=0.9 |
| 04 | Cookie | 将客户端保存的数据发送到服务端 | Cookie:name=lxh;pwd=yootk; |
| 05 | Content-Length | 请求内容长度 | Content-Length: 348 |
| 06 | Content-Type | 请求与实体对应的MIME信息 | Content-Type: image/gif |
| 07 | Host | 请求主机 | Host:www.baidu.com |
| 08 | Referer | 访问来路 | Referer: https://www.baidu.com/s?ie=UTF-8&wd=%E6%B5%8B%E9%80%9F |
HTTP响应码
HTTP服务器能否正常运行,还有一个关键性的问题,那么就是服务器端对于请求的响应编码回应。
| No. | 分类 | 描述 |
|---|---|---|
| 1 | 1** | 信息,服务器收到请求,需要请求者继续执行操作 |
| 2 | 2** | 成功,操作被成功接收并处理 |
| 3 | 3** | 重定向,需要进一步的操作以完成请求 |
| 4 | 4** | 客户端错误,请求包含语法错误或无法完成请求 |
| 5 | 5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
开发之中最为常见的几个常见的响应状态码:
- 200: 服务器端成功地处理了用户请求,并且开始返回处理结果;
- 404:客户端错误,表示访问页面路径有错误;
- 500:服务端错误,程序执行出现异常。
HTTP响应头部信息
在每一次HTTP服务器响应的时候实际上也存在有各种的头信息,这些头信息实际上就是告诉浏览器该如何解释代码;

总结
如果要想将以上的概念全部掌握透彻,只依靠单纯的概念的记忆是没有任何意义的,最好的做法是你先学会Python中的WEB编程框架:Flask, 而后等明白了WEB开发之后再回顾本次的概念。