python / python/cpython

wsgiref validator complaining about no content-type when it is not needed

Ouverte
#93,416 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

stdlib type-bug
Langage dominant
Python
Étoiles
77.2k
Forks
36k
Métriques de merge des PR
Métriques de PR en attente

Description

Bug report

https://github.com/python/cpython/blob/main/Lib/wsgiref/validate.py#L70 says that it wants to check

  • That no Content-Type is given when there is no content

However, the code's behaviour appears not to match that.

The code notes there was uncertainty: https://github.com/python/cpython/blob/main/Lib/wsgiref/validate.py#L417
But more importantly, its behaviour is a contradiction with the stated objective mentioned above, as I interpret this.
I also cannot see where RFC2616 (which has been obsoleted by others, it would seem) mandates that behaviour.

In the following example, there is no content, and the validator complains about no Content-Type:

#!/usr/bin/env python3

from wsgiref.simple_server import make_server
from wsgiref.validate import validator

def wsgi_callable(environ, start_response):
	start_response('302 Found', [('Location', 'https://example.com/')])
	return [] # same result with None

make_server(host='localhost', port=8080, app=validator(wsgi_callable)).serve_forever()

When I make a request with curl localhost:8080, this error appears:

Traceback (most recent call last):
  File "/usr/lib/python3.10/wsgiref/handlers.py", line 137, in run
    self.result = application(self.environ, self.start_response)
  File "/usr/lib/python3.10/wsgiref/validate.py", line 181, in lint_app
    iterator = application(environ, start_response_wrapper)
  File "/home/calimero/test.py", line 7, in wsgi_callable
    start_response('302 Found', [('Location', 'https://example.com/')])
  File "/usr/lib/python3.10/wsgiref/validate.py", line 172, in start_response_wrapper
    check_content_type(status, headers)
  File "/usr/lib/python3.10/wsgiref/validate.py", line 428, in check_content_type
    assert_(0, "No Content-Type header found in headers (%s)" % headers)
  File "/usr/lib/python3.10/wsgiref/validate.py", line 128, in assert_
    raise AssertionError(*args)
AssertionError: No Content-Type header found in headers ([('Location', 'https://example.com/')])

Your environment

  • CPython version tested on: 3.10.4
  • Operating system and architecture: Archlinux x86-64

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par Lib/wsgiref/validate.py, en particulier la description vers la ligne 70, l’incertitude signalée vers la ligne 417 et check_content_type autour de la ligne 428. Reproduisez l’exemple de redirection avec le validateur et examinez les exigences WSGI ou HTTP pertinentes. C’est terminé lorsque le comportement du validateur et l’objectif déclaré concordent, avec une couverture de régression pour le cas signalé.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
backend
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.