1.概述
  HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服 务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。(HTTP协议是应用层协议)

链路层:包括操作系统中的设备驱动程序、计算机中对应的网络接口卡。
网络层:处理分组在网络中的活动,比如分组的选路。
运输层:主要为两台主机上的应用提供端到端的通信。
应用层:负责处理特定的应用程序细节。

HTTP协议为请求响应模式:

所以HTTP协议分为请求协议和响应协议:

2.格式查看
  使用谷歌/火狐浏览器 开发者工具分析通信过程和格式

(1)元素(Elements):用于查看或修改HTML元素的属性、CSS属性、监听事件、断点等。

(2)控制台(Console):控制台一般用于执行一次性代码, 查看JavaScript对象, 查看调试日志信息 或异常信息.

(3)源代码(Sources):该页面用于查看页面的HTML文件源代码、JavaScript源代码、CSS源代码, 此外最重要的是可以调试JavaScript源代码, 可以给JS代码添加断点等。

(4)网络(Network):网络页面主要用于查看 header 等与网络连接相关的信息。

3.请求报文

请求报文分为4部分
(1)请求行(request-line):请求方式 请求路径 协议版本

(2)请求头(request-header):请求头就是所有当前需要用到的协议项的集合,协议项就是浏览器在请求服务器的时候事先告诉服务器的一些信息,或者一些事先的约定。
常见请求头:

参数 描述
host 当前url中所要请求的服务器的主机名(域名)
accept-encoding 是浏览器发给服务器,声明浏览器支持的压缩编码类型 比如gzip
accept_charset 表示,浏览器支持的字符集
referer 表示,此次请求来自哪个网址
accept-language 可以接收的语言类型,cn,en,有权重的高低之分
cookie 如果之前当前请求的服务器在浏览器端设置了数据(cookie),那么当前浏览器 再次请求该服务器的时候,就会把对应的数据带过去
user-agent 用户代理,当前发起请求的浏览器的内核信息
accept 表示浏览器可以接收的数据类型,text/html,image/img
content-length(post) 只有post提交的时候才会有的请求头,显示的是当前要提交的 数据的长度(字节)
if-modified-since(get) 表示,在客户端向服务器请求某个资源文件时,询问此资源文件是否被修改过

  
(3)空行:就是用来分离请求头和请求数据,意思就是请求头到此结束。

(4)请求数据(request-content),也叫作请求内容或者请求主体:只有post方式提交的时候,才有请求数据

4.响应报文

响应报文也分为4部分:
(1)响应行(状态行):协议版本 状态码 状态描述

状态码与状态:
状态码由三位数字组成,第一个数字定义响应体类别,具有5种可能取值:

状态码 描述
1xx 指示性息——表示请求已接收,继续处理
2xx 成功——表示请求已被成功接收、理解、接收
3xx 重定向——要完成请求必须进行更进一步的操作
4xx 客户端错误——请求有语法错误或请求无法实现
5xx 服务端错误——服务器未能实现合法的请求

常见状态码:

(2)响应头:也是协议的集合
常见响应头:

参数 描述
server 服务器主机信息
date 响应时间
last-modified 文件最后修改时间
content-length 响应主体的长度(字节)
content-type 响应内容的数据类型:text/html,image/png等
location 重定向,浏览器遇到这个选项,就立马跳转(不会解析后面的内容)
refresh 重定向(刷新),浏览器遇到这个选项就会准备跳转,刷新一般有时间限制,时间 到了才跳转,浏览器会继续向下解析
content-encodeing 文件编码格式
cache-control 缓存控制,no-cached不要缓存

  
(3)空行:用来分割响应头与响应主体,也就是响应头到此结束

(4)响应主体(响应数据):就是服务器反馈给浏览器的数据
  
  
5.案例(模拟浏览器)

import socket
# 创建TCP套接字
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接
tcp_client_socket.connect(('www.icoderi.com', 80))
# 请求行
request_line = "GET / HTTP/1.1\r\n"
# 请求头
request_header = "Host: www.icoderi.com\r\n"
request_data = request_line + request_header + "\r\n"
# 发送请求
tcp_client_socket.send(request_data.encode())
# 接收响应报文
response_data = tcp_client_socket.recv(4096)
# 将响应报文解码
response_str_data = response_data.decode()
# 找到响应空行
x = response_str_data.find('\r\n\r\n')
# 对响应报文进行切割
print(response_str_data[x+4:])
# 将响应体写入index.html文件里
with open('index.html', 'w', encoding='UTF-8') as file:file.write(response_str_data[x+4:])
tcp_client_socket.close()

执行结果:

Python高级——HTTP协议相关推荐

  1. 已知x=python是一种非常好的编程语言-为什么用Python,高级的Python是一种高级编程语言...

    Python特性 如果有人问我Python最大的特点是什么,我会毫不犹豫地告诉他:它简单易学,功能强大.作为一个纯自由软件,Python有许多优点: 很简单.基于"优雅".&quo ...

  2. Python面试题大全(二):python高级语法

    目录 Python高级 元类 42.Python中类方法.类实例方法.静态方法有何区别? 43.遍历一个object的所有属性,并print每一个属性名? 44.写一个类,并让它尽可能多的支持操作符? ...

  3. python高级编程-网络编程、多任务

    python高级编程 1 IP地址 用来在网络中标记一台电脑:在本地局域网上是唯一的. 2 端口 一个程序需要收发网络数据,就需要端口号. 3 socket 创建socket # 创建tcp sock ...

  4. Python高级知识点汇总第一部

    Linux常见命令 ls:查看当前路径下的所有文件及文件名; clear:清空操作; cd 跳转操作,可以跳转到任意路径位置; cd-:跳转到上次所在的路径; cd~:快速切换到当前用户的主目录(快速 ...

  5. 阿里云大学考试python中级题目及解析-python高级

    阿里云大学考试python高级题目及解析 1.以上代码输出结果为 a =[1,2,3,None,(),[],] print(len(a)) A.4 B.5 C.6 D.syntax error C 列 ...

  6. python高级面试题_10个高级python面试问题

    python高级面试题 With Python becoming more and more popular lately, many of you are probably undergoing t ...

  7. python高级编程之网络编程

    Python高级之网络编程 端口 端口分类 知名端口 动态端口 查看端口 socket简介 电脑上进程之间的通信 什么是socket 创建socket 使用UDP套接字发送数据 使用UDP套接字接受数 ...

  8. python高级编程函数_Python高级编程之十大装B语法

    for - else 什么?不是 if 和 else 才是原配吗?No,你可能不知道,else 是个脚踩两只船的家伙,for 和 else 也是一对,而且是合法的.十大装B语法,for-else 绝对 ...

  9. Python高级特性:切片、迭代、列表生成式、生成器与迭代器

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 接着廖雪峰老师的学习教程,小编要开始加快推进Python的学习进程 ...

最新文章

  1. javascript中 (function(){})();如何理解?
  2. 隐马尔可夫模型维特比算法与前向算法区别
  3. golang mysql大量写入_Golang 实现分片读取http超大文件流和并发控制
  4. AXI_03 AXI_LITE_SLAVE_IP核设计与验证
  5. ASP.NET Core Razor页面 vs MVC
  6. [ECMAScript] 说说你对async/await的理解?
  7. 【京东个人中心】——Nodejs/Ajax/HTML5/Mysql爬坑之注册与登录监听
  8. 微信开发,自定义菜单不生效怎么办?重新关注也无效
  9. MVC5 + EF6 + Bootstrap3 (11) 排序、搜索、分页
  10. 论文笔记_S2D.67_CamVox: 一种低成本、高精度的激光雷达辅助视觉SLAM系统
  11. Just Speak 论文精读
  12. B1105 Spiral Matrix (画图)
  13. RabbitMq 406错误
  14. 大数据常见专有名词解释
  15. 何为业务安全,业务安全部门的具体职责是什么?
  16. 秒改文件md5,各PC系统可用
  17. mt2503 [ShapeEngine]泰语音标字符发生偏移
  18. 怎样制作GIF拼图?教你一键在线拼图
  19. 从本地管理员到域管理员提权
  20. 4、弱电工程FTTH网络的分光建设及分光比设计

热门文章

  1. linux命令passwd各个参数含义
  2. 一个基于 React 开发的PC端音乐App
  3. html5canvas简单画图
  4. Redis集群版在Java中的应用
  5. 利用Spring MVC 上传图片文件
  6. 35.NO module named zlib
  7. IP路由故障关于BGP的疑问解答
  8. 容器编排技术 -- Kubernetes 应用连接到 Service
  9. Fedora中systemctl命令的使用
  10. 银行业务队列简单模拟(队列queue)