• Python网络编程—TCP套接字之HTTP传输


    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
    "
    14       response += "Content-Type:text/html
    "
    15       response += '
    '
    16       response += f.read()
    17   else:
    18     response = "HTTP/1.1 404 Not Found
    "
    19     response += "Content-Type:text/html
    "
    20     response += '
    '
    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 发送网页给浏览器
  • 相关阅读:
    Android 自定义标题栏 并进行事件处理
    java synchronized详解
    Java中LinkedList与ArrayList有什么区别
    android动态全屏切换
    java线程机制介绍
    设置导航栏背景和文字属性
    Dictionary的用法
    bundle
    解析Json
    Copy与MutableCopy
  • 原文地址:https://www.cnblogs.com/maplethefox/p/10989040.html
Copyright © 2020-2023  润新知