Python之Http服务设置跨域请求

Http服务设置跨域请求

跨域是什么就不在此进行赘述了, 百度一下,你就知道。

flask的处理方法

flask中处理跨域很简单, 只需要在flask的app对象中注册函数处理:

app.after_request(after_request)

其中的after_request即为处理跨域的函数, 当请求处理完成,还未响应给客户端之前,flask会调用这个函数。

def after_request(resp):
    """响应返回客户端前的钩子函数, 该函数用于保证跨域能够正常

    Args:
        resp (object): 响应

    Returns:
        resp: 修改后的响应
    """
    resp = make_response(resp)
    resp.headers['Access-Control-Allow-Origin'] = '*'
    resp.headers['Access-Control-Allow-Methods'] = 'GET,POST'
    resp.headers['Access-Control-Allow-Headers'] = 'x-requested-with,content-type'
    return resp

以上代码加装饰器@app.after_request可以达到同样效果, 如果以装饰器方式, 则无需调用app.after_request(after_request)

http.server的处理方法

http.server为python预置库, 只需提供一个RequestHandler给到TCPServer对象。处理跨域核心代码在end_headers中。

import os
import sys
import http.server
import socketserver

class HTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
    def end_headers(self):
        self.send_header('Access-Control-Allow-Origin', '*')
        self.send_header('Access-Control-Allow-Methods', 'GET,POST')
        self.send_header('Access-Control-Allow-Headers', 'x-requested-with,content-type')
        http.server.SimpleHTTPRequestHandler.end_headers(self)

def server(port):
    httpd = socketserver.TCPServer(('', port), HTTPRequestHandler)
    return httpd

posted @ 2023-11-28 09:10  汗牛充栋  阅读(261)  评论(0编辑  收藏  举报