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框架

相关推荐
hummhumm6 分钟前
第 14 章 -Go语言 错误处理
java·开发语言·前端·后端·python·sql·golang
linzhisong15 分钟前
LayUI组件国际化多国语言版本脚本-上篇提取中文字符
前端·javascript·python·layui
codists17 分钟前
《Django 5 By Example》阅读笔记:p17-p53
python·django
小馒头学python22 分钟前
机器学习中的概率超能力:如何用朴素贝叶斯算法结合标注数据做出精准预测
人工智能·python·算法·机器学习
Once2gain22 分钟前
dlopen: cannot load any more object with static TLS & sklearn, HPOBench, smac3
人工智能·python·sklearn
B站计算机毕业设计超人24 分钟前
计算机毕业设计Python+大模型中医养生问答系统 知识图谱 医疗大数据 中医可视化 机器学习 深度学习 人工智能 大数据毕业设计
大数据·人工智能·爬虫·python·深度学习·机器学习·知识图谱
青石横刀策马28 分钟前
Python学习笔记(1)装饰器、异常检测、标准库概览、面向对象
笔记·python·学习
CQU_JIAKE41 分钟前
11-9:【大数据】DEBUG
开发语言·python
GIS 数据栈1 小时前
博客摘录「 pyqt 为新建子线程传参以及子线程返回数据到主线程」2023年12月7日
笔记·python·pyqt·多线程·多线程通信
液态不合群2 小时前
Vscode 远程切换Python虚拟环境
ide·vscode·python