
上次我们谈到了HTTP协议与抓包工具现在我们继续往下讲。抓包工具中看HTTP的结构打开fiddler抓包工具点击inspectors然后点击两个raw按钮以及左边页面的内容看到了这个页面在fiddler中点击这个按钮两个都可以点我们可以分为这样的结构让我们探索一下每个部分的具体详情吧。1.URL这是描述网络上的唯一资源的位置的。MYSQL是一个“客户端-服务器”结构的程序存储数据的本体是在服务器里的。这里的https是协议名称分隔号后面是要访问的服务器的IP地址或者域名这个域名的后面没写端口号在没写的时候浏览器会自动添加默认的端口号这取决于协议名称。http的端口号是80https的默认端口号是443.当然这默认的端口号访问远端服务器的那个端口而不是浏览器自身的“客户端的端口”。也就是说端口号指向的是目的端口IP指向 的是目的IP。再后面的web是带有层次结构的路径目录根据需要灵活定义任意的层次结构对提供的资源进行分类组织。2.urlencode这个主要的功能就是转义。转义操作不仅仅是标点符号对于中文等其他非英语系的文字也是需要转义的只不过很多浏览器为了用户看起来方便显示的时候显示转义之前的实际上抓包中就能看到是已经转义的数据。如果在抓包工具中没有进行转义就可能会使这里的请求失败。比如“”转义为0x2B汉字“你好”的转义参考ascll码表的十六进制一个字节为单位用两个%包夹住。认识“方法”这里的方法就是表示这次的请求要来干啥。方法如下表所示其中get和post是最常见的请求。这个表上的说明只是从语义上来说他们的作用但是实际上开发的时候不一定会严格按照语义来进行区分。程序员实际实现的时候可以自行灵活掌控这些方法。一般来讲获取HTML、CSS、js等操作都是getget最常用而在登录、上传文件的时候就用post。可是我们在一个页面上发现蓝绿紫色的链接很少该如何让他们变多呢这里需要用到crtlF5——强制刷新的操作浏览器是具有缓存机制的从服务器或通过网络加载网页速度由快到慢是CPU、内存、硬盘、网络通常情况下从网络加载数据比从硬盘加载要慢浏览器为了加快访问页面的速度就会把页面依赖的一些静态资源CSS、js、图片等缓存到硬盘上。第一次访问服务器需要加载这么多东西后续再访问就不必重新加载。强制刷新忽略了本地缓存所有资源都重新从服务器获取因而速度大大提升了。上图是强制刷新后的效果。get请求一般是没有body的如果需要通过get给服务器发送一些数据通过query String传递过去的而对于post来说适用于两个典型的场景1.登录2.上传请求带有正文的正文就是保存了当前上传的数据的内容。上述请求中图片本身是二进制的通过特殊方式进行转码base64编码把二进制转化为文本其实body也是可以直接填二进制数据的。get与post之间的区别1.语义上的区别略2.携带数据的方式语义上可以混用是事实不过post是可以带有query stringget理论上可以带body但很少见。面试中如果被问到首先抛出结论post与get没有本质区别可以混用从使用方法习惯上来说主要是上面两方面的区别。3.get请求通常建议但不强制设计成幂等的post没有这个要求幂等即请求是一定的响应也是一定的如支付转义的场景就需要考虑幂等性。4.由于get设计成幂等了就可以允许get请求的结果被缓存post由于不要求幂等经常是不幂等的就认为不能被缓存的实际上现在get不幂等的情况也是十分常见的。这四个操作的任何一个都可以进行增删改查的。