Is it correct to assume that everything that is not unreserved, can/should be percent-encoded?

RFC 3986说:

“Under normal circumstances, the only time when octets within a URI are percent-encoded is during the process of producing the URI from its component parts. This is when an implementation determines which of the reserved characters are to be used as subcomponent delimiters and which can be safely used as data. “

这意味着您决定根据上下文需要编码哪个分隔符(即< delimiter>)字符.不需要编码的那些不应该被编码.

例如,如果出现在路径组件中,则不应该对/ a进行百分号编码,但是当它出现在查询或片段中时,您应该对它进行百分比编码.

所以,其实一个;字符(它是< reserved>的成员)不应该被自动百分比编码,实际上,java URL和URI类不会这样做;请参阅URI(…) javadoc,具体是第7步),了解< path>组件被处理.

这一点得到加强:

“The purpose of reserved characters is to provide a set of delimiting characters that are distinguishable from other data within a URI. URIs that differ in the replacement of a reserved character with its corresponding percent-encoded octet are not equivalent. Percent- encoding a reserved character, or decoding a percent-encoded octet that corresponds to a reserved character, will change how the URI is interpreted by most applications. Thus, characters in the reserved set are protected from normalization and are therefore safe to be used by scheme-specific and producer-specific algorithms for delimiting data subcomponents within a URI.”

所以这说明一个包含百分比编码的URL;与包含raw的URL不同.最后一句话意味着它们不应该被自动编码或解码百分之百.

这让我们有这个问题 – 你为什么要被编码百分比

Let’s say you have a CMS where people can create arbitrary pages having arbitrary paths. Later on, I need to generate href links to all pages in, for example, site map component. Therefore I need an algorithm to know which characters to escape. Semicolon has to be treated literally in this case and should be escaped.

对不起,但不符合分号应该被转义.

就URL / URI规范而言,没有什么特别的意义.它可能对特定的Web服务器/网站有特殊的含义,但一般来说(即没有网站的具体知识),您无法知道这一点.

>如果在一个特定的URI中有特殊的含义,那么如果你的百分之百逃脱它,那么你会破坏这个含义.例如,如果网站使用;以允许将会话令牌附加到路径,然后百分比编码将阻止它识别会话令牌…

>如果只是一些客户端提供的数据字符,那么如果你对它进行了编码,你可能会改变URI的含义.这是否重要取决于服务器的功能?即是否解码,作为应用逻辑的一部分.

这意味着知道“正确的事情”需要深入了解URI对最终用户和/或站点的意义.这将需要高级思维阅读技术来实施.我的建议是通过在将URI路径传递给您的软件之前适当地转义URI路径的任何分隔符来获取CMS来解决它.该算法必然是针对CMS和内容传送平台的.它/他们将响应由URL识别的文档的请求,并且需要知道如何解释它们.

(支持任意使用任意路径的人有点疯狂,必须有一些限制,例如Windows甚至不允许在文件名组件中使用文件分隔符,所以你必须在某处有一些边界.只是一个决定他们应该在哪里的问题.)

rfc3986 java_java – RFC3986 – 哪些pchars需要百分比编码?相关推荐

  1. 获取文件编码格式 java_java实现获取文本文件的字符编码

    一.认识字符编码: 1.Java中String的默认编码为UTF-8,可以使用以下语句获取:Charset.defaultCharset(); 2.Windows操作系统下,文本文件的默认编码为ANS ...

  2. 何时将空间编码为加号(+)或%20?

    有时,空格会将URL编码为+符号,有时会将其编码为%20 . 有什么区别,为什么会发生这种情况? #1楼 +表示仅在application/x-www-form-urlencoded内容中的空格,例如 ...

  3. iOS端URL编码和解码过程

    一.URL含义 1.URL定义 URL 是Uniform Resource Locator 的缩写,统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址 ...

  4. 用JavaScript编码URL?

    如何使用JavaScript安全地编码URL,以便可以将其放入GET字符串中? var myUrl = "http://example.com/index.html?param=1& ...

  5. OpenAPI规范3.1.0

    OpenAPI规范 版本 3.1.0 介绍 OpenAPI规范(OAS)为HTTP API定义了一个与语言无关的标准接口,使得人和计算机都可以在不使用源代码.文档或监听网络通信的情况下,具备发现和理解 ...

  6. python原始数据是什么_以python请求发送原始数据

    发送原始邮件数据没有问题:raw_data = '__VIEWSTATE=%2FwEPDwUJODgwODc4MzI2D2QWBAIEDxYCHgdWaXNpYmxlaGQCBg8WAh8AZxYCZ ...

  7. pythonurllib模块-python模块之urllib

    python文档官网地址:https://docs.python.org/3.6/library/urllib.html?highlight=urllib urllib 是一个收集以下模块以处理URL ...

  8. 爬虫学习笔记(九)—— Scrapy框架(四):FormRequest、日志

    一.Request Scrapy.http.Request类是scrapy框架中request的基类.它的参数如下: url(字符串) - 此请求的URL callback(callable)- 回调 ...

  9. 常用公有云接入——腾讯

    一.ES术语表 本文档涉及的一些常用术语如下: 术语 全称 中文 说明 Instance Instance 实例 指代一台云服务器. Region Region 地域 表示资源所在的地域,每个地域包含 ...

最新文章

  1. 【Android动画】之Tween动画 (渐变、缩放、位移、旋转)
  2. workerman源码分析之启动过程
  3. ML:分类预测问题中评价指标(ER/混淆矩阵P-R-F1/ROC-AUC/RP/mAP)简介、使用方法、代码实现、案例应用之详细攻略
  4. centos 下载文件很慢_【已解决】Mac中从远程CentOS服务器中加速下载大文件
  5. linux网络编程之inet_pton和inet_ntop函数
  6. Java进阶之路——从初级程序员到架构师,从小工到专家必会的技能
  7. RTP/RTCP中的Jitter
  8. 听同事讲 Bayesian statistics: Part 1 - Bayesian vs. Frequentist
  9. python pyhook_python使用pyHook.HookManager()返回来的event中,event.Time肿么转换成为datetime形式?...
  10. 【Git】Failed to connect to github.com port 443 after 21092 ms: Connection refused
  11. 云队友丨专访极飞科技彭斌:人的梦想是摁不住的!
  12. python数据可视化代码示例
  13. Lagrange乘子法与KTT条件
  14. python基础----文件处理
  15. 【ABAP系列】SAP ABAP smartforms设备类型CNSAPWIN不支持页格式ZXXX
  16. CrowdHuman密集行人数据集转换代码(可任意选择某些类别的框)
  17. 回归评价指标:均方误差根(RMSE)和R平方(R2)
  18. 奇安信渗透测试工程师试题(2020)
  19. hsv空间阈值检测matlab,基于HSV色彩空间变换的阴影检测算法——MATLAB实现
  20. 《鸟哥的Linux学习:基础篇》第零章 计算机概论 读书笔记

热门文章

  1. JAVA-stateless4j StateMachine从入门到实战
  2. GPSR: Greedy Perimeter Stateless Routing for Wireless Networks-泛读概要
  3. 2017-2018--人生有无限可能
  4. 长沙理工大学校友小程序设计案例
  5. 从0到1徒手撸一个简单的glup插件
  6. eclipse 远程调试java_Eclipse远程调试Java代码的三种方法
  7. 常用js方法集合,动态加载js方法--判断变量是否为空--截取小数点后几位--截取带中文的字条串...
  8. cv竞赛和kaggle_关于抽象和推理挑战kaggle竞赛的评论
  9. kafka-groupid
  10. python 安装 cv2 - 已解决