Url详解
- 协议方案名:有http和https,两者区别为https相比http协议多了一层加密层,从而使得数据传输更安全。
- 登录信息:这一部分是用户登录的账号和密码,由于不安全,现在几乎不用到了
- IP地址/域名:在浏览器输入该ip地址来跳转到网页,比如www.baidu.com
- 端口号:http协议默认端口号为80,https协议默认端口号为443
- 文件路径:该文件路径就是tomcat中webapps中定位到的资源路径。
- url参数:是追加到 URL 上的一个名称-值对,参数以问号 (?) 开始 并采用 name=value. 如果存在多个 URL 参数,则参数之间用 (&) 符隔开,每个参数用=确认键值对关系。下例显示带有两个名称-值对的 URL 参数:
http://server/path/document?name1=value1&name2=value2 - 片段标识符:用#表示,因为网页由于屏幕有限,只显示一部分,二片段标识符可以直接定位到想要的片段,如下图:
程序的交互图
当在浏览器输入url回车后,前端会向后端发送一个请求(request)
后端接收到request信息后会先解析url的命令,根据url判断后端要做的事情,对应的进行处理逻辑业务。
后端把响应的结果response返回给前端
前端拿到了后端相应的结果response,通过浏览器的引擎把后端的业务进行解析和渲染,用户就可以看到对应的结果。
而http就是用于request和response中间传输的规则,是基于TCP/IP的关于数据如何在万维网中如何通信的协议。说白了就是用于前后端数据交互的,在数据传输的过程中就用到了http协议,那么下面我们就来说http协议究竟都有些什么。
get和post区别
GET和POST是HTTP请求的两种基本方法,有什么区别呢
- GET在浏览器回退时是无害的,而POST会再次提交请求。
- GET产生的URL地址可以被Bookmark,而POST不可以。
- GET请求会被浏览器主动cache,而POST不会,除非手动设置。
- GET请求只能进行url编码,而POST支持多种编码方式。
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
- GET请求在URL中传送的参数是有长度限制的,而POST么有。
- 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
- GET参数通过URL传递,POST放在Request body中。
编码和解码
如果我在百度里面搜“键盘”二子,出现的URL就是这样子的
这就是编码后的一个结果,把这个url复制下来,就会发现键盘是一堆别的码,这是因为网页显示的是编码后的结果。
谷歌自带的开发者工具有decodeURL解码 和 encodeURL编码的一个方法,如下所示:
为什么需要编码和解码呢?
像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现.
比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.
转义的规则如下:
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式
http协议格式
request组成:
- 首行:【方法get/post】【url】【版本】(最常见的是http/1.1)
- 请求头:多个参数(key,value)组成,每个参数以 \n作为分隔符,参数之间使用:进行分割
- 空行:用于表示请求头的结束
- body正文:get的body是空的,post的body采用内容。
body存储的是参数,而get的参数已经在url上面进行拼接了,所以body就可以为空
key=value & key2=value2
body规则:可以有多个参数,每个参数之间是以 & 分隔,参数中以=分隔
response组成:
与request不同的是首行,变为了【版本】【状态码】【状态码描述】
抓包工具fiddler
fiddler可以看到前后端交互的具体细节,有需要的小伙伴可以下载一个,下面演示一下抓取请求相应的具体过程
-
我先把抓到的包都清空一下
-
比如说我现在在百度上搜个键盘,然后对应的fiddler就会抓取到对应的包显示出来,我们不想让他继续抓包了,就点击Capturing停止抓取
-
找到对应的请求和相应,find后有关baidu的都会标黄
-
此时就选中想要看的包,在点击raw查看原生数据,这时上面的就是request的资源,下面的就是response资源。
状态码解析
首先按大类可以分为五类,如下图
然后又细分为很多的小类,重点要掌握的用红框标红了
301和302的区别:
- 含义不同:301为永久重定向,而302为临时重定向
- 对于搜索引擎的收录权重是不同的:301收录权重比302高
HTTP常见Header
HTTP协议格式中有请求头和响应头,里面的内容都有什么呢?
- Content-Type: 数据类型(text/html等)
- Content-Length: Body的长度
- Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
- User-Agent: 声明用户的操作系统和浏览器版本信息;
- referer: 当前页面是从哪个页面跳转过来的;
- location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
- Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;