HTTP服务器应该如何响应它不支持的代理请求';我不想处理?

HTTP服务器应该如何响应它不支持的代理请求';我不想处理?,http,proxy,Http,Proxy,HTTP请求的第一行包含一个“目标”,它是以下内容之一: request-target = origin-form / absolute-form / authority-form / asterisk-form origin表单是典型的表单,例如,GET/hello world HTTP/1.1。代理请求使用绝对形式: GET https://example.com/ HTTP/1.1 假设该请求到达

HTTP请求的第一行包含一个“目标”,它是以下内容之一:

request-target = origin-form
               / absolute-form
               / authority-form
               / asterisk-form
origin表单
是典型的表单,例如,
GET/hello world HTTP/1.1
。代理请求使用
绝对形式

GET https://example.com/ HTTP/1.1
假设该请求到达一个源服务器,该服务器只是试图服务于其他域。(例如,假设我们将上述请求发送到
en.wikipedia.org
)手头的服务器不希望成为代理服务器,也不希望满足发出的请求。它应该返回什么?(理想情况下,为什么?HTTP RFC中是否有任何地方说明了这一点?)

(我查询了一些服务器,看看实际发生了什么。我得到的数据大多是500、200(但内容不正确),一个
409冲突
,在一个特殊情况下,一个
301永久移动
,形成了一个无限循环。我觉得客户端向一个服务器发送一个代理请求是一个错误,而这个服务器不能,也不会完成它。服务器及其行为没有任何问题,应该进行更改的领域在于因此,在客户机上是4xx,但我不清楚哪一个是合适的。)

好问题。发件人:

5.1.2请求URI

允许将来在所有请求中过渡到AbsoluteURI 在HTTP版本中,所有HTTP/1.1服务器都必须接受绝对URI 即使HTTP/1.1客户端只生成 在对代理的请求中删除它们

以及:

5.2请求确定的资源

由Internet请求标识的确切资源由 检查请求URI和主机头字段

不允许资源因 请求的主机在以下情况下可能忽略主机标头字段值: 确定由HTTP/1.1请求标识的资源。(但请参见 第19.6.1.1节了解HTTP/1.1中关于主机支持的其他要求。)

基于主机区分资源的源服务器 请求(有时称为虚拟主机或虚拟主机 名称)必须使用以下规则来确定请求的 HTTP/1.1请求上的资源:

  • 如果请求URI是绝对URI,则主机是 请求URI。请求中的任何主机标头字段值必须为 忽略

  • 如果请求URI不是绝对URI,并且请求包括 主机头字段,主机由主机头确定 字段值

  • 如果由规则1或2确定的主机不是上的有效主机 对于服务器,响应必须是400(错误请求)错误消息

  • 因此,正确的答案似乎是要么忽略主机,只是尝试在本地完成请求,让它产生任何可能的错误,要么发送400。这不是完全确定的,因为错误在GET行中,而不是主机行中,并且您的服务器不是“一个根据请求的主机区分资源的源服务器”,但它似乎与RFC得到的一样接近

    后续RFC中,具有与上述5.1.2相同的措辞;我找不到类似第5.2节的内容,但它有以下内容:

    无效请求行的收件人应使用 400(错误请求)错误或301(永久移动)重定向 请求目标已正确编码