Giter Site home page Giter Site logo

Comments (8)

spacewander avatar spacewander commented on May 17, 2024
  1. you can get/set the header via Request.Header, see https://pkg.go.dev/github.com/apache/[email protected]/pkg/http#Header
  2. you can stop the request with headers, see
    w.Header().Add("X-Resp-A6-Runner", "Go")
  3. currently, there is no way to set response header without stopping the request (the core.response.set_header(k, v) in your example). Maybe you can open an issue to track it?

from apisix-go-plugin-runner.

GhangZh avatar GhangZh commented on May 17, 2024
  1. you can get/set the header via Request.Header, see https://pkg.go.dev/github.com/apache/[email protected]/pkg/http#Header
  2. you can stop the request with headers, see
    w.Header().Add("X-Resp-A6-Runner", "Go")
  3. currently, there is no way to set response header without stopping the request (the core.response.set_header(k, v) in your example). Maybe you can open an issue to track it?

I want to proxy all the responses. Is there any way to do that?

from apisix-go-plugin-runner.

GhangZh avatar GhangZh commented on May 17, 2024

I wrote a demo, but I found that the response body is empty ,For example, if I add this plugin to luacode.com, and I request a.com, the plugin will request b.com and do the processing, now the processing is successful but there is no response content from luacode.com.

package plugins

import (
	"encoding/json"
	"fmt"
	pkgHTTP "github.com/apache/apisix-go-plugin-runner/pkg/http"
	"github.com/apache/apisix-go-plugin-runner/pkg/log"
	"github.com/apache/apisix-go-plugin-runner/pkg/plugin"
	"github.com/sirupsen/logrus"
	"net/http"
	"time"
)

func init() {
	err := plugin.RegisterPlugin(&ForwardAuth{})
	if err != nil {
		log.Fatalf("failed to register plugin ForwardAuth: %s", err)
	}
}

// ForwardAuth is a demo to show how to return data directly instead of proxying
// it to the upstream.
type ForwardAuth struct {
}

type ForwardAuthConf struct {
	Body string `json:"body"`
}

func (p *ForwardAuth) Name() string {
	return "forward-auth"
}

func (p *ForwardAuth) ParseConf(in []byte) (interface{}, error) {
	conf := ForwardAuthConf{}
	err := json.Unmarshal(in, &conf)
	return conf, err
}
func (p *ForwardAuth) Filter(conf interface{}, w http.ResponseWriter, r pkgHTTP.Request) {
	req, err := http.NewRequest("GET", "http://b.com", nil)
	if err != nil {
		logrus.Errorf("send request failed err:%v", err)
		return
	}
	//req.Header.Set("Cookie", r.Header().Get("Cookie"))
	client := http.Client{
		Timeout: 5 * time.Second,
	}
	resp, err := client.Do(req)
	if err != nil {
		logrus.Errorf("get response failed err:%v", err)
		return
	}
	if resp == nil {
		logrus.Errorf("response is nil")
		return
	}
	defer resp.Body.Close()

	if len(resp.Header) > 0 {
		for k, v := range resp.Header {
			if v != nil {
				w.Header().Set(k, v[0])
			}
		}
	}

	w.Header().Add("X-Resp-A6-Runner", "Go")
	return

}

not use plugin
image
after use pulgin
image

from apisix-go-plugin-runner.

GhangZh avatar GhangZh commented on May 17, 2024

1.I found that after I use core.response.set_header(k, v) then the response body of the service I requested was empty.
2.What do you mean by this? @spacewander

  1. you can stop the request with headers, see
    w.Header().Add("X-Resp-A6-Runner", "Go")
  2. currently, there is no way to set response header without stopping the request (the core.response.set_header(k, v) in your example). Maybe you can open an issue to track it?

from apisix-go-plugin-runner.

spacewander avatar spacewander commented on May 17, 2024

Currently, setting response data will mean stopping the current process and returning immediately without proxying the request to upstream.

from apisix-go-plugin-runner.

GhangZh avatar GhangZh commented on May 17, 2024

Currently, setting response data will mean stopping the current process and returning immediately without proxying the request to upstream.

How should I change to proxy the request to upstream ?
I've tried both severless-plugin and go-plugin-runner plugins to support forward-auth,But none of these are currently met, And not having this plugin would cause all our services not being accessible

from apisix-go-plugin-runner.

shuaijinchao avatar shuaijinchao commented on May 17, 2024

@GhangZh try w.Header().Add("X-Resp-A6-Runner", "Go") change to r.Header().Set("X-Resp-A6-Runner", "Go")

from apisix-go-plugin-runner.

GhangZh avatar GhangZh commented on May 17, 2024

Thanks, change to r.Header().Set("X-Resp-A6-Runner", "Go") solved my problem

from apisix-go-plugin-runner.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.