Python中的HTTP协议

文章目录

  • [一. 网址URL](#一. 网址URL)
  • [二. HTTP协议](#二. HTTP协议)
    • [1. HTTP协议的概念](#1. HTTP协议的概念)
    • [2. HTTP协议的作用](#2. HTTP协议的作用)
    • [3. HTTP请求报文与响应报文](#3. HTTP请求报文与响应报文)
      • [① HTTP请求报文](#① HTTP请求报文)
        • [Ⅰ. GET请求报文格式](#Ⅰ. GET请求报文格式)
        • [Ⅱ. GET请求报文分析](#Ⅱ. GET请求报文分析)
        • [Ⅲ. POST请求报文格式](#Ⅲ. POST请求报文格式)
        • [Ⅳ. POST请求报文分析](#Ⅳ. POST请求报文分析)
        • [Ⅴ. GET与POST请求报文总结](#Ⅴ. GET与POST请求报文总结)
      • [② HTTP响应报文](#② HTTP响应报文)
        • [Ⅰ. HTTP响应报文格式](#Ⅰ. HTTP响应报文格式)
        • [Ⅱ. HTTP响应状态码](#Ⅱ. HTTP响应状态码)
    • [3. 查看HTTP协议的通信过程](#3. 查看HTTP协议的通信过程)
      • [① HTTP协议的通信过程](#① HTTP协议的通信过程)
      • [② 浏览器开发者工具](#② 浏览器开发者工具)
      • [③ 浏览器开发者工具使用](#③ 浏览器开发者工具使用)
        • [Ⅰ. 了解各选项卡功能](#Ⅰ. 了解各选项卡功能)
        • [Ⅱ. 使用NetWork发送HTTP请求](#Ⅱ. 使用NetWork发送HTTP请求)
        • [Ⅲ. 查看HTTP协议的通信过程](#Ⅲ. 查看HTTP协议的通信过程)
        • [Ⅳ. 查看HTTP协议的通信过程小结](#Ⅳ. 查看HTTP协议的通信过程小结)
  • [三. 搭建静态Web服务器](#三. 搭建静态Web服务器)
    • [1. 什么是静态Web服务器](#1. 什么是静态Web服务器)
    • [2. 搭建Python自带的静态Web服务器](#2. 搭建Python自带的静态Web服务器)
    • [3. 使用Python开发自己的Web服务器](#3. 使用Python开发自己的Web服务器)
    • [4. FastAPI框架](#4. FastAPI框架)

一. 网址URL

网址又称为URL,URL的英文全拼是(Uniform Resoure Locator),表达的意思是统一资源定位符,通俗理解就是网络资源地址。

二. HTTP协议

1. HTTP协议的概念

HTTP协议的全称是(HyperText Transfer Protocol),翻译过来就是超文本传输协议。
超文本是指在文本数据的基础上还包括非文本数据,非文本数据有图片、音乐、视频等,而这些非文本数据会使用链接的方式进行加载显示,通俗来说超文本就是带有链接的文本数据也就是我们常说的网页数据,如下图所示:

传输HTTP协议格式的数据是基于TCP传输协议的,发送数据之前需要先建立连接。

2. HTTP协议的作用

TCP传输协议是用来保证网络中传输的数据的安全性的
HTTP协议是用来规定这些数据的具体格式的。
HTTP协议规定的数据格式是浏览器和Web服务器通信数据的格式,也就是说浏览器和Web服务器通信需要使用HTTP协议。

3. HTTP请求报文与响应报文

① HTTP请求报文

HTTP最常见的请求报文有两种:① GET方式的请求报文 ② POST方式的请求报文

GET: 获取Web服务器数据

POST: 向Web服务器提交数据

Ⅰ. GET请求报文格式
powershell 复制代码
---- 请求行 ----
GET /wp-content/uploads/2020/12/zm.svg HTTP/1.1  # GET请求方式 请求资源路径 HTTP协议版本
---- 请求头 -----
Host: www.itcast.cn  # 服务器的主机地址和端口号,默认是80
Connection: keep-alive # 和服务端保持长连接
Upgrade-Insecure-Requests: 1 # 让浏览器升级不安全请求,使用https请求
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36  # 用户代理,也就是客户端的名称
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 # 可接受的数据类型
Accept-Encoding: gzip, deflate # 可接受的压缩格式
Accept-Language: zh-CN,zh;q=0.9 #可接受的语言
Cookie: pgv_pvi=1246921728; # 登录用户的身份标识
---- 空行 ----
Ⅱ. GET请求报文分析
powershell 复制代码
GET / HTTP/1.1\r\n

Host: www.itcast.cn\r\n  
Connection: keep-alive\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
Accept-Encoding: gzip, deflate\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n
Cookie: pgv_pvi=1246921728; \r\n

\r\n  (请求头信息后面还有一个单独的'\r\n'不能省略)   =>  空白行

在HTTP请求中,每个选项结束后,其后面都要添加一个标签\r\n(代表一行的结束)

Ⅲ. POST请求报文格式
powershell 复制代码
---- 请求行 ----
POST /xmweb?host=mail.itcast.cn&_t=1542884567319 HTTP/1.1 # POST请求方式 请求资源路径 HTTP协议版本
---- 请求头 ----
Host: mail.itcast.cn # 服务器的主机地址和端口号,默认是80
Connection: keep-alive # 和服务端保持长连接
Content-Type: application/x-www-form-urlencoded  # 告诉服务端请求的数据类型
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36 # 客户端的名称
---- 空行 ----
---- 请求体 ----
username=hello&pass=hello # 请求参数
Ⅳ. POST请求报文分析
powershell 复制代码
POST /xmweb?host=mail.itcast.cn&_t=1542884567319 HTTP/1.1\r\n
Host: mail.itcast.cn\r\n
Connection: keep-alive\r\n
Content-Type: application/x-www-form-urlencoded\r\n
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36\r\n
\r\n(请求头信息后面还有一个单独的'\r\n'不能省略)
username=hello&pass=hello

每项数据之间使用\r\n进行结束

Ⅴ. GET与POST请求报文总结

① 一个HTTP请求报文可以由请求行、请求头、空行和请求体4个部分组成

② 请求行是由三部分组成: 请求方式、请求资源路径、HTTP协议版本(1.1或2.0)

③ GET方式的请求报文没有请求体,只有请求行、请求头、空行组成

④ POST方式的请求报文可以有请求行、请求头、空行、请求体四部分组成。

注意:POST方式可以允许没有请求体,但是这种格式很少见。

② HTTP响应报文

Ⅰ. HTTP响应报文格式
powershell 复制代码
--- 响应行/状态行 ---
HTTP/1.1 200 OK # HTTP协议版本 状态码 状态描述
--- 响应头 ---
Server: Tengine # 服务器名称
Content-Type: text/html; charset=UTF-8 # 内容类型(响应的数据类型,image/png)
Connection: keep-alive # 和客户端保持长连接
Date: Fri, 23 Nov 2018 02:01:05 GMT # 服务端的响应时间
--- 空行 ---
--- 响应体 ---
<!DOCTYPE html><html lang="en"> ...</html> # 响应给客户端的数据(html网页)
Ⅱ. HTTP响应状态码

是用于表示Web服务器响应状态的3位数字代码

状态码 说明
200 服务器已成功处理了请求
400 错误的请求,请求地址或者参数有误
404 请求资源在服务器不存在
500(服务器端异常) 服务器内部源代码出现错误

3. 查看HTTP协议的通信过程

① HTTP协议的通信过程

每一次浏览器和服务器的数据通讯,都是成对出现的即请求和响应,同时每一次请求和响应都必须符合HTTP协议的格式

② 浏览器开发者工具

安装GoogleChrome浏览器,在Windows和Linux平台按F12或Ctrl+Shift+I调出开发者工具,Mac中选择"视图 ->开发者->"开发者工具或者直接使用alt+command+i 这个快捷键,还有一个多平台通用的操作就是在网页右击选择检查。
提示:开发者工具还是查看网页布局和JS代码调试的利器。

③ 浏览器开发者工具使用

Ⅰ. 了解各选项卡功能
Ⅱ. 使用NetWork发送HTTP请求
Ⅲ. 查看HTTP协议的通信过程
  • 请求头,请求头信息
  • 响应头,响应头信息
Ⅳ. 查看HTTP协议的通信过程小结

浏览器的开发者工具是查看http协议的通信过程利器,通过Network标签选项可以查看每一次的请求和响应的通信过程,调出开发者工具的通用方法是在网页右击选择检查。

Headers选项总共有三部分组成:

① General: 主要信息

② Response Headers: 响应头

③ Request Headers: 请求头

Response选项是查看响应体信息的

三. 搭建静态Web服务器

1. 什么是静态Web服务器

2. 搭建Python自带的静态Web服务器

3. 使用Python开发自己的Web服务器

4. FastAPI框架

相关推荐
dubochao_xinxi5 分钟前
E: 仓库目录 /var/cache/apt/archives/partial 确实。 - Acquire (2: 没有那个文件或目录)
开发语言·数据库·python·qt
液态不合群7 分钟前
使用Python实现两组数据纵向排序
开发语言·python·算法
hu_wenjie12 分钟前
使用pyinstaller打包flask项目
后端·python·flask
chenchihwen43 分钟前
TimesFM(Time Series Foundation Model)时间序列预测的数据研究(3)
人工智能·python
数据小爬虫@1 小时前
Java爬虫技术:挖掘淘宝数据的利器
java·爬虫·python
BBluster1 小时前
multiprocessing包详解【Python】
开发语言·网络·python
Lill_bin1 小时前
分页查询在数据库中的好处
java·开发语言·数据库·python·oracle·性能优化
极客小张2 小时前
基于STM32的智电表系统课题设计思路:python友好界面、ADC、UART串口、数据分析
c语言·python·stm32·单片机·数据分析·毕业设计·课程设计
勤劳的进取家2 小时前
利用模拟退火算法求解旅行商问题
开发语言·python
威威猫的栗子2 小时前
用 Python Turtle 绘制经典汤姆猫:重温卡通角色的经典魅力
开发语言·python