zoukankan      html  css  js  c++  java
  • web开发基础

    CS编程:客户端、服务端编程

    BS编程:Browser、Server编程

    HTTP协议 无状态协议 为了解决无状态,cookie就是解决方案之一(cookie对应B端,session对应S端)

    URL组成

    http://www.magedu.com/python/index.html?id=5&name=python

    scheme协议   http

    host:port www.magedu.com 80位默认端口不写

    path /python/index.html

    query string id=5 name=python

    http消息

    Request-Response

    请求方法:

    GET 请求获取URL对应的资源

    POST 提交数据至服务器

    HEAD 和GET类似 不过不返回正文

    无状态-短连接-长连接

    无状态 http的每次请求都是无状态的,解决方案是cookie-session

    短连接 http1.1之前,一个请求一个连接,但是这样tcp的创建销毁成本太高,所有诞生了http1.1,http1.1默认开启长连接,可设置时长

    长连接 http1.1之后支持keep-alive,默认开启,可设置,一个连接tcp连接建立后,会保持一段时间,浏览器再次请求时,会继续只用这个连接

    WSGI

    WSFI主要规定了服务与应用程序间的接口

    environ

    environ是包含Http请求信息的dict对象

     
    REQUEST_METHOD 请求方法,GET、POST等
    PATH_INFO URL中的路径部分
    QUERY_STRING 查询字符串
    SERVER_NAME, SERVER_PORT 服务器名、端口
    HTTP_HOST 地址和端口
    SERVER_PROTOCOL 协议
    HTTP_USER_AGENT UserAgent信息

    start_reponse

    它是一个可调用对象。有3个参数,定义如下:
    start_response(status, response_headers, exc_info=None)
    status 是状态码,例如 200 OK
    response_headers 是一个元素为二元组的列表,例如[('Content-Type', 'text/plain;charset=utf-8')] 
    exc_info 在错误处理的时候使用
    start_response应该在返回可迭代对象之前调用,因为它返回的是Response Header。返回的可迭代对象是
    Response Body。

    APP三种实现方法

    res_str = b'magedu.com
    '
    
    # 函数实现
    def application(environ, start_response):
    return [res_str]
    # 类实现
    class Application:
    def __init__(self, environ, start_response):
    pass
    def __iter__(self): # 实现此方法,对象即可迭代
    yield res_str
    # 类实现
    class Application:
    def __call__(self, environ, start_response):
    return [res_str]

    测试命令

    $ curl -I http://192.168.142.1:9999/xxx?id=5
    $ curl -X POST http://192.168.142.1:9999/yyy -d '{"x":2}'
    -I 使用HEAD方法
    -X 指定方法,-d传输数据

    简单实现WSGI框架(server端)

    demo_app

    from wsgiref.simple_server import make_server, demo_app
    
    ip = '127.0.0.1'
    port = 9999
    server = make_server(ip, port, demo_app)
    server.serve_forever()

    simple_server

    from wsgiref.simple_server import make_server
    
    
    def application(environ, start_response):
        status = "200 ok"
        headers = [('Content-Type', 'text/html;charset=utf-8')]
        start_response(status, headers)
        html = '<h1>hello magedu</h1>'.encode("utf-8")
        return [html]
    
    
    ip = '127.0.0.1'
    port = 9999
    server = make_server(ip, port, application)
    server.serve_forever()
     

    WEB服务器

    本质上就是一个TCP服务器,监听在特定端口上
    支持HTTP协议,能够将HTTP请求报文进行解析,能够把响应数据进行HTTP协议的报文封装并返回浏览器
    端。
    实现了WSGI协议,该协议约定了和应用程序之间接口(参看PEP333,https://www.python.org/dev/peps/p
    ep-0333/)
    APP应用程序
    遵从WSGI协议
    本身是一个可调用对象
    调用start_response,返回响应头部
    返回包含正文的可迭代对象
  • 相关阅读:
    爬取网易云音乐歌手和id
    【兼容调试】cffi library '_openssl' has no function, constant or global variable named 'Cryptography_HAS
    python如何去掉字符串‘xa0’
    python 中json和字符串互相转换
    vip视频播放
    一行Python代码画心型
    Java语言编写MD5加密方法,Jmeter如何给字符串MD5加密
    转载:oracle RAC集群启动和关闭
    转载:oracle 11g ADG实施手册(亲测,已成功部署多次)
    如何上传本地文件到github又如何删除自己的github仓库
  • 原文地址:https://www.cnblogs.com/soymilk2019/p/14955132.html
Copyright © 2011-2022 走看看