为什么url需要对空格进行编码

最近在学习sql注入,正好碰到关于url,GET等问题,比如在sql注入中,#注释这个办法只适用于POST传送的参数,在GET中不适用,因为GET属于URL的一部分,而URL中特定字符是有特殊用途的,正如一位知乎上的朋友讲的,在URL中#是定义锚点的,是专门用来给浏览器看的。


随后又了解到URL原来是需要对特定字符以后的内容进行截取,留在客户端,比如#;此外还会对空格,汉字等非assic字符进行编码,我抓了一个包发现送往服务端的数据确实全是assic字符(随机拿几个字符和数据包的raw data做一一对应,是assic的编码),于是我上网搜了一下为什么URL的内容需要做编码?找了一下发现大多都是说URL怎么编码以及答非所问的情况。

于是我自己思考了一下,认为一个原始的http协议的包(就是一段缓冲区char* buffer)先要做报头,host,accept,cookie等的划分,而划分的依据就是空格(0x20),因此在每一部分的内容中不允许出现空格,以免影响服务器的划分工作。


至于汉字等字符为什么也要转码成一种既不是utf-8,unicode,又不是gbk的编码,我想是因为这几种编码谁都不能保证一个汉字的raw data里面不包含 0x20这个东西,一旦包含了,就会对服务器造成影响。所以汉字也要编码,并且我感觉编码方式比较像 base64这种编码方式。


说起base64编码,我想起自己大一的时候写一个通信软件,在处理传送的数据上总是由于 换行符,回车符等特殊字符造成各种字符串截断的bug,后来我想了一个办法就是 数据里面的换行符不是 0x10吗?那我就把它转化成“10”这么个东西,虽然占用的空间变成了两个字节,但是至少稳定性极佳,加上没有性能等要求,当时想不失为一个偷懒的想法。


再后来知道了有base64这种编码,于是对其印象很深刻。


以上属于自己的个人臆测,如有错误,欢迎指正,欢迎转发,注明原链接。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值