【HTTP】GET传参最大长度的理解误区

【HTTP】GET传参最大长度的理解误区

零、总结 文章数据来源于网络,可能存在变动,但是原理是一样的。 HTTP 协议 未规定 GET 和POST的长度限制 GET的最大长度显示是因为 浏览器和 web服务器限制了 URI的长度 不同的浏览器和WEB服务器,限制的最大长度不一样 要支持IE,则最大长度为2083byte,若只支持Chrome,则最大长度 8182byte 一、误解 大家都知道http 中 存在 GET 和 POST 这两种最常用的请求方式。(PUT,DELETE不在本文讨论范围之内) 误解:HTTP 协议下的 Get 请求参数长度是有大小限制的,最大不能超过XX,而 Post 是无限制的。 1、首先即使有长度限制,也是限制的是整个 URI 长度,而不仅仅是你的参数值数据长度。 2、HTTP 协议从未规定 GET/POST 的请求长度限制是多少。 **以下内容摘自 《关于 HTTP GET/POST 请求参数长度最大值的一个理解误区》, 文章时间为 2013年的。可能以当前最新的浏览器有出入 ** The HTTP protocol does not place any a priori limit on the length of a URI. Servers MUST be able to handle the URI of any resource they serve, and SHOULD be able to handle URIs of unbounded length if they provide GET-based forms that could generate such URIs. A server SHOULD return 414 (Request-URI Too Long) status if a URI is longer than the server can handle (see section 10.4.15). Note: Servers ought to be cautious about depending on URI lengths above 255 bytes, because some older client or proxy implementations might not properly support these lengths. 3、所谓的请求长度限制是由浏览器和 web 服务器决定和设置的,各种浏览器和 web 服务器的设定 均不一样,这依赖于各个浏览器厂家的规定或者可以根据 web 服务器的处理能力来设定。 The limit is in MSIE and Safari about 2KB, in Opera about 4KB and in Firefox about 8KB, (255 bytes if we count very old browsers) . We may thus assume that 8KB is the maximum possible length and that 2KB is a more affordable length to rely on at the server side and that 255 bytes is the safest length to assume that the entire URL will come in. If the limit is exceeded in either the browser or the server, most will just truncate the characters outside the limit without any warning. Some servers however may send a HTTP 414 error. If you nee

Java定时任务框架对比

Java定时任务框架对比

汇总情况 Quzrzt LTS Elastic-Job xxl-Job saturn opencorn antares 1. 什么是集群,分布式定时任务 把分散的,可靠性差的计划任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。叫做分布式定时任务。 2. 常见开源方案 elastic-job , xxl-job ,quartz , saturn, opencron , antares, lts 2.1 elastic-job elastic-job 是由当当网基于quartz 二次开发之后的分布式调度解决方案 , 由两个相对独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成 。 Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务。 Elastic-Job-Cloud使用Mesos + Docker(TBD)的解决方案,额外提供资源治理、应用分发以及进程隔离等服务 亮点: 基于quartz 定时任务框架为基础的,因此具备quartz的大部分功能 使用zookeeper做协调,调度中心,更加轻量级 支持任务的分片 支持弹性扩容 , 可以水平扩展 , 当任务再次运行时,会检查当前的服务器数量,重新分片,分片结束之后才会继续执行任务 失效转移,容错处理,当一台调度服务器宕机或者跟zookeeper断开连接之后,会立即停止作业,然后再去寻找其他空闲的调度服务器,来运行剩余的任务 提供运维界面,可以管理作业和注册中心。 官方亮点说明: 分布式 重写Quartz基于数据库的分布式功能,改用Zookeeper实现注册中心。 并行调度 采用任务分片方式实现。将一个任务拆分为n个独立的任务项,由分布式的服务器并行执行各自分配到的分片项。 弹性扩容缩容 将任务拆分为n个任务项后,各个服务器分别执行各自分配到的任务项。一旦有新的服务器加入集群,或现有服务器下线,elastic-job将在保留本次任务执行不变的情况下,下次任务开始前触发任 务重分片。 集中管理 采用基于Zookeeper的注册中心,集中管理和协调分布式作业的状态,分配和监听。外部系统可直接根据Zookeeper的数据管理和- 监控elastic-job。 定制化流程型任务 作业可分为简单和数据流处理两种模式,数据流又分为高吞吐处理模式和顺序性处理模式,其中高吞吐处理模式可以开启足够多的线程快速的处理数据,而顺序性处理模式将每个分片项分配到一个 独立线程,用于保证同一分片的顺序性。 失效转移 弹性扩容缩容在下次作业运行前重分片,但本次作业执行的过程中,下线的服务器所分配的作业将不会重新被分配。失效转移功能可以在本次作业运行中用空闲服务器抓取孤儿作业分片执行。同样 失效转移功能也会

Locale深度解析

Locale深度解析

摘要 Locale是日常开发中比较容易忽视的技术点。特别是开发一些只做国内市场,只有中文的项目时,Locale可能就直接被忽视了。而且在项目提出多语言支持的时候,因为没有很好的理解,可能给自己埋了很多坑。 什么是Locale 其实java.util.Locale的Java Doc有很详细的解释,我就不过多解释。 A Locale object represents a specific geographical, political, or cultural region. An operation that requires a Locale to perform its task is called locale-sensitive and uses the Locale to tailor information for the user. 主要记住Locale实例包括以下信息就可以了。在多年的开发经验中,script和variant基本没有用到。就不过多介绍。 language script country (region) variant lanugage ISO 639 alpha-2 or alpha-3 language code 在实际使用中,基本我们碰不到3位字母表示的语言。 country ISO 3166 alpha-2 country code or UN M.49 numeric-3 area code. 同样实际使用中,基本使用2位字母表示的国家 scirpt 和 variant IANA Language Subtag Registry 定义了完整列表。 感觉script是地区的别称,variant是方言。了解一下就好。 在实际使用中,大部分同学第一反应可能是会写出以下Locale。 zh_CN en_US ja_JP 如果你也是只想到这些,请打开你的浏览器->开发者工具->控制台中输入以下js window.navigator.language 浏览器为中文,你又在国内。输出结果就是zh-CN 然后如果重新你设置浏览器语言,比如设置成英文。再执行一下,输出结果是en-CN What?? en-CN?? 这是什么鬼? 首先通过这个Locale,我们可以知道country,是和你实际在哪个地区有关。 那该怎么处理? 后面详细说怎么应用。 应用场景 Locale的使用场景基本就是根据不同国家和语言,进行不同的显示。实际经验以下2点为主。 多语言 (下文会详细说明) 金额显示。 日期格式显示。 以金额显示为例,如果没有类似开发经验的话,你可以为会想,金额还有不同的格式。一般不都是 1,000,000.00。那你就错了。举两个例子。 日语。日本人金额是不带小数点的。 法语。法语中千位分隔符为空格,小数点为逗号。比如 1 000 000,00 正确理解Locale,并正确使用可以写出既规范,又简练,质量又高的代码。而不是见招拆招,每个语言写一个自己的实现。 创建Locale 实例的正确姿势 使用正确的姿势创建非常重要,这在后面Spring里应用部分非常重要。 以下这段代码是我见过最多的创建方式。 Locale locale = n

Dockerfile 中命令的两种书写方式的区别

Dockerfile 中命令的两种书写方式的区别

最早的初衷是要研究一下运行 Docker 容器时如何向其传递参数,却冷不防掉入了另一个深渊,不得不关心起 Dockerfile 中命令(包括 RUN, CMD 和 ENTRYPOINT) 的两种不同写法上的区别。 所以呢,先要稍稍了解一下 Dockerfile 中 RUN, CMD, ENTRYPOINT 这三个指令 RUN 执行命令并创建新的镜像层,常用于安装软件包。可以多个,为避免创建过多的镜像层,我们尽量把命令合在一起,用分号或 &&。它与容器运行期无关。 CMD 设置容器启动后默认执行的命令及其参数,但 CMD 能够在启动容器时被覆盖。多个 CMD 只有最后一个是有效的 ENTRYPOINT 配置容器启动时运行的命令。多个 ENTRYPOINT 也是只有最后一个有效 关于以上三个命令的区别,这儿有篇文章讲得很清楚 RUN vs CMD vs ENTRYPOINT - 每天5分钟玩转 Docker 容器技术(17),此处也照搬了些文字。 RUN, CMD 和 ENTRYPOINT 都支持两种写法,即 exec 和 shell 格式,见 Dockerfile reference #ENTRYPOINT 对这两种方式的解释。RUN 只影响如何构建镜像,所以镜像中不保留 RUN 命令。CMD 和 ENTRYPOINT 都可以在运行容器时执行命令,这里不讲述它们间的区别,而要说的是它们所支持的 exec 和 shell 两种格式的写法。此篇以 ENTRYPOINT 为例说明两种格式的区别,CMD 类似。 exec 格式 ENTRYPOINT ["executable", "param1", "param2"] 必须清楚了解命令 "executable" 的每一个参数,一个萝卜一个坑,不能随便乱拆与合并。例如执行 jar 文件的命令 java -Xmx256M -jar /app.jar 写成 exec 格式就是 ENTRYPOINT ["java", "-Xmx256M", "-jar", "/app.jar"] 而不能写成 ENTRYPOINT ["java", "-Xmx256M", "-jar /app.jar"] 否则 docker run 运行它时出错 Unrecognized option: -jar /app.jar Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit. "-jar" 和 "/app.jar" 分别是两个参数。 exec 格式是一种数组形式,该格式的 ENTRYPOINT 能接收 CMD 或 dock run <image> 后的参数作为附加参数,相当于是往这个数组中附加元素。例如 Dockerfile 中写成 ENTRYPOINT ["echo", "Hello"] 假设置构建出的镜像名(repository) 是 test(以下都以 test 作为镜像名称), 那么执行下面 docker 命令 $ docker run test World and China 输出是 Hello World and China 使用 exec 格式的 ENTRYPOINT 与 CMD 同在时还能接收 CMD 送过来的参数,如 Dockerfile ENTRYPOINT ["echo

安装homebrew报错curl: (7) Failed to connect to raw.githubusercontent.com port 443: Operation

安装homebrew报错curl: (7) Failed to connect to raw.githubusercontent.com port 443: Operation

react native搭建环境,安装homebrew的时候,在终端输入 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 提示: curl: (7) Failed to connect to raw.githubusercontent.com port 443: Operation 解决方法: 这个是stackoverflow的解决方法,英文的,我翻译了一下 我的翻译: 先在浏览器输入这个地址: https://raw.githubusercontent.com/Homebrew/install/master/install 看是否能打开,不能打开就是你网络有问题,不要问我哦。 能打开如下: 把这个网页保存名为brew_install.rb的文件,保存的位置你随便,只要自己能找到。 则在终端输入curl $ curl curl: try 'curl --help' or 'curl --manual' for more information 这样就没错,要是报错,那我就不知道了! 然后在终端进入存放这个文件的目录(这个不用我教吧),然后终端输入 ruby brew_install.rb 然后等安装homebrew吧! 作者:kangxx 链接:https://www.jianshu.com/p/68efabd2e32b 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

联系我们

联系电话

4000-640-466

联系邮箱

service@f-li.cn

办公地址

上海黄浦区外滩源1号

谢谢,您的信息已成功发送。
请填写信息。