لماذا WGET لديها رأس مضيف في طلب HTTP الخاص بها؟
-
26-09-2019 - |
سؤال
الفرق الرئيسي بين HTTP/1.0 و HTTP/1.1 هو أن HTTP/1.1 له أ إلزامي مضيف رأسه (المصدر: مرجع الجيب HTTP - O'Reilly).
لذا ، لماذا هذا wget ، الذي يستخدم بروتوكول HTTP/1.0 ، لديه رأس مضيف فيه؟
إخراج WGET الخاص بي مع Netcat:
GET / HTTP/1.0
User-Agent: Wget/1.12 (linux-gnu)
Accept: */*
Host: 127.0.0.1:10101
Connection: Keep-Alive
كما هو واضح أن WGET يستخدم إصدار بروتوكول HTTP/1.0 ، كيف يمكن أن يكون له رأس مضيف فيه؟ أم أنني أخطأ في مكان ما في فهمي لبروتوكول HTTP؟
وحتى إذا كان بإمكان HTTP/1.0 أن يكون له رأس مضيف في طلب HTTP الخاص به ، فماذا يمكن أن يكون السبب وراء WGET باستخدام بروتوكول HTTP/1.0 بينما يمكن أيضًا استخدام HTTP/1.1 بدلاً من ذلك؟
المحلول
تمت إضافة رأس المضيف كإضافة "اختيارية" إلى HTTP/1.0 في وقت مبكر جدًا عندما أدرك أن هذه هي الطريقة الوحيدة للسماح لخادم واحد بتقديم صفحات لمجالات متعددة. يستخدم WGET HTTP/1.0 مع المضيف كوسيلة لتكون متوافقة مع الحد الأقصى لعدد المواقع ، والتي لا يستجيب بعضها إلى HTTP/1.1 على الرغم من أنها تتطلب مضيفًا.
نصائح أخرى
في HTTP/1.0 ، Host
كان الرأس اختياري. الفرق هو أن HTTP/1.1 غيره من اختياري إلى إلزامي.
على وجه الخصوص ، إذا كان GET
لا يتضمن السطر اسم المضيف (كما هو الحال في مثالك) ، فأنت بحاجة إلى تضمينه في الرؤوس (لأنه خلاف ذلك ، لن تكون المجالات "الافتراضية" ممكنة إذا لم يتمكن الخادم من تحديد طلبك المطلوب).