go 原生http web 服务跨域restful api 写法

错误写法

func main() {

    openHttpListen()
}

func openHttpListen() {
    http.HandleFunc("/", receiveClientRequest)
    fmt.Println("go server start running...")

    err := http.ListenAndServe(":9090", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

func receiveClientRequest(w http.ResponseWriter, r *http.Request) {

    w.Header().Set("Access-Control-Allow-Origin", "*")             //允许访问所有域
    w.Header().Add("Access-Control-Allow-Headers", "Content-Type") //header的类型
    w.Header().Set("content-type", "application/json")             //返回数据格式是json

    r.ParseForm()
    fmt.Println("收到客户端请求: ", r.Form)

这样还是会报错:

说没有得到响应跨域的头,chrome的network中确实没有响应Access-Control-Allow-Origin 

正确写法:

func LDNS(w http.ResponseWriter, req *http.Request) {

    if origin := req.Header.Get("Origin"); origin != "" {
        w.Header().Set("Access-Control-Allow-Origin", origin)
        w.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
        w.Header().Set("Access-Control-Allow-Headers",
            "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
    }
    if req.Method == "OPTIONS" {
        return
    }
    // 响应http code
    w.WriteHeader(200)
    query := strings.Split(req.Host, ".")
    value, err := ldns.RAMDBMgr.Get(query[0])
    fmt.Println("Access-Control-Allow-Origin", "*")
    if err != nil {
        io.WriteString(w, `{"message": ""}`)
        return
    }

    io.WriteString(w, value)
}
### Vue3 前后端数据交互模拟工具与方法 对于Vue3项目中的前后端数据交互模拟,存在多种有效的方法和工具来支持这一需求。这些解决方案不仅能够帮助开发者在早期阶段快速迭代界面设计,还能确保前端逻辑独立于实际的服务端环境进行测试。 #### 使用 Mock.js 进行简单而灵活的数据伪造 Mock.js 是一款广泛应用于中国互联网公司的开源库,它允许通过定义简单的规则来自动生成复杂的JSON响应结构[^3]。这种方式非常适合用来创建静态或动态的虚拟API接口,从而让前端工程师能够在没有真实后台支撑的情况下推进工作进度。例如: ```javascript // 导入 mockjs 库 import Mock from 'mockjs' // 定义随机生成器模板 const Random = Mock.Random; // 创建一个GET请求拦截器并指定URL路径匹配模式 Mock.mock(/\/api\/users/, { "list|1-10": [{ id: '@increment', name: '@cname', // 中文名字 email: '@email' }] }); ``` 上述代码片段展示了如何利用 `Mock.js` 来制造一组用户列表作为HTTP GET请求 `/api/users` 的回复内容。这里的关键在于配置好相应的路由映射关系以及期望返回的具体字段格式。 #### 配合 JSON Server 构建简易 RESTful API 服务器 除了直接嵌入式的模拟外,还可以考虑采用更接近生产环境的方式——即运行自己的小型RESTful Web Service来进行调试验证。这便是 json-server 所擅长之处;只需准备一份描述资源模型的 `.json` 文件即可迅速启动一套完整的CRUD操作集。 假设有一个名为 `db.json` 的文件如下所示: ```json { "posts": [ { "id": 1, "title": "hello", "author": "typicode" } ], "comments": [ { "id": 1, "body": "some comment", "postId": 1 } ] } ``` 那么只需要执行命令 `npx json-server --watch db.json` 就能立即获得基于该文档所构建出来的在线服务实例了! #### Axios 或 Fetch 实现 HTTP 请求发送 无论选择了哪种形式的伪数据源,最终都需要借助合适的客户端网络通信手段去发起调用动作。现代JavaScript应用通常会倾向于使用 axios 或者原生 fetch 函数完成这项任务。下面给出一段典型的axios写法示范: ```javascript // 引入 axios 库 import axios from 'axios'; async function fetchData() { try { const response = await axios.get('/api/data'); console.log(response.data); } catch (error) { console.error(error); } } fetchData(); ``` 这段脚本说明了怎样异步获取远程地址上的信息,并处理可能发生的异常情况。值得注意的是,在开发过程中应当合理设置代理规则以解决资源共享(CORS)问题,尤其是在结合像 Nginx这样的反向代理服务器部署方案时更是如此[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值