http协议现在默认1.1版本
访问网站来抓包,抓取查看数据报文的结构
三次握手
三次握手后,客户端向服务端发送一个请求,请求里带有请求报文,里面是数据链路层,传输层,网络层
下面就是应用层的报文头部
应用层协议 ,GET /跟 HTTP/1.1协议 \N回车,请求报文头部
报文头部里就是键值对
响应报文
响应报文的头部和请求报文的头部,格式不一样
请求报文,分成三大块,方法,URL。版本,回车换行
第一行,开始行,都是有回车换行的
方法get
URL= /
版本号HTTP/1.1
下面就是键值对
将来不同浏览器的用户需要在服务器做判断,比如手机端和pc端
最后还带有,实体主体,通常不常用(所有的首部完了以后,可能还有实体)
空行后面可能就存了实体‘
时候时候实体里会有内容(上传一个事务,比如一个博客文章,就放到实体里
host其实就是首部字段的 一个
响应报文格式,也是类似三大块
第一行
也有首部字段
也有实体
第一行开始行,版本(http1.1+状态码(比如401验证,403权限拒绝,404不存在页面)+短语+回车换行
火狐浏览器会把你想了解的状态码继续官方解释
点击问好可以转到火狐浏览器官方对状态码的说明
响应报文的首部字段名和值
文件大小和类型都能看到
这个就是实体
telnet 就是模拟了请求报文的头部
全部注释
再重新telnet
j具体协议内容
head就是只取响应报文头部,-I就是只取响应报文头部
-i头部显示,数据也显示
post一般是把数据传给服务器,把请求的数据传给服务器(比如在论坛上传个附件上去,还有在对话框输入用户名和密码)
tarace追踪经过的代理服务器(正向代理和反向代理)
options可以看看,服务器端去看看它所支持的资源是什么样,哪些支持,哪些不支持
报错注意,不能暴露版本号
状态码一般是三位数字
100左右代表信息提示
200左右代表成功
300左右代表重定向
400左右代表错误类信息,客户端错误
500左右代表错误类信息,服务器端错误
具体常用的状态码
301,302很容易混淆,都属于重定向,
301 moved permanently 永久重定向
302 是临时重定向
什么http的重定向,访问京东老的域名
结果跳转重定向到了京东
http访问淘宝,结果会使用https,也算一种重定向
这两种重定向就是一个叫永久一个叫临时
301永久
试试用命令查看
302临时
重定向,到哪里都有提示
在百度搜索引擎去爬你这个网站,看到永久重定向,说明你这个之前的网站就作废了,它也就不去爬了
但是永久还是重定向都是主机网站定义的
之前用过有一些技术,能实现重定向,比如别名之类的
304客户端没有发生变化,服务器端一看数据没有发生变化,客户端缓存下来的数据直接访问即可,当浏览器访问页面,z这个页面在客户端会有缓存,下次再访问的时候,如果服务器资源没有变化,就不需要再把这个资源重新下载,用本机的资源就可以了
通常第一次访问时200,第二次访问都是有缓存的,缓存就会产生304效果
401身份验证的时候看到过
403是权限被拒绝了
404找不到网页
500是服务器内部错误(上次配置问题出现过
502代理服务器后端,服务器收到一条伪响应,表示无法连接到网关,一般稍微有点规模的网站都是把请求先发到调度器的,调度器再发送到服务器端,就有个问题,把用户请求调度过去,服务器却宕机了,那么作为调度器就会发送502给客户端,表示后面真实的服务器端出现了问题
504,网关超时,把请求发到服务器端了,服务器端迟迟不返回消息,超时了,就是504,不是不回应,而是认为时间太长了
这个状态码面试题经常问
请求报文和响应报文都有这一步
via中间经跟哪些哪些节点到达的
中间节点有可能是做缓存用的,比如CDN,内容分发网络
报文信息想看清楚,用curl -v就可以
关键说下cookie,cookie可以在浏览器设置
如果禁用了,某些网站可能有些问题,如百度云
cookie(甜品),具体是什么样的
无状态协议就是当访问网站的时候,第一次访问和后面刷新访问对于后面服务器端是搞不清楚是同一个人还是不同的人,因为http协议是无状态,就不知道每次用户访问是否是同一个用户,记录不了前一次访问的重要信息(就是你登录淘宝买东西,购物车放好东西一点即页面,一刷新,页面就没了,不知道你是哪个用户,http本身是记不住你上一次信息的,如何解决
其中一种就是cookie,cookie本身就实在客户端向服务器端发送的小的文本内容,具体实现如下:
用户访问服务器,服务器会分给客户端一个set-cookie信息,里面放的就是一个个键值对
将来在客户端的浏览器目录里,就会把cookie存起来,当下次再访问的 时候,就携带从服务器端获得的cookie信息,
自然服务器端就可以记录下来,只要带有这个key value值的就是某个用户
打开cookie看看,上面是键,下面是值,当访问某个网站,就会提交这些信息,由此来实现身份验证
现在没登录,但是购物车已经放入两个商品
把浏览器窗口关闭,是否还有这个i信息,还在,其实是 把这些内容放到cookie去了
但是如果用你的账号登录放入购物车就 可以到任何地方都有,这是因为在服务器后面有会话,放了一些你的信息
可以让用户无论在哪里登录都可以看到信息
但是放到session,有可能环境并不是这么简单,有可能中间有个调度器,其中一个服务器有个session放了用户数据,但是用户刷新页面,有可能调度到其他服务器上去,其他服务器会有session吗,没有的话,就看不到信息了,如何来实现session的共享,有很多种其中,有根据ip的,只要是这个ip的就调度到固定的机器,但是如果用户换了机器就有可能调度到其他服务器,那么能否复制session,但是复制太多的话,就比较浪费内存
可以考虑只搭建一个专门放session的(redis,还可以把session存到磁盘上,即使断电也丢不了)
还有一种是把session放到mysql数据库,数据存放到数据库里
放到mysql关系数据库,方便管理
redis性能好,但是不方便管理
现在来模拟一个cookie的实现
现在访问自己搭建,看是否有cookie,就一个静态页面。没有cookie
需要去构建一个cookie、
搭建一个php程序
当我们去访问页面的时候,服务器端就会去发给客户端
客户端磁盘上就会多了该网站的cookie
重启服务
就有cookie了
没有定义cookie有效期,这个有效期仅是会话期间有效,换句话说,窗口关闭,就没有了
现在添加个有效期,time(php函数,返回当前 系统时间)
当前时间往后一天是有效的
title有效期比较短
当用户访问网站就会提交cookie
也可以直接把cookie显示
服务器端把cookie传给你,下一次你带着随身cookie传给服务器端,服务器看到cookie就知道你是谁了
请求报文头部有cookie
第一次访问不带cookie,后面访问就每次都带cookie,除非cookie到期
但是cookie变相把一些重要数据存放在客户端上,服务器等于变相访问磁盘数据,有一定的安全隐患,所以有些人为了安全就关闭了cookie
你访问哪些网站一看cookie,比如360就可以分析出来
curl可以测试网站的内容,-A模拟浏览器类型
referer从哪个地址跳转来的
冒充从百度跳转来的
-O把url默认的文件名保存到本机
编写一个脚本
直接访问就 执行了,可以下载下来
想要在本机执行。就可以一键安装脚本
-O是原名存放,也可以 用小o存放
把cookie保存到文件里,-c
可以演示访问网站
-source显示源码
-dump,光显示文字
很多网站为了加速访问,都会把自己的页面进行压缩,转到cdn的服务上去,cdn靠什么收费,就是靠流量收费
压缩如何实现就是用mod_deflate模块