HTTP协议 (超文本传输协议)

1.用途 : 网页获取,数据的传输

2.特点:

  • 应用层协议,传输层使用tcp传输
  • 简单,灵活,很多语言都有HTTP专门接口
  • 无状态,协议不记录传输内容
  • http1.1 支持持久连接,丰富了请求类型

3.网页请求过程

  1. 客户端(浏览器)通过tcp传输,发送http请求给服务端
  2. 服务端接收到http请求后进行解析
  3. 服务端处理请求内容,组织响应内容
  4. 服务端将响应内容以http响应格式发送给浏览器
  5. 浏览器接收到响应内容,解析展示

HTTP请求(request)

1.请求行 : 具体的请求类别和请求内容

  • GET / HTTP/1.1
  • 请求类别 请求内容 协议版本

请求类别:每个请求类别表示要做不同的事情

  • GET : 获取网络资源
  • POST :提交一定的信息,得到反馈
  • HEAD : 只获取网络资源的响应头
  • PUT : 更新服务器资源
  • DELETE : 删除服务器资源
  • CONNECT
  • TRACE : 测试
  • OPTIONS : 获取服务器性能信息

2.请求头:对请求的进一步解释和描述

  • Accept-Encoding: gzip

3.空行

4.请求体: 请求参数或者提交内容

 1 from socket import *
 2
 3 s = socket()
 4 s.bind(('0.0.0.0',8001))
 5 s.listen(3)
 6 c,addr = s.accept()
 7 print("Connect from",addr)
 8 data = c.recv(4096)
 9 print(data)
10
11 data = """HTTP/1.1 200 OK
12 Content-Type:text/html
13
14 <h1>Hello world</h1>
15 """
16 c.send(data.encode())
17
18 c.close()
19 s.close()

http 请求响应示例

http响应(response)

响应格式:响应行,响应头,空行,响应体

响应行 : 反馈基本的响应情况

  • HTTP/1.1 200 OK
  • 版本信息 响应码 附加信息

响应码 :

  • 1xx 提示信息,表示请求被接收
  • 2xx 响应成功
  • 3xx 响应需要进一步操作,重定向
  • 4xx 客户端错误
  • 5xx 服务器错误

响应头:对响应内容的描述

  • Content-Type: text/html

响应体:响应的主体内容信息

 1 from socket import *
 2
 3 # 处理客户端请求
 4 def handle(connfd):
 5   request = connfd.recv(4096) # 接收请求
 6   # 防止客户端断开request为空
 7   if not request:
 8     return
 9   request_line = request.splitlines()[0]
10   info = request_line.decode().split(' ')[1]
11   if info == '/':
12     with open('index.html') as f:
13       response = "HTTP/1.1 200 OK\r\n"
14       response += "Content-Type:text/html\r\n"
15       response += '\r\n'
16       response += f.read()
17   else:
18     response = "HTTP/1.1 404 Not Found\r\n"
19     response += "Content-Type:text/html\r\n"
20     response += '\r\n'
21     response += "<h1>Sorry...</h1>"
22   # 发送给浏览器
23   connfd.send(response.encode())
24
25
26 # 搭建tcp网络
27 sockfd = socket()
28 sockfd.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
29 sockfd.bind(('0.0.0.0',8000))
30 sockfd.listen(3)
31 while True:
32   connfd,addr = sockfd.accept()
33   handle(connfd)  # 处理客户端请求

http 发送网页给浏览器

转载于:https://www.cnblogs.com/maplethefox/p/10989040.html

Python网络编程—TCP套接字之HTTP传输相关推荐

  1. Python网络编程——socket套接字实现UDP/TCP信息传输

    socket套接字 socket(简称 套接字) ,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来 ...

  2. python socket清空接收缓冲区_Python网络编程——修改套接字发送和接收的缓冲区大小...

    很多情况下,默认的套接字缓冲区大小可能不够用.此时,可以将默认的套接字缓冲区大小改成一个更合适的值. 1. 代码 # ! /usr/bin/env python # -*- coding: utf-8 ...

  3. [python学习] 专题七.网络编程之套接字Socket、TCP和UDP通信实例

    很早以前研究过C#和C++的网络通信,参考我的文章:                  C#网络编程之Tcp实现客户端和服务器聊天                 C#网络编程之套接字编程基础知识   ...

  4. TCP/IP网络编程:P1->理解网络编程和套接字

    本系列文章为<TCP/IP网络编程----尹圣雨>学习笔记 文章目录 一.理解网络编程和套接字 1.1 构建接电话套接字 1.2 编写"Hello world!"服务器 ...

  5. TCP/IP网络编程——理解网络编程和套接字编程

    完整版文章请参考: TCP/IP网络编程完整版文章 文章目录 一.理解网络编程和套接字编程 1.1 socket套接字 1.1.1 一个例子来表示TCP的网络连接 1.1.2 程序实现 1.2 文件操 ...

  6. Python网络编程——TCP与UDP

    Python网络编程 TCP(复杂可靠)与UDP(简单不可靠)的区别 1) TCP提供面向连接的传输,通信前要先建立连接(三次握手机制): UDP提供无连接的传输,通信前不需要建立连接. 2) TCP ...

  7. Linux原始网络编程,Linux操作系统网络编程 原始套接字 (1)

    Linux操作系统网络编程--原始套接字 (1) http://soft.zdnet.com.cn/software_zone/2007/1020/568223.shtml 我们在前面已经学习过了网络 ...

  8. C# 网络编程之套接字编程基础知识

    最近阅读了周存杰编写的<C#网络编程实例教程>并阅读了很多相关方面的资料,同时自己也做了一些套接字编程方面的C#程序,所以根据它的知识总结了最近的套接字编程的一些知识点,方便自己的理解与他 ...

  9. Linux网络编程之套接字基础

    Linux网络编程之套接字基础 1.套接字的基本结构 struct sockaddr 这个结构用来存储套接字地址. 数据定义: struct sockaddr { unsigned short sa_ ...

最新文章

  1. 疯狂ios讲义之网页控件(UIWebView)
  2. Linux网络编程——连接和面向连接的协议之间没有区别
  3. Java关键字final使用详解
  4. iOS项目架构 小谈
  5. .NET Core开发实战(第28课:工作单元模式(UnitOfWork):管理好你的事务)--学习笔记...
  6. oracle数据库存储ip地址,oracle – 以十进制形式存储的IP地址 – PL / SQL以虚线四边形显示...
  7. PageObjects 设计模式
  8. 凑热闹买了个小米剃须刀
  9. Docker安装ElasticSearch 版本7.6.2
  10. 在圣诞节读一本书 | 读书
  11. 教师-学生网络下Self-Ensembing with GAN-based Data Augmentation for Domain Adaption in Sematic Segmentation
  12. 针对于网站被黑被劫持了的解决办法、网站被劫持了怎么办
  13. keil5库文件安装失败_iPad iPhone如何清理垃圾 iPad iPhone清理垃圾文件办法【详解】...
  14. 「中国好SaaS」重装升级,真正以用户视角,发现SaaS好项目
  15. office在线预览 word在线预览 .net在线预览 文件在线浏览接口
  16. AjaxPro的AJAX示例
  17. 《超新星纪元》阅读笔记
  18. 19、会员中心 - 小程序端开发 - 微擎小程序模块应用开发
  19. MATLAB中cftool使用
  20. UI设计教程分享:6个不能错过的UI设计网站

热门文章

  1. 27-----BBS论坛
  2. 编写代码约定,每行字符长度不超过80列
  3. 牛客练习赛24题解(搜索,DP)
  4. js javascript变量提升
  5. 【逆向知识】裸函数(Naked函数)
  6. 建立自己的git账户并保存资料的重要性
  7. day36 03-Hibernate检索方式:排序、参数绑定、投影查询
  8. Maximum Subarray with Sum/ Multiply
  9. Ubuntu14.04 桌面 launcher 终端 状态栏 失效解决
  10. 用Android自带的signapk.jar + .x509.pem + .pk8签名应用程序