http - ويكيبيديا - what is url




ما الحد الأقصى لطول عنوان URL في المتصفحات المختلفة؟ (11)

ما الحد الأقصى لطول عنوان URL في المتصفحات المختلفة؟ هل تختلف بين المتصفحات؟

هل يفرض بروتوكول HTTP ذلك؟


إجابة قصيرة - الحد الفعلي من 2000 حرف

إذا احتفظت بعناوين URL أقل من 2000 حرف ، فستعمل في أي مجموعة من برامج الخادم والعميل تقريبًا.

إذا كنت تستهدف مستعرضات معينة ، فراجع أدناه للحصول على مزيد من التفاصيل حول حدود معينة.

إجابة أطول - أولاً ، المعايير ...

يقول RFC 2616 (Hypertext Transfer Protocol HTTP / 1.1) القسم 3.2.1

بروتوكول HTTP لا يضع أي حد مسبق على طول URI. يجب أن تكون الخوادم قادرة على التعامل مع URI من أي مورد تخدمه ، ويجب أن تكون قادرة على التعامل مع URIs ذات طول غير محدود إذا كانت توفر نماذج GET التي يمكن أن تنشئ مثل هذه URIs. يجب أن يقوم الخادم بإرجاع 414 (طلب- URI طويل جدًا) إذا كان URI أطول من الخادم الذي يمكنه التعامل معه (راجع القسم 10.4.15).

هذا RFC تم RFC7230 قبل RFC7230 وهو تحديث لمواصفات HTTP / 1.1. يحتوي على لغة مشابهة ، ولكنه يستمر أيضًا في اقتراح هذا:

توجد قيود خاصة مختلفة على طول خط الطلب في الممارسة العملية. من المستحسن أن يدعم كل مرسلي HTTP ومستلميها ، كحد أدنى ، أطوال طول الطلب البالغة 8000 ثمانية.

... والواقع

هذا ما تقول المعايير . للاطلاع على الواقع ، يمكنك الاطلاع على هذا البحث على boutell.com لمعرفة ما ستدعمه تطبيقات المتصفح والملقم الفردي. الأمر يستحق القراءة ، لكن الملخص التنفيذي هو:

غالبًا ما تكون عناوين URL الطويلة للغاية خطأً. لن تعمل عناوين URL التي يزيد عددها عن 2000 حرف في أشهر متصفحات الويب. لا تستخدمها إذا كنت تنوي أن يعمل موقعك لغالبية مستخدمي الإنترنت.

(ملاحظة: هذه عبارة عن اقتباس من مقال كتب في عام 2006 ، ولكن في عام 2015 ، يعني الاستخدام المتناقص لـ IE أن عناوين URL الأطول تعمل للأغلبية. ومع ذلك ، لا يزال هناك قيد على IE ...)

قيود Internet Explorer ...

طول عنوان URL الخاص بـ IE8 هو 2083 حرفًا ، ويبدو أن IE9 لديه حد مشابه .

لقد اختبرت IE10 ولن يقبل شريط العنوان سوى 2083 حرفًا. يمكنك النقر فوق عنوان URL أطول من هذا ، ولكن سيظل شريط العنوان يعرض فقط 2083 حرفًا من هذا الرابط.

هناك كتابة لطيفة على مدونة IE Internals التي تدخل في بعض الخلفية لهذا.

هناك تقارير مختلطة تدعم IE11 روابط URL أطول - انظر التعليقات أدناه. بالنظر إلى بعض الأشخاص الذين يبلغون عن قضايا ، لا تزال النصيحة العامة قائمة.

محركات البحث مثل عناوين URL <2048 حرفًا ...

اعلم أن بروتوكول ملفات sitemap ، الذي يسمح لموقع ما بإبلاغ محركات البحث عن الصفحات المتاحة ، لديه حد 2048 حرفًا في عنوان URL. إذا كنت تنوي استخدام ملفات sitemap ، فقد تم تحديد حد لك! (انظر إجابة كالين أندريه بوروليو أدناه)

هناك أيضًا بعض الأبحاث من عام 2010 إلى الحد الأقصى لطول عنوان URL الذي ستزحفه محركات البحث وتجري فهرستها . لقد وجدوا أن الحد الأقصى هو 2047 حرفًا ، والتي تبدو متحالفة مع مواصفات بروتوكول sitemap. ومع ذلك ، وجدوا أيضًا أن أداة Google SERP لن تتعامل مع عناوين URL أطول من 1855 حرفًا.

إضافية المتصفح المستعرض

اختبرت ما يلي ضد خادم أباتشي 2.4 تكوينها مع LimitRequestLine كبير جدا LimitRequestLine و LimitRequestFieldSize .

Browser     Address bar   document.location
                          or anchor tag
------------------------------------------
Chrome          32779           >64k
Android          8192           >64k
Firefox          >64k           >64k
Safari           >64k           >64k
IE11             2047           5120
Edge 16          2047          10240

انظر أيضا هذه الإجابة من Matas Vaitkevicius أدناه.

هل هذه المعلومات محدثة؟

هذا سؤال شائع ، وبما أن البحث الأصلي هو 12 عامًا ، سأحاول الحفاظ على تحديثه: اعتبارًا من سبتمبر 2018 ، لا تزال النصيحة قائمة. على الرغم من أن IE11 قد تقبل على الأرجح عناوين URL أطول ، فإن وجود تثبيتات IE القديمة بالإضافة إلى قيود محرك البحث يعني أن البقاء تحت 2000 حرف هو أفضل سياسة عامة.


تقول مواصفات HTTP 1.1 :

يمكن تمثيل URIs في HTTP بشكل مطلق أو نسبة إلى بعض
قاعدة URI الأساسية المعروفة [11] ، وفقًا لسياق استخدامها. الاثنان
يتم التمييز بين الأشكال من خلال حقيقة أن URIs المطلقة تبدأ دائما
مع اسم مخطط متبوعًا بنقطتين. للحصول على معلومات نهائية عن
بناء جملة URL و semantics ، راجع "Uniform Resource Identifiers (URI): Generic Syntax و Semantics ،" RFC 2396 [42] (الذي يحل محل RFCs 1738 [4] و RFC 1808 [11]). تعتمد هذه المواصفة تعريفات "مرجع URI" و "absoluteURI" و "relativeURI" و "port" ،
"المضيف" و "abs_path" و "rel_path" و "السلطة" من ذلك
تخصيص.

بروتوكول HTTP لا يضع أي حد مسبق على طول
معرف الموارد المنتظم. يجب أن تكون الخوادم قادرة على التعامل مع URI من أي مورد تخدمه ، ويجب أن تكون قادرة على التعامل مع URIs ذات طول غير محدود إذا كانت توفر نماذج GET التي يمكن أن تولد مثل URIs. * يجب أن يقوم الخادم بإرجاع 414 (Request-URI Too Long) إذا كان URI أطول من الخادم الذي يمكنه التعامل معه (انظر القسم 10.4.15).

ملاحظة: يجب أن تكون ملقمات حذرة حول الاعتماد على URI أطوال فوق 255 بايت ، لأن بعض تطبيقات العميل أو الوكيل الأقدم قد لا تدعم هذه الأطوال بشكل صحيح.

كما ذكرنا من قبلBrian ، قد يكون لعملاء HTTP (مثل المتصفحات) حدود خاصة بهم ، وستكون خوادم HTTP لها حدود مختلفة.


حد ASP.NET 2 و SQL Server 2005 2005 بحدود 2028. لقد اكتشفت ذلك بالطريقة الصعبة ، حيث لم ينقل مطور URL الديناميكي الخاص بي بعض المعلمات إلى تقرير يتجاوز تلك النقطة. كان هذا ضمن Internet Explorer 8.


على نظام التشغيل iOS ، لا يوجد حد لأنظمة عناوين URL. حتى عنوان URL طويل 300+ ميغابايت مقبول. يمكنك تجربة عنوان URL طويل مثل هذا:

NSString *path = [@"a:" stringByPaddingToLength:314572800 withString:@"a" startingAtIndex:0];
NSString *js = [NSString stringWithFormat:@"window.location.href = \"%@\";", path];
[self.webView stringByEvaluatingJavaScriptFromString:js];

واكتشف ما إذا نجحت مع:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSLog(@"length: %@", @(request.URL.absoluteString.length));
    return YES;
}

لا يوجد في الحقيقة أي طول عنوان URL عالمي. يتم تحديد الطول الأقصى فقط حسب ما يختاره مستعرض العميل للدعم ، والذي يختلف بشكل كبير. الحد 2،083 موجود فقط في Internet Explorer (كافة الإصدارات حتى 7.0). يبدو الحد الأقصى للطول في Firefox و Safari غير محدود ، على الرغم من حدوث عدم الاستقرار مع عناوين URL التي تصل إلى حوالي 65000 حرف. يبدو أن الأوبرا ليس لها الحد الأقصى لطول عنوان URL على الإطلاق ، ولا تعاني من عدم الاستقرار بأطوال طويلة جدًا.


لا يُعرّف RFC الخاص بـ URI (الذي توجد به عناوين URL كمجموعة فرعية) الحد الأقصى للطول ، ومع ذلك ، فإنه يوصي بأن لا يتجاوز جزء اسم المضيف في URI (إن وجد) 255 حرفًا:

يجب على منتجي الـ URI استخدام الأسماء التي تتوافق مع بنية DNS ، حتى عندما لا يكون استخدام DNS ظاهرًا على الفور ، ويجب أن يحدّ هذه الأسماء إلى ما لا يزيد عن 255 حرفًا.

وكما هو مذكور في مشاركات أخرى ، فإن بعض المتصفحات لها قيود عملية على طول عنوان URL.


لقد كتبت هذا الاختبار الذي يستمر في إضافة 'a' إلى المعلمة حتى يفشل المتصفح

جزء C #:

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult ParamTest(string x)
{
    ViewBag.TestLength = 0;
    if (!string.IsNullOrEmpty(x))
    {
        System.IO.File.WriteAllLines("c:/result.txt",
                       new[] {Request.UserAgent, x.Length.ToString()});
        ViewBag.TestLength = x.Length + 1;
    }

    return View();
}

رأي:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<script type="text/javascript">
    $(function() {
        var text = "a";
        for (var i = 0; i < parseInt(@ViewBag.TestLength)-1; i++) {
            text += "a";
        }

        document.location.href = "http://localhost:50766/Home/ParamTest?x=" + text;
    });
</script>

الجزء الأول

على Chrome ، حصلت على:

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36
2046

ثم انفجر مع:

خطأ HTTP 404.15 - غير موجود تم تكوين وحدة تصفية الطلب لرفض طلب حيث تكون سلسلة الاستعلام طويلة للغاية.

نفسه على إنترنت إكسبلورر 8 وفايرفوكس

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
2046

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0
2046

الجزء 2

ذهبت لوضع سهل وإضافة حدود إضافية ل IISExpress applicationhost.config و web.config الإعداد maxQueryStringLength="32768" .

Chrome failed with message 'Bad Request - Request Too Long

HTTP Error 400. The size of the request headers is too long.

بعد 7744 حرفا.

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36
7744

الجزء 3

Added

<headerLimits>
    <add header="Content-type" sizeLimit="32768" />
</headerLimits>

التي لم تساعد على الإطلاق. وقررت في النهاية استخدام عازف الكمان لإزالة المرجع من الرأس.

static function OnBeforeRequest(oSession: Session) {
    if (oSession.url.Contains("localhost:50766")) {
        oSession.RequestHeaders.Remove("Referer");
    }

التي فعلت بشكل جيد.

Chrome: تم الحصول على 15613 حرفًا. (أعتقد أنه حد 16K لـ IIS)

وفشلت مرة أخرى مع:

<BODY><h2>Bad Request - Request Too Long</h2>
<hr><p>HTTP Error 400. The size of the request headers is too long.</p>


Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36
15613

ثعلب النار:

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0
15708

فشل Internet Explorer 8 مع تعطل iexplore.exe.

بعد 2505

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
2505

محاكي الأندرويد

Mozilla/5.0 (Linux; Android 5.1; Android SDK built for x86 Build/LKY45) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36
7377

Internet Explorer 11

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)
4043

Internet Explorer 10

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)
4043

Internet Explorer 9

Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
4043

لماذا يقوم Internet Explorer بتحديد 2K فقط بينما يكون لـ IIS حد 16K؟ لا أعتقد أنه من المنطقي.

لذلك أريد أن أبدأ تجربة حول حدود حجم عنوان URL لطلب Ajax.

لقد قمت بتعيين maxHTttpHeaderSize = "1048576" الخاص بـ Tomcat HTTP. وأعدت عنوان URL طويل للغاية.

ثم أرسل طلبًا يتضمن عنوان URL الطويل مثل:

var url="/ajax/url-length.jsp";
jQuery.ajax(url,{data:{q:"0".repeat(1048000-url.length-4)}});

تقارير jQuery عمله. تقارير Tomcat عنوان URL المطلوب هو 1048015 بايت. تم اختباره باستخدام Chrome 50 و Internet Explorer 11.

لذلك لا تقوم متصفحات الويب باقتطاع عنوان URL الخاص بأجاكس أو تقييده عن عمد.


يحدد تحديد سطر طلب الحد الأقصى لطول عنوان URL. بشكل افتراضي ، يتم تعيينها على 8190 ، والتي تمنحك مساحة كبيرة. لكن الخوادم الأخرى وبعض الحواجب ، تحد من طولها أكثر.

نظرًا لأن جميع المعلمات يتم تمريرها على سطر عنوان URL ، فسيتم أيضًا عرض العناصر التي كانت في كلمة مرور للحقول المخفية في عنوان URL الخاص بالدورة التدريبية. لا ينبغي استخدام المحمول لأي من التدابير الأمنية الحقيقية وينبغي اعتبار الأمن التجميلي في أحسن الأحوال.


دعم Microsoft يقول "الحد الأقصى لطول عنوان URL هو 2،083 حرفًا في Internet Explorer".

لدى IE مشكلات في عناوين URL أطول من ذلك. يبدو أن فايرفوكس يعمل بشكل جيد مع> 4k chars.






browser