سؤال

الفرق الرئيسي بين 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 لا يتضمن السطر اسم المضيف (كما هو الحال في مثالك) ، فأنت بحاجة إلى تضمينه في الرؤوس (لأنه خلاف ذلك ، لن تكون المجالات "الافتراضية" ممكنة إذا لم يتمكن الخادم من تحديد طلبك المطلوب).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top