从url输入到返回请求的过程

网络篇:

        一、构建请求 (对URL进行解析)

        为什么要解析?

        浏览器会解析 URL 得到里面的参数,将域名和需要请求的资源分离开来,从而了解需要请求的是哪个服务器,请求的是服务器上什么资源等等。

        怎么解析?

        在浏览器地址栏中输入信息,然后回车,浏览器会对URL进行判断,判断URL是否合法?主要是看这个链接有没有缺少 “ // ”,http或者http后面又没跟 冒号等。

        合法就会继续检查他的完整性,如果不完整,浏览器可能会对域进行猜测,对输入的内容添加协议、域名、端口号、路径、哈希等补全 URL。 如果不合法浏览器将输入的内容作为搜索条件,使用用户设置的默认搜索引擎进行查询并返回结果。

        因为网络标准规定了URL只能是字母和数字,还有一些其它特殊符号,比如-_.!等,不包括百分号和双引号,这意味着如果URL存在汉字,就必须编码后使用,有些情况URL不转义会出现歧义。

        为什么不转译会出现歧义?

        Http协议中参数的传输是"key=value"这种简直对形式的,如果要传多个参数就需要用“&”符号对键值对进行分割。如"?name1=value1&name2=value2",这样在服务端在收到这种字符串的时候,会用“&”分割出每一个参数,然后再用“=”来分割出参数值。

        比如“name1=value1&name2=value2”,会用ASCII码进行编码编码,得到一串字母和数字组成的串

6E616D6531 3D 76616C756531 26 6E616D6532 3D 76616C756532。 
   6E616D6531:name1 
   3D:= 

        服务端在接收到该数据后就可以遍历该字节流,首先一个字节一个字节的吃,当吃到3D这字节后,服务端就知道前面吃得字节表示一个key,再想后吃,如果遇到26,说明从刚才吃的3D到26子节之间的是上一个key的value,以此类推就可以解析出客户端传过来的参数。

        但是如果出现了一种情况,比如“name1=va&lu=e1” 参数值中出现&和=符号就会带来歧义,所以需要编码。

        URL编码只是简单的在特殊字符的各个字节前加上%,例如,我们对上述会产生奇异的字符进行URL编码后结果:“name1=va%26lu%3D”,这样服务端会把紧跟在“%”后的字节当成普通的字节,就是不会把它当成各个参数或键值对的分隔符。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值