目录
一.HTTP协议的组成
我们使用fiddler就可以获取HTTP请求或者HTTP响应.如图:(图片是例子,它大概长什么样)
1.HTTP请求:
图A
1.首行:方法+URL+版本号 如图:
- 方法有很多,但最常用就两个: GET --获取资源--支持的HTTP协议的版本:1.0和1.1 POST--传输实体主体--支持的HTTP协议的版本:1.0和1.1
- URL的组成: 协议名 // ip : 端口号 / 带层次的路径 ? 查询字符串(以&为分隔)
细心你会发现下面的URL没有端口号,这是因为浏览器会自动为我们添加端口号.HTTP协议的端口号是80,HTTPS协议的端口号是443. - 版本号:最常见的版本号是: HTTP / 1.1, 最新的版本号是:HTTP / 3
面试题: Get与Post有什么区别?
答:没有本质上区别,但是在习惯上有区别:
- GET习惯上用来表示"获取一个数据", POST则用来表示"提交一个数据"
- GET一般没有正文(body),需要携带的数据则放到URL中, POST一般有正文(body)
- GET请求通常会设计成幂等, POST则无需求
- GET可缓存的(前提是幂等), POST则不能
- GET请求可以被浏览器收藏,POST则不能
2.请求头部(header)
键值对结构(每个键与值之间使用 : 加空格来分割),每个键值对占一行,可以有n行,空行为结束标志,这里的键值对大部分都是HTTP协议规定的,当然也可以添加自定义的键值对
1.
Host这个属性,描述了要访问的服务器是谁.
你会有这样的疑问,URL中已经写了要访问的服务器是谁,为什么还要再写一遍?
答: 大多数情况下,Host的值与URL中的域名是一样的,但是,当我们不直接访问服务器,而是"代理"访问服务器,这时候Host的值与URL的域名就不一样了.Host的值是最终目标,URL的域名是当前目标.
2. Content-Length 描述了body的长度,单位为字节
3. Content-Type 描述了body的数据格式
上图A中是没有这两个东西的,因为上面两个是根据正文(body)来显示的,Get请求是没有body的,因此没有这两个东西.那么我们找个Post请求,如图.其中,application/json是数据格式(描述数据是按json格式组织的) charset=utf8是数据的字符集对于Content-Type常见的有:application/json,application/x-www-form-encoded
,text/html,text/css,application/javascript ,image/png 等等
4. User-Agent,简称UA,描述了,系统是什么版本,浏览器是什么版本
早期,浏览器种类很多,功能也是参差不齐,对于网站开发来说,难度巨大,因此发明了User-Agent,告诉服务器,主机是什么,然后服务器根据不同主机的型号,返回不同的页面.可是,现在浏览器之间的区别很小了,UA的作用也就微乎其微了.现在,UA的重要用途是区分用户是手机/平板/pc.
5. Referer描述了当前页面是从哪个页面跳转来的.上面的例子就是从百度跳转过来的.
它的用途是: 大部分广告是点击收费的.如果你是从百度上点击广告,那么百度就收广告一份钱,那么你是从搜狗上点击的广告的,那搜狗就收广告一分钱,而广告商就通过Referer来确定你从哪里点击过来的.好记录一下数据. 这种跟钱有关系的,一般都是安全加密的, 之前也说了,HTTPS是对HTTP协议加密后的,因此,绝大部分的网站都是HTTPS的,保证数据不被篡改.
6.Cookie,它也是键值对,键值之间使用;分割,键和值之间使用=分割
- 这里的键值对都是程序员自定义的数据,至于什么意思,只有程序员知道.
- Cookie的本质,是浏览器在本地存储用户自定义数据的一种关键机制.
- 浏览器自身需要存储一些数据的,为了安全,浏览器会做出限制,是禁止页面访问硬盘的,但浏览器提供了Cookie机制,允许网页往浏览器这边存储一些自定义的键值对,这些数据通过浏览器提供的api,写入特定的文件中的.
- Cookie从服务器来,当我们的浏览器访问服务器的时候,服务器就会在HTTP的响应中,通过Set-Cookie字段,把Cookie的键值对,返回给浏览器,浏览器收到这个数据,就会在本地存储
- Cookie会在下次请求的时候,带给服务器.Cookie在浏览器这边只能算是暂存,只有服务器才能发挥作用.
- Cookie是浏览器本地存储数据的机制,由于客户端很多,每个客户端提供的服务还不一样,因此,服务器通过cookie来区别,例如,客户端在登录的时候,服务器就识别好客户端的角色,把角色信息返回给浏览器,在cookie中保存,后续客户端访问的时候,带着这个cookie就行了,此时服务器就知道这个客户端是干啥的了.
- Cookie最典型的应用是存储用户的身份信息.
3.空行
请求头部结束的标志
4.正文(body)
HTTP请求一般是没有正文的
2.HTTP响应:
1.首行:
版本号+状态码+状态码描述
- HTTP/1.1是版本号--200是状态码--OK是状态码描述
- 解析:版本号与请求相同,状态码是数字,数字来表示这次请求执行成功还是失败,并且失败的原因状态码描述是通过一个或者一组单词,描述这个状态码的含义
- 状态码常见的有:
200 OK | 表示请求成功 |
404 Not Found | 表示要访问的资源不存在 |
403 Forbidden | 访问被拒绝(没有权限) |
500 Internal Server Error | 服务器内部错误 |
504 Gateway Timeout | 服务器访问超时了 |
302 Move temporarily | 临时重定向 |
301 Moved Permanently | 永久重定向 |
重定向是指访问旧的地址 | 被自动引导到新的地址去了 |
状态码分为以下几个大类,需要背下来(面试题,只要问到HTTP协议,这个必考)
1XX | informational(信息性状态码) | 接受的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |
2.响应头部
3.空行
4.正文