Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Chunked uploads missing body data. #2229

Closed
Lukasa opened this issue Apr 4, 2017 · 29 comments
Closed

Chunked uploads missing body data. #2229

Lukasa opened this issue Apr 4, 2017 · 29 comments

Comments

@Lukasa
Copy link

Lukasa commented Apr 4, 2017

Summary

In basic Flask applications, the body data of chunked uploads appears to go missing: that is, they do not appear in request.data. I have reproduced this with two different WSGI servers (gunicorn and twisted), both of which handle chunked data appropriately. Non-chunked data does not suffer this problem. I've reproduced this problem on both Python 2.7 and Python 3.6.

Reproduction

The following Flask application demonstrates the problem:

from flask import Flask, request
app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def hello_world():
    return request.data

when run like this: gunicorn -w 4 example:app.

The following test script can be run:

import requests

def gen():
    yield b"hello"
    yield b"world"

print("Making first request")
r = requests.post('http://localhost:8000/', data=b'helloworld')
print("Got: %s" % r.content.decode('utf-8'))
print("Making second request")
r = requests.post('http://localhost:8000/', data=gen())
print("Got: %s" % r.content.decode('utf-8'))

Expected Output

Making first request
Got: helloworld
Making second request
Got: helloworld

Actual Output

Making first request
Got: helloworld
Making second request
Got: 

Environment

% python -VV                                      
Python 3.6.0 (default, Jan 18 2017, 18:08:34) 
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)]
% pip freeze                                      
appdirs==1.4.3
click==6.7
Flask==0.12.1
gunicorn==19.7.1
itsdangerous==0.24
Jinja2==2.9.6
MarkupSafe==1.0
packaging==16.8
pyparsing==2.2.0
six==1.10.0
Werkzeug==0.12.1

References

This was spotted at httpbin. See kennethreitz/httpbin#340 for more.

@kennethreitz
Copy link
Contributor

✨🍰✨

@Lukasa
Copy link
Author

Lukasa commented Apr 4, 2017

Further digging shows that wsgi.input in the environ dictionary is valid in the call to flask.app.Flask.wsgi_app: that is, if I call read on it I get the data out in both the chunked and non-chunked case. So somewhere in the Flask/werkzeug stack that data is getting lost.

@graingert
Copy link

@Lukasa it appears that weukzeug is intentionally returning an empty stream when there's no content length: https://github.com/pallets/werkzeug/blob/109dad4ac9e0a1690666b2d4f29d07d98a3701d9/werkzeug/wsgi.py#L210

@Lukasa
Copy link
Author

Lukasa commented Apr 4, 2017

Yup, that looks like a correct analysis of that code.

So, I'd argue that that behaviour is wrong. There's no reason to require the Content-Length field. PEP 3333 makes it pretty clear that the WSGI server should simulate EOF if the client reads past content-length, so I'm not really sure what werkzeug is trying to protect against here.

@Lukasa
Copy link
Author

Lukasa commented Apr 4, 2017

More generally it makes it basically impossible for werkzeug-using applications to sensibly handle chunked transfer encoding without having their WSGI server buffer the entire inbound data stream, which seems like a pretty unreasonable requirement.

@graingert
Copy link

The server is not required to read past the client's specified Content-Length , and should simulate an end-of-file condition if the application attempts to read past that point. The application should not attempt to read more data than is specified by the CONTENT_LENGTH variable.

A server should allow read() to be called without an argument, and return the remainder of the client's input stream.

A server should return empty bytestrings from any attempt to read from an empty or exhausted input stream.

@davidism
Copy link
Member

davidism commented Apr 4, 2017

@Lukasa I get a BrokenPipeError from requests when trying your example. Is that because of this bug? How did you get the output?

Traceback (most recent call last):
  File "/home/david/.virtualenvs/flask/lib/python3.6/site-packages/requests/adapters.py", line 444, in send
    low_conn.send(hex(len(i))[2:].encode('utf-8'))
  File "/usr/lib64/python3.6/http/client.py", line 986, in send
    self.sock.sendall(data)
BrokenPipeError: [Errno 32] Broken pipe

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/david/Projects/flask/example2.py", line 11, in <module>
    requests.post('http://127.0.0.1:5000/', data=gen())
  File "/home/david/.virtualenvs/flask/lib/python3.6/site-packages/requests/api.py", line 110, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/home/david/.virtualenvs/flask/lib/python3.6/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/home/david/.virtualenvs/flask/lib/python3.6/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/home/david/.virtualenvs/flask/lib/python3.6/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/home/david/.virtualenvs/flask/lib/python3.6/site-packages/requests/adapters.py", line 473, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: [Errno 32] Broken pipe

@Lukasa
Copy link
Author

Lukasa commented Apr 4, 2017

It's certainly possible, yes. What WSGI server are you using?

@davidism
Copy link
Member

davidism commented Apr 4, 2017

Just the built-in dev server. Actually, I forgot I changed gen to

def gen():
    while True:
        yield b"hello, world"

With the original non-infinite generator, I get the empty output.

@Lukasa
Copy link
Author

Lukasa commented Apr 4, 2017

Yeah, so the infinite generator is a problem because werkzeug thinks the request has no length, so it immediately sends a response and then, with the builtin server, probably closes the connection. That'll cause the broken pipe error.

@davidism
Copy link
Member

davidism commented Apr 4, 2017

We probably don't want to allow infinite streams in all cases? Otherwise it would be trivial to tie up a server. Although maybe Werkzeug already handles this, let me try the patch and check.

@Lukasa
Copy link
Author

Lukasa commented Apr 4, 2017

I have no particular objection to disallowing infinite streams, though I don't know that it's really Flask/werkzeug's problem to deal with: I'd say that in the WSGI abstraction the server is responsible for being sensible here.

The bigger issue, ultimately, is that werkzeug seems to require the non-standard wsgi.input_terminated extension to behave correctly in the presence of chunked transfer encoding.

@davidism
Copy link
Member

davidism commented Apr 4, 2017

If we change safe_fallback to False:

  • Werkzeug's dev server will spin forever and keep using more memory.
  • Gunicorn times out, but still reads in a ton of data to memory first. It does not appear to have an option to limit the request body size.
  • uWSGI, the stream is empty by the time it gets to get_input_stream, not sure why. @Lukasa maybe you have some insight here, since I can't imagine uWSGI doesn't support chunked requests. uwsgi --http-socket localhost:5000 -w example:app

I'm not too concerned with the dev server since it's not expected to be used in production. I am concerned with Gunicorn, since it's a common way to deploy a Flask app.

Flask provides a MAX_CONTENT_LENGTH config, but Werkzeug only uses that when parsing a request's form data, and only if the Content-Length header is set. That should be fixed (but doesn't block this).

I'd like to hear from other maintainers too.

@Lukasa
Copy link
Author

Lukasa commented Apr 4, 2017

@Davism Is the uWSGI stream object empty, or is werkzeug saying it's empty? As noted above, those are two very different cases.

@davidism
Copy link
Member

davidism commented Apr 4, 2017

It's an instance of uwsgi._Input. The patch is applied, so it is getting passed to get_data.

@davidism
Copy link
Member

davidism commented Apr 4, 2017

Opened pallets/werkzeug#1096 about obeying max_content_length.

@Lukasa
Copy link
Author

Lukasa commented Apr 4, 2017

Hrm. I don't really know what's going on with uWSGI tbh.

@untitaker
Copy link
Contributor

Re #2229 (comment)

I'd say that in the WSGI abstraction the server is responsible for being sensible here.

There will be one server developer that argues the other way around, which clearly shows in the different behavior across WSGI servers. In the end, if nobody feels responsible for security improvements beyond the spec, none practically exist.

I agree that the current behavior is not optimal, so I'm not really sure what to do there.

@untitaker
Copy link
Contributor

Also generally I'm a fan of having as little logic like this in the WSGI server as possible, since it makes app behavior dependent on deployment.

@Lukasa
Copy link
Author

Lukasa commented Apr 4, 2017

@untitaker Sure, that's reasonable, but that means that Flask/werkzeug needs to find a way to cope with this that isn't "assume there is no body". If the answer is "servers must support the relevant werkzeug extension" then that's fine, but that needs to be documented really clearly somewhere to make it clear to server authors that if they don't implement it then Flask won't see any chunked bodies. Alternatively, Flask/werkzeug could implement some heuristics regarding headers and the first few bytes of the body to try to work out what the server is doing.

I don't mind at all what direction you choose to go. 😁

@davidism
Copy link
Member

davidism commented Apr 4, 2017

@untitaker I think between pallets/werkzeug#1095 and pallets/werkzeug#1096, we should be good. Allows streams without content length, lets Werkzeug handle security if configured in case the WSGI server doesn't handle it. We could still document that servers can implement wsgi.input_terminated.

@davidism
Copy link
Member

pallets/werkzeug#1126 will fix this

@davidism
Copy link
Member

davidism commented Jun 9, 2017

Werkzeug has been fixed, not sure when a 0.13 release will happen though. You can install the latest GitHub archive if you want the fix now, it's only a couple commits off 0.12.2 right now.

@davidism
Copy link
Member

davidism commented Jun 9, 2017

You will need to set MAX_CONTENT_LENGTH in your Flask config for the change to be apparent. If no content length or max is set, the fallback to an empty stream is still enforced.

@trondhindenes
Copy link

I'm trying this with the cloned versions of Flask and Werkzeug, but I'm still seeing the problem with empty request body. Should I have to configure anything else besides this?

app = Flask(__name__, static_folder=static_files_path)
app.config['MAX_CONTENT_LENGTH'] = 9999999

@davidism
Copy link
Member

See pallets/werkzeug#1149, fix needs to be fixed.

@cetanu
Copy link

cetanu commented Jun 8, 2018

I'm still having issues with this in Flask 1.0.2 and both gunicorn 19.7.1 & uwsgi 2.0.17

Can't seem to get the request body no matter what I try. Any known workarounds?

@dumblob
Copy link

dumblob commented Sep 19, 2018

@cetanu are you sure Flask 1.0.2 (or newer) with gunicorn 19.7.1 (or newer) didn't work?

I can believe Flask + uwsgi didn't/doesn't work, but Flask + gunicorn shall be a different story.

@fredzannarbor
Copy link

I appear to be having a similar issue in Flask 1.0.2 with mod_wsgi where the request body is going missing only when it is mod_wsgi that launches flask. i have attached the debug output from my .wsgi app. Can anyone confirm that this is the same issue?

[Tue May 14 17:17:12.639947 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] ('REQUEST',
[Tue May 14 17:17:12.639981 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640474 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] {'CONTENT_LENGTH': '2686',
[Tue May 14 17:17:12.640483 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640495 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'CONTENT_TYPE': 'application/json; charset=utf-8',
[Tue May 14 17:17:12.640500 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640511 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'CONTEXT_DOCUMENT_ROOT': '/opt/lampstack-7.1.26-0/apache2/htdocs',
[Tue May 14 17:17:12.640516 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640526 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'CONTEXT_PREFIX': '',
[Tue May 14 17:17:12.640530 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640540 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'DOCUMENT_ROOT': '/opt/lampstack-7.1.26-0/apache2/htdocs',
[Tue May 14 17:17:12.640545 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640555 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'GATEWAY_INTERFACE': 'CGI/1.1',
[Tue May 14 17:17:12.640559 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640569 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'HTTP_ACCEPT': 'application/json',
[Tue May 14 17:17:12.640574 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640583 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'HTTP_ACCEPT_CHARSET': 'utf-8',
[Tue May 14 17:17:12.640588 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640597 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'HTTP_CONNECTION': 'Keep-Alive',
[Tue May 14 17:17:12.640602 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640611 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'HTTP_HOST': 'www.altbrains.com',
[Tue May 14 17:17:12.640616 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640657 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'HTTP_SIGNATURE': 'SuKzPjhCLGR2wEBMuqS4gCEl2YSfnGZlCAXl1ABZmJA6/wL1ckVWk9Wo5ihijXMk1MyrRCmALTbruhsECSIa/rg3WSsrX5MeNVbhz6uj1IXlF+JjnRDZ7YOe/Yrri6BS4fdURDX6RRDzOKqTvg7D0MnnRHq/2JrpBQQSs0Ruue/M/WbrMkQTu7qBx/gVpol5ejcz00VPZA9ycXTJwdgRJQ00egu9dWCtEKKGMiw7zjyRHCANLZjX75q79PG97A6d//YUdurPN+pjjot2xEeFVOTzjAH2Mua2bdwLgULCThxKF94pgjcxY7+ciXgAqcrok1Liv/4A2MzprzEhBe3NXg==',
[Tue May 14 17:17:12.640666 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640689 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'HTTP_SIGNATURECERTCHAINURL': 'https://s3.amazonaws.com/echo.api/echo-api-cert-6-ats.pem',
[Tue May 14 17:17:12.640695 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640706 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'HTTP_USER_AGENT': 'Apache-HttpClient/4.5.x (Java/1.8.0_202)',
[Tue May 14 17:17:12.640711 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640737 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'LD_LIBRARY_PATH': '/opt/lampstack-7.1.26-0/sqlite/lib:/opt/lampstack-7.1.26-0/mysql/lib:/opt/lampstack-7.1.26-0/apache2/lib:/opt/lampstack-7.1.26-0/common/lib:/opt/lampstack-7.1.26-0/sqlite/lib:/opt/lampstack-7.1.26-0/mysql/lib:/opt/lampstack-7.1.26-0/apache2/lib:/opt/lampstack-7.1.26-0/common/lib:/opt/lampstack-7.1.26-0/git/lib:/opt/lampstack-7.1.26-0/sqlite/lib:/opt/lampstack-7.1.26-0/mysql/lib:/opt/lampstack-7.1.26-0/apache2/lib:/opt/lampstack-7.1.26-0/common/lib',
[Tue May 14 17:17:12.640762 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640774 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'PATH_INFO': '',
[Tue May 14 17:17:12.640778 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640788 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'QUERY_STRING': '',
[Tue May 14 17:17:12.640793 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640802 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'REMOTE_ADDR': '72.21.217.41',
[Tue May 14 17:17:12.640807 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640817 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'REMOTE_PORT': '5927',
[Tue May 14 17:17:12.640821 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640831 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'REQUEST_METHOD': 'POST',
[Tue May 14 17:17:12.640835 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640844 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'REQUEST_SCHEME': 'https',
[Tue May 14 17:17:12.640849 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640859 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'REQUEST_URI': '/basketball',
[Tue May 14 17:17:12.640863 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640873 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'SCRIPT_FILENAME': '/home/ubuntu/voice/AltBrains_Basketball/basketball.wsgi',
[Tue May 14 17:17:12.640878 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640887 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'SCRIPT_NAME': '/basketball',
[Tue May 14 17:17:12.640892 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640901 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'SERVER_ADDR': '172.30.0.65',
[Tue May 14 17:17:12.640905 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640915 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'SERVER_ADMIN': '[email protected]',
[Tue May 14 17:17:12.640919 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640929 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'SERVER_NAME': 'www.altbrains.com',
[Tue May 14 17:17:12.640933 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640943 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'SERVER_PORT': '443',
[Tue May 14 17:17:12.640947 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640957 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'SERVER_PROTOCOL': 'HTTP/1.1',
[Tue May 14 17:17:12.640961 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640971 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'SERVER_SIGNATURE': '',
[Tue May 14 17:17:12.640975 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640984 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'SERVER_SOFTWARE': 'Apache',
[Tue May 14 17:17:12.640989 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.640998 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'SSL_TLS_SNI': 'www.altbrains.com',
[Tue May 14 17:17:12.641003 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641020 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'apache.version': (2, 4, 29),
[Tue May 14 17:17:12.641025 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641039 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.application_group': 'localhost|/basketball',
[Tue May 14 17:17:12.641044 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641054 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.callable_object': 'application',
[Tue May 14 17:17:12.641058 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641068 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.connection_id': 'ws0lNLzQwAE',
[Tue May 14 17:17:12.641072 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641082 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.daemon_connects': '1',
[Tue May 14 17:17:12.641086 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641096 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.daemon_restarts': '0',
[Tue May 14 17:17:12.641100 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641110 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.daemon_start': '1557854232639360',
[Tue May 14 17:17:12.641114 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641124 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.enable_sendfile': '0',
[Tue May 14 17:17:12.641128 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641137 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.handler_script': '',
[Tue May 14 17:17:12.641142 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641151 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.ignore_activity': '0',
[Tue May 14 17:17:12.641155 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641165 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.listener_host': '',
[Tue May 14 17:17:12.641169 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641178 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.listener_port': '443',
[Tue May 14 17:17:12.641183 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641192 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.path_info': '',
[Tue May 14 17:17:12.641197 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641206 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.process_group': 'basketball',
[Tue May 14 17:17:12.641211 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641220 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.queue_start': '1557854232639206',
[Tue May 14 17:17:12.641225 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641234 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.request_handler': 'wsgi-script',
[Tue May 14 17:17:12.641239 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641248 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.request_id': 'bPYlNLzQwAE',
[Tue May 14 17:17:12.641253 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641262 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.request_start': '1557854232639084',
[Tue May 14 17:17:12.641266 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641276 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.script_name': '/basketball',
[Tue May 14 17:17:12.641284 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641294 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.script_reloading': '1',
[Tue May 14 17:17:12.641299 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641308 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.script_start': '1557854232639445',
[Tue May 14 17:17:12.641316 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641326 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.thread_id': 2,
[Tue May 14 17:17:12.641331 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641341 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.thread_requests': 0,
[Tue May 14 17:17:12.641345 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641355 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.total_requests': 3,
[Tue May 14 17:17:12.641359 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641374 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'mod_wsgi.version': (4, 6, 5),
[Tue May 14 17:17:12.641379 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641396 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'wsgi.errors': <_io.TextIOWrapper name='<wsgi.errors>' encoding='utf-8'>,
[Tue May 14 17:17:12.641405 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641418 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'wsgi.file_wrapper': <class 'mod_wsgi.FileWrapper'>,
[Tue May 14 17:17:12.641423 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641437 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'wsgi.input': <mod_wsgi.Input object at 0x7fc1742c1c70>,
[Tue May 14 17:17:12.641442 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641452 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'wsgi.input_terminated': True,
[Tue May 14 17:17:12.641456 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641466 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'wsgi.multiprocess': False,
[Tue May 14 17:17:12.641470 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641480 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'wsgi.multithread': True,
[Tue May 14 17:17:12.641484 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641494 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'wsgi.run_once': False,
[Tue May 14 17:17:12.641498 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641508 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'wsgi.url_scheme': 'https',
[Tue May 14 17:17:12.641512 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.641532 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] 'wsgi.version': (1, 0)})
[Tue May 14 17:17:12.642418 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] ('RESPONSE',
[Tue May 14 17:17:12.642432 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.642445 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] '308 PERMANENT REDIRECT',
[Tue May 14 17:17:12.642450 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.642486 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] [('Content-Type', 'text/html; charset=utf-8'),
[Tue May 14 17:17:12.642492 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.642505 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] ('Content-Length', '281'),
[Tue May 14 17:17:12.642510 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927]
[Tue May 14 17:17:12.642525 2019] [wsgi:error] [pid 2325] [remote 72.21.217.41:5927] ('Location', 'https://www.altbrains.com/basketball/')])
[Tue May 14 17:17:29.096614 2019] [ssl:info] [pid 31818] [client 178.154.244.190:49805] AH01964: Connection to child 8 established (server localhost:443)
[Tue May 14 17:17:29.354443 2019] [core:info] [pid 31818] [client 178.154.244.190:49805] AH00128: File does not exist: /opt/lampstack-7.1.26-0/apache2/htdocs/robots.txt
[Tue May 14 17:17:32.923909 2019] [ssl:info] [pid 31307] [client 37.9.87.150:42833] AH01964: Connection to child 0 established (server localhost:443)
[Tue May 14 17:18:19.832119 2019] [ssl:info] [pid 31327] [client 192.0.102.40:49892] AH01964: Connection to child 5 established (server localhost:443)
[Tue May 14 17:18:33.960589 2019] [ssl:info] [pid 32606] [client 209.133.111.211:44328] AH01964: Connection to child 9 established (server localhost:443)
[Tue May 14 17:18:34.031851 2019] [ssl:info] [pid 32606] (70014)End of file found: [client 209.133.111.211:44328] AH01991: SSL input filter read failed.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants