日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

JavaWeb - GET 请求中 URL 的最大长度限制(附:解决方案)

發布時間:2023/12/14 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaWeb - GET 请求中 URL 的最大长度限制(附:解决方案) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天在寫一個 PHP 相應 JSOUP 請求的功能時,發現當 URL 中包含的請求參數過長時會返回 414 錯誤。

瀏覽器


1、IE

IE瀏覽器(Microsoft Internet Explorer) 對URL長度限制是2083(2K+53),超過這個限制,則自動截斷(若是form提交則提交按鈕不起作用)。中文字符的話只有2083/9=231個字符。

2、Firefox

firefox(火狐瀏覽器)的url長度限制為 65 536字符,但實際上有效的URL最大長度不少于100,000個字符。

3、Chrome

chrome(谷歌)的url長度限制超過8182個字符返回本文開頭時列出的錯誤。支持的最大中文字符只有8182/9=909個。

4、Safari

Safari的url長度限制至少為 80 000 字符。

5、Opera

Opera 瀏覽器的url長度限制為190 000 字符。Opera 9 地址欄中輸入190 000字符時依然能正常編輯。

服務器


1、Apache

Apache能接受url長度限制為8192字符。

2、IIS

Microsoft Internet Information Server(IIS)能接受url長度限制為16384個字符。
這個是可以通過修改的(IIS7)

configuration/system.webServer/security/requestFiltering/requestLimits@maxQueryStringsetting.<requestLimits maxQueryString="length"/>

3、Perl HTTP::Daemon

Perl HTTP::Daemon 至少可以接受url長度限制為8000字符。Perl HTTP::Daemon中限制HTTP request headers的總長度不超過16384字節(不包括post,file uploads等)。但當url超過8000字符時會返回413錯誤。

這個限制可以被修改,在Daemon.pm查找16×1024并更改成更大的值。

4、Ngnix

可以通過修改配置來改變url請求串的url長度限制。

client_header_buffer_size?默認值:client_header_buffer_size 1k
large_client_header_buffers默認值 :large_client_header_buffers 4 4k/8k

解決方案


答案:sessionStorage

背景

有個需求是對資訊進行預覽(類似于發博客前預覽下效果這樣),一種很容易想到的簡單辦法是將預覽的內容(如標題和正文)通過get請求傳遞到預覽頁中,js代碼如下:

function previewNews(){var action = "XXXX" ;// 拿到頁面中的標題和正文 var title = $("#title").val();var content = $("#content").val(); var url = action+ "?title=" + encodeURIComponent(title) + "&content=" + encodeURIComponent(content); window.open(url);//打開拼接后的url }

這種方法在標題和正文字數不多的情況下是沒有問題的。but問題是,資訊的正文字數卻經常出乎意料地很長。多長呢?長到預覽頁面load啊load啊就是load不出來。查了查,這是因為瀏覽器或者服務器對url有長度限制(很多人包括我自己誤解為是HTTP get方法對參數的限制,其實不是)。百度來的資料如前面所說的大小限制。

而且,中文是以urlencode后的編碼形式進行傳遞。如果瀏覽器的編碼為UTF8的話,一個漢字最終編碼后的字符長度為9個字符。(這句話也是百度來的,未經證實)這么算算,對于IE瀏覽器來說,標題和正文加起來最多能輸入231個中文,超過了就完蛋。那么通過get方式傳遞參數預覽這樣的解決辦法就變得毫無用處,因為資訊一般來說至少是三五百字的,必須尋找替代方案。

替代方案

想到的兩種替代方案如下:

  • 將預覽內容post到服務端,根據一個唯一標識生成緩存(有效時間5分鐘),將唯一標識返回到前端,前端通過get方式傳遞唯一標識請求預覽邏輯,拿到緩存的內容后渲染到頁面。需要說明的是這里的緩存必須是分布式的。
  • 通過H5的會話緩存sessionStorage將預覽內容存儲在瀏覽器,打開預覽頁后從sessionStorage中拿到內容就可以渲染出頁面了。
  • Ps:第一個解決方案需要用到分布式緩存,而我們的應用目前還沒有引入分布式緩存,為了一個預覽功能引入分布式緩存無論從時間成本來說還是其他成本,都不劃算。怎么算都是使用sessionStorage更加便捷。

    走近 sessionStorage

    sessionStorage,顧名思義,是瀏覽器基于session的一種本地存儲方式。這些數據只有在同一個會話中的頁面才能訪問并且當會話結束后數據也隨之銷毀。因此sessionStorage并不是一種持久化的本地存儲。與之相對應的另一種H5本地存儲技術localStorage卻是一種持久化的本地存儲方式。結合資訊預覽的需求,明顯sessionStorage更適用。雖然之前并沒有用過sessionStorage,但我還是義無反顧地將它應用在了這個需求上。其實它的使用方法還算挺簡單的:

    function previewNews(){var action = "XXX" ;var newsId = $("#id").val();//資訊的唯一標識var title = $("#title").val();var content = $("#content").val(); //通過setItem方法存儲valuesessionStorage.setItem(newsId+"_title",title);sessionStorage.setItem(newsId+"_content",content);var url = action+ "?newsId=" + newsId; window.open(url); }

    預覽頁取內容時這樣寫:

    $(document).ready(function() {var newsId = $("#newsId").val();//通過getItem方法獲取valuevar title = sessionStorage.getItem(newsId + "_title");var content = sessionStorage.getItem(newsId + "_content");$("#news_title").html(title);$("news_content").html(content); });

    簡單的幾行代碼,解決了因為內容過長不能預覽的問題。但是別慌,還有一個潛在的問題需要解決,那就是,sessionStorage對IE的支持不夠好。換句話說,如果用戶使用的是IE瀏覽器,那么還是會打不開預覽頁。怎么辦呢?不用慌,早已經有人幫我們解決好了,網上一搜就有了。簡單說,如果是IE瀏覽器,那么我們引入一個js插件,這個插件用cookie重寫了sessionStorage的幾個方法(setItem、getItem等),代碼一看便知:

    插件名:sessionStorage.js

    /***補充不支持sessionStorage的瀏覽器使用cookie代替* 使用:* sessionStorage.setItem("key","value");* sessionStorage.getItem("key");* */ if (!window.sessionStorage) {window.sessionStorage = {getItem: function(sKey) {if (!sKey || !this.hasOwnProperty(sKey)) {return null;}return unescape(document.cookie.replace(new RegExp("(?:^|.*;\\s*)" + escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*"), "$1"));},key: function(nKeyId) {return unescape(document.cookie.replace(/\s*\=(?:.(?!;))*$/, "").split(/\s*\=(?:[^;](?!;))*[^;]?;\s*/)[nKeyId]);},setItem: function(sKey, sValue) {if (!sKey) {return;}document.cookie = escape(sKey) + "=" + escape(sValue) + "; path=/";this.length = document.cookie.match(/\=/g).length;},length: 0,removeItem: function(sKey) {if (!sKey || !this.hasOwnProperty(sKey)) {return;}document.cookie = escape(sKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";this.length--;},hasOwnProperty: function(sKey) {return (new RegExp("(?:^|;\\s*)" + escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(document.cookie);}};window.sessionStorage.length = (document.cookie.match(/\=/g) || window.sessionStorage).length; }

    Ps:將這個插件引入到用到sessionStorage的地方,就不怕IE不支持啦!

    總結

    以上是生活随笔為你收集整理的JavaWeb - GET 请求中 URL 的最大长度限制(附:解决方案)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 成人av软件| 网红日批视频 | 91精品人妻一区二区三区果冻 | 夜夜骑av| jizz欧美性11 | 日韩在线观看不卡 | 香蕉视频在线观看视频 | 乱岳 | 一区二区免费av | 九九夜 | 亚洲激情综合 | 国产精品久久久久久久免费看 | 国产激情对白 | 欧美日韩黄色网 | 亚洲综合狠狠 | 精品国产乱码久久久久久免费 | 久久免费视频6 | 国产专区一区 | 少妇又紧又爽视频 | 在线黄视频| 亚洲国产精品一区二区三区 | 黄视频免费观看 | 亚洲一区二区日韩 | 男人操女人的网站 | 日日摸日日碰夜夜爽av | 亚洲成人婷婷 | 狠狠入| 欧美一区二区三区免费看 | 欧美人禽杂交狂配 | 97精品一区二区视频在线观看 | 婷婷综合一区 | 亚洲图片一区二区 | 男生吃小头头的视频 | 欧美人体做爰大胆视频 | 夜色视频网站 | 欧美大片免费在线观看 | 男女网站视频 | 人人综合 | 波多野结衣视频免费在线观看 | 亚洲黄色免费在线观看 | 香蕉911| 免费看av毛片 | 欧美三级午夜理伦三级老人 | 国产精品日韩欧美一区二区三区 | 中国女人做爰视频 | 一区二区三区入口 | av在线第一页 | 亚洲激情网址 | 免费毛片一区二区三区久久久 | 亚洲视频网址 | 亚洲国产一区视频 | 四虎黄色片| 国产69精品久久久久久 | a毛片毛片av永久免费 | 日本黄色播放器 | 中文字幕av一区二区三区人妻少妇 | 人人干人人插 | 国产精品成人va在线观看 | 亚州综合 | 69精品在线 | 国产在线精品成人欧美 | 在线精品自拍 | a国产精品 | 日韩一级黄 | 中文字幕在线视频一区二区 | 国产欧美一区二区精品性色超碰 | 五月天婷婷影院 | 成人久久免费视频 | 成人黄色小视频在线观看 | 亚洲黄色片在线观看 | 老熟妇毛片 | 明日叶三叶 | 91蜜臀精品国产自偷在线 | 亚洲伦理一区二区 | 春物催眠 | 一区二区三区美女 | 风流少妇一区二区三区91 | 天堂欧美城网站网址 | 国模小丫大尺度啪啪人体 | 在线成人免费视频 | 天堂av在线电影 | 99久久免费国产精精品 | 色哟哟黄色 | 国产噜噜噜噜久久久久久久久 | 成年丰满熟妇午夜免费视频 | 91手机视频在线观看 | 在线视频97 | 免费一级网站 | 久久99精品久久久久久琪琪 | 激情伦成人综合小说 | 精品一二三四区 | 少妇一级淫片 | 男人天堂a在线 | 国产成人无码一二三区视频 | 日韩精品免费观看 | 亚洲精品一二三区 | 超碰男人天堂 | www.爱操| 日韩网站免费观看 |