Skip to content

Commit

Permalink
add httserver demo for test and add config.yaml
Browse files Browse the repository at this point in the history
Signed-off-by: helight <[email protected]>
  • Loading branch information
helight committed Sep 29, 2020
1 parent 647e95f commit 2831af1
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 2 deletions.
32 changes: 30 additions & 2 deletions http-filter-example/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,40 @@ http_filters:
- name: sample # before envoy.router because order matters!
typed_config:
"@type": type.googleapis.com/sample.Decoder
key: via
key: Via
val: sample-filter
- name: envoy.router
typed_config: {}
```
or you can just use this demo yaml file [config.yaml](config.yaml).
- Run envoy with this cmd:
```sh
./bazel-bin/envoy --config-path ./http-filter-example/config.yaml -l trace
```
- Run an http server
```sh
python httpserver.py
```
- Access the http server with curl cmd:
```sh
curl http://127.0.0.1:8080
```
You can find there is an kv string in the request header to the http server,
and the key value `Via` has become to `via`, you can see the request header
in the http server stdout.
```sh
$ python httpserver.py
Started httpserver on port 8081
127.0.0.1 - - [29/Sep/2020 11:30:03] "GET / HTTP/1.1" 200 -
host: 127.0.0.1:8080
user-agent: curl/7.58.0
accept: */*
x-forwarded-proto: http
x-request-id: b7a8d227-77a0-4985-a121-5e0f70bd16f2
via: sample-filter
x-envoy-expected-rq-timeout-ms: 15000
content-length: 0
```

[StreamDecoderFilter]: https://github.com/envoyproxy/envoy/blob/b2610c84aeb1f75c804d67effcb40592d790e0f1/include/envoy/http/filter.h#L300
[StreamEncoderFilter]: https://github.com/envoyproxy/envoy/blob/b2610c84aeb1f75c804d67effcb40592d790e0f1/include/envoy/http/filter.h#L413
Expand Down
51 changes: 51 additions & 0 deletions http-filter-example/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
admin:
access_log_path: /dev/null
address:
socket_address:
address: 127.0.0.1
port_value: 0
static_resources:
clusters:
name: cluster_0
connect_timeout: 0.25s
load_assignment:
cluster_name: cluster_0
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: 127.0.0.1
port_value: 8081
listeners:
- name: listener_0
address:
socket_address:
address: 127.0.0.1
port_value: 8080
filter_chains:
- filters:
- name: envoy.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
stat_prefix: ingress_http
codec_type: auto
route_config:
name: local_route
virtual_hosts:
- name: local_service
domains:
- "*"
routes:
- match:
prefix: "/"
route:
cluster: cluster_0
http_filters:
- name: sample # before envoy.router because order matters!
typed_config:
"@type": type.googleapis.com/sample.Decoder
key: vIa
val: sample-filter
- name: envoy.router
typed_config: {}
27 changes: 27 additions & 0 deletions http-filter-example/httpserver.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/usr/bin/python
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer

PORT = 8081

class doHandler(BaseHTTPRequestHandler):
# Handler for the GET requests
def do_GET(self):
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
print self.headers # print the http header
# Send the html message
self.wfile.write("Hello World !")
return

try:
# Create a web server and define the handler to manage the incoming request
server = HTTPServer(('', PORT), doHandler)
print 'Started httpserver on port ' , PORT

# Wait forever for incoming http requests
server.serve_forever()

except KeyboardInterrupt:
print 'shutting down the web server'
server.socket.close()

0 comments on commit 2831af1

Please sign in to comment.