一.http 的原理
1.认识URL
URL就是我们俗称的“网址”
例如: http://www.baidu.com/
http指的就是协议类型
其中www.baidu.com 指的是域名(和IP等价),
最后面的 / 指的是服务器的根目录,一般获取到某个网页的首页
再例如:http://123.207.58.25/admin
其中的123.207.58.25指的是服务器的地址,隐含了端口号,当不显示的写端口
号的时候,浏览器会自动的添加上默认的端口号 http:80 https:443
后面的/admin 指的是 请求这个服务器的具体资源(path)
(真实文件/虚拟资源)
URL中的path不同,获取的页面也是不同的
url中的服务器ip用来确定一个服务器
url中的端口号用来确定某个服务器上的一个进程
url中的path用来确定这个进程中所管理的 资源/文件
2.urlencode和urldecode
当我们在搜狗搜索时,我们会发现url会发生变化,例如我们搜索java
我们发现上面的“网址”变成了
https://www.sogou.com/web?query=java
&_asf=www.sogou.com
&_ast=&w=01019900&p=40040100
&ie=utf8&from=indexnologin
&s_from=index
&sut=1217&sst0=1611228928930
&lkt=0%2C0%2C0
&sugsuv=1605954121223552
&sugtime=1611228928930
变成了一些我们不认识的键值对,这个键值对的具体的含义只有搜狗内部才会知道,这是程序员自定的参数内容,如果你在百度搜索会发现后面的键值对的和这里的键值对是不相同的
刚才搜索的java关键字放到了query后面
在试试输入中文或者特殊的字符
我们搜索c++发现query 后的内容变成了c%2B%2B
为什么呢?
像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能
随意出现.比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进
行转义.
转义的规则如下:
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),
每2位做一位,前面加上%,编码成%XY格式
"+" 被转义成了 "%2B"
转义工具链接
urldecode就是urlencode的逆过程;
3.http协议的格式
我们可以通过 fiddler 进行抓包来观察 协议格式
- 请求报文
- 响应报文
4.报文的含义
- method
http协议的请求方法
最初的初衷是,使用各个方法,干不同的事,但是到2021年的今天,很少会按照这样的说明来使用
GET方法不一定就能用来获取资格,也可以用它来干别的,传输文件、删除文件等等,其他方法也一样
2.状态码:
面试题:常见的状态码
点此查看
- header
- Content-Type: 数据类型(text/html等)
- Content-Length: Body的长度
- Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
- User-Agent: 声明用户的操作系统和浏览器版本信息;
- referer: 当前页面是从哪个页面跳转过来的;
- location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
- Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;
5.Session和Cooike
-
用户信息
Http 是一个无状态协议, 就是说这一次请求和上一次请求是没有任何关系 的,互不认识的,没有关联的。这种无状态的的好处是快速。坏处是需要 进行用户状态保持的场景时[比如,登陆状态下进行页面跳转,或者用户信息 多页面共享等场景],必须使用一些方式或者手段比如: session 和 cookie
-
cookie
Http 是一个无状态的协议,但是访问有些资源的时候往往需要经过认证 的账户才能访问,而且要一直保持在线状态,所以,cookie是一种在浏览 器端解决的方案,将登陆认证之后的用户信息保存在本地浏览器中,后面 每次发起http请求,都自动携带上该信息,就能达到认证用户,保持用户 在线的作用
具体如下图
设置cookie的方法在 Http 的 Response 报头中可以携带 Set-Cookie 字段来完成
-
Session
将用户敏感信息放到本地浏览器中,能解决一定的问题,但是又引进了新的 安全问题,一旦cookie丢失,用户信息泄露,也很容易造成跨站攻击, 所以有了另一种解决方法,将用户敏感信息保存至服务器,而服务器本身 采用md5算法或相关算法生成唯一值(session id),将该值保存值客 户端浏览器,随后,客户端的后续请求,浏览器都会自动携带该id,进而 再在服务器端认证,进而达到状态保持的效果
-
Cookie vs Session
- Cookie以文本文件格式存储在浏览器中,而session存储在服务端
- 因为每次发起 Http 请求,都要携带有效Cookie信息,所以Cookie一般都有大小限制,以防止增加网络压力,一般不超过4k
- 可以轻松访问cookie值但是我们无法轻松访问会话值,因此session方案更安全