提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:这里可以添加本文要记录的大概内容:
上篇文章我们借助抓包工具了解到http协议报文格式:从请求和响应方面入手
了解到了url的基本组成,还有一些方法
今天我们来探讨Http协议的细节
提示:以下是本篇文章正文内容,下面案例可供参考
上文讲到http协议的请求报文分为四部分,今天讲讲请求报头,这里的键值对都是标准规定的,有特定含义的
这里介绍几个常见的报头种类:
表示服务器上的地址和端口(去哪里找到服务器)
例如,Host:www.sogou.com
可见这放的就是ip+端口,省略就是默认值,端口可以省略http默认值是80,https默认值是443
那么既然url里面也有服务器的ip和端口,为什么还要搞个host?
url里的www.sogou.com
事实上,url里面的ip,和端口,和host不完全一样,当请求是通过代理来访问的时候,是可能不一样的(fiddler中无法体现)
表示body中的数据长度
http协议在传输层是基于tcp(http 3.0之前这样的),既然是tcp就要注意粘包问题,之前讲过,
在这里我们有content-length来表示数据长度,例如
我们可能会将俩次get请求读到一起,第二个get和前一个body混为一谈
表示请求中的body数据格式,由于body中的数据格式不同,对接受方来说解析方法截然不同
1.form表单构造的请求,就是这个Content - Type,其实就是 html 的 form标签
2. multipart/form-data: form 表单提交的数据格式
这种格式主要是在上传文件的时候会出现
3.application/json :数据为Json格式,body格式形如:
注意这俩字段,不一定有,但是如果有一个,就会有另一个
比如请求没有body(get)就没有这俩字段
请求有body(post)一定有这俩字段
表示浏览器/操作系统的属性. 形如
分别描述了火狐浏览器,操作系统版本,win nt是系统内核名字,一个浏览器的内核(applewebkit),还有最熟悉的谷歌浏览器,mac电脑上的默认浏览器safari
小结:ua主要包含的信息,就是操作系统信息和浏览器的信息,描述了用户在使用啥样的设备上网
在之前系统不同,浏览器不同,对页面的支持程度也不同
后来随着浏览器的发展,发明了技术,响应式页面,通过特殊的css和js,感知当前浏览器的窗口的尺寸,根据不同的尺寸,重新排列页面布局。
现在很多网站都是这样,写一份页面,就能兼容多个设备了
现在及时ua失去了最初的作用,也可以用来在服务器统计用户的设备情况
可能没有
Refere指的是当前这个页面,从哪个页面跳转过来的(上级页面是啥),在浏览器地址栏里直接输入一个地址就没referer,直接点收藏夹也没有
cpc广告,按照点击计费,如果运营商篡改了referer,如图:
如果运营商利用reference跳转到他的页面上,又因为cpc计费,导致资金损失,这里就需要对协议加密,典型的是https协议
也是请求报头中的一个重要字段,是浏览器在本地存储数据(存到硬盘上)的一种机制
浏览器为了安全期间,禁止网页js访问你电脑的硬盘(文件系统)
因此,浏览器专门提供了特殊的api给网页使用,可以让网页存储一些简单的数据
如何组织:
点击浏览器的钥匙锁,点击cookie,发现这些都是域名来组织的
注意 cookie这里的键值对都是简单的字符串,使用cookie作为保存数据的手段,只能存一些简单的键值对信息和简单的字符串,但是想保存个图片啥的,存falsh,是做不到的。
比如cookie可以存:
1.上次访问页面的时间
2.当前网页的访问次数
3.当前访问页面的身份标识(身份标识,id)
注意,这里存什么,都是程序员自定义的(代码控制)
cookie 是存在浏览器的,来源是服务器
例如访问一个网站2345
像这里的cookie都是咱们浏览器访问了2345.com服务器之后由服务器返回的,在服务器返回的响应报文中,可以在响应header中包含一个/多个 set-cookie这样的资源,浏览器看到set-cookie就会把这样的数据给保存在浏览器本地
注意这些set-cookie由于是在head里面键值对方式存储,都是在服务器代码中构造出来的
来自于服务器,存储于浏览器,还要再回到服务器。
当浏览器保存了cookie之后,下次浏览器访问同一个网站,就会把之前本地存储的cookie再通过http请求header中的cookie给带过去
既然来源服务器,回到服务器,经历这一圈是因为服务器要服务的客户端是很多的,这些不同的客户端应该要有不同的数据
最常用的场景是在客户端维持登录状态
在某个网站上登录成功后,浏览器就会机制当前登录用户的身份信息,然后再接下来访问网站的其他页面,服务器也能直到咱们是谁在登录(总不能每次打开一个页面都重新登录一遍)
注意这里的首次登录,和第二次登录的过程,浏览器这边存的是身份标识,服务器这边存储具体信息(键值对),根据身份标识绑定,最终服务器返回给浏览器一个页面
生活中的cookie 医院看病
注意理解用户拿到就诊卡就是一个身份标识,里面记录了set-cookie这样的键值对,医院(服务器)刷卡拿到的值,就是你的具体信息了,每次去不同诊室的刷卡过程,就省去了一边右一边的登录登记,使个人一直在维持登录状态