回顾一下之前学习的内容
通过之前的学习,我们大致了解了HTTP请求响应的报文格式
HTTP请求
(1)首行(方法 URL 版本号)
(2)请求头 header
(3)空行
(4)正文body
HTTP响应
(1)首行(版本号 状态码 状态码描述)
(2)响应头header
(3)空行
(4)正文
我们在学习请求的格式中,我们学习了首行的方法和URL
还讲述了请求header的部分标准键值对:
1)Host
2)Content-Length & Content-Type
3)User-Agent
4)Referer
接下来,我们再继续往下学习,我们还要在学习一个请求header里面的标准键值对——Cookie
Cookie不是小饼干~它同样是请求头中一个重要字段:这是浏览器在本地储存的一种机制(存在硬盘上)
下图是访问的网页时,浏览器保存下来的Cookie
每当我们打开一个网页,看屏幕左上角根域名在一起的那个小锁头,点击就会显示Cookie,画红圈的部分就是Cookie
Cookie是按照不同的域名维度来组织的
不同的域名有不同的Cookie,一个网站发起的http请求可能来自多个域名,每一个Cookie都会对应一个键值对,Cookie和query string一样,都是由程序员自定义的~
Cookie从哪里来,要到哪里去?
Cookie这里的键值对是简单的字符串,也就是说,使用Cookie来作为保存数据的手段,只能存一些简单的键值对信息,简单的字符串,不能存什么图片视频音频啥的
比如说,可以使用Cookie来存
1.上次访问页面的时间
2.当前访问页面的次数
3.当前访问页面的身份信息(身份标识,id)
那么Cookie从哪里来的呢?
cookie存在服务器,但来源是浏览器,比如说上图的搜狗网页里面的cookie,都是我们去访问搜狗这个网页后,就会访问到搜狗的服务器,由服务器返回的这些cookie
在服务器返回的响应报文中,可以在响应header中包含一个或者多个Set-Cookie这样的资源,浏览器看到Set-Cookie就会把这样的数据给保存在浏览器本地~
Cookie要到哪里去?
cookie来自服务器,储存在浏览器,最终还要返回到服务器。当浏览器保存了cookie之后,下次访问同一个网站,就会把之前本地储存的cookie再通过http请求header中的cookie再给带过去
那么我们想想,为什么把cookie从服务器存到浏览器中,之后再访问服务器的时候,又要把cookie返回给服务器?
因为服务器要服务的客户端有很多很多,这些不同的的客户端都是有着自己的相关数据,
或者简单来说就是,cookie相当于你的通行证,你的这个通行证在我的服务器登记过,我这里就会记录你的相关信息了,之后服务器会给你提供更便捷的服务吧
下面我们来看一个cookie经典应用场景(不是唯一场景)
最常用的场景就是在客户端维持登录的状态
我们在某个网站登录成功后,浏览器就会获取到服务器的发送来的cookie,这些cookie里面有客户端的身份信息,然后接下来访问该服务器的其他页面时,服务器也知道是谁在登录
当你第一次带着你的用户名和密码去请求登录的时候,服务器就会去校验你的用户名和密码,同时服务器这边会储存一个键值对,key就是刚才返回的身份标识,value就是用户的详细信息(服务器要给多个用户提供服务,每个用户就会对应一组不同的键值对)
然后当你再次去访问该服务器的时候,浏览器会在请求中加入有关你信息的cookie发送给服务器,服务器就可以根据身份标识来在键值对中查找,找到对应的value,然后就会给你返回一个登录过的页面(比如说我们登录csdn,cookie可以维持登录状态,否则你每次一打开一个csdn页面就要重新登录一次了)
HTTP响应
咱们来看看状态码~
状态码,是一个数字,这个数字描述了当前这次请求的“状态”(成功/失败以及失败的原因)
HTTP的状态是有明确的规定的,我们重要得认识那些经常出现的状态码
(1)200:表示访问成功
(2)404 Not found :你的请求路径出错了
你的请求中的url路径(表示要访问的服务器上的资源)写错了(想访问的资源,服务器没有),此时就会出现404
这里有一个问题:服务器会在内存上创建一个虚拟的文件资源对吧,这是程序员自定义的,是在写代码的时候构造好的,你要是输入的url路径不匹配,那还是会报错~
(3)403 Forbidden:访问被拒绝(客户端没有访问当前网页的权限)
然后你会发现404和403这两个状态码都是针对客户端的,客户端这边要是有问题就可能会放回4xx状态码,都是4开头的~
(4)500 Internal Server Error :表示服务器内部错误
也就是服务器代码执行过程中,出现异常
(5)504 Gateway Timeout :表示访问超时了
一般在双11的时候,淘宝的服务器就经常会瘫痪对吧,就是服务器请求量很大的时候,对于服务器的负载就很重
然后你会发现:500和504都是针对服务器的,如果服务器出现问题,会是5xx也就是5开头的状态码
(6)302:临时重定向
当我们有时候访问一个网站的时候,一点击,这个网站就会给我们跳转到另外一个网站,这就是重定向
有一天我们的旧网站打算不用了然后搞一个新网站,但是旧网站还有很多老用户,那么我们就可以搞一个重定向,当老用户访问旧网站的时候,会给他们跳转到新的网站
(7)301 Moved Permanently 永久重定向.
当浏览器收到这种响应时, 后续的请求都会被自动改成新的地址. 301 也是通过 Location 字段来表示要重定向到的新地址.
状态码还有很多,这里就不一一列举了
下面做一个总结
上图就是不同状态码的基本性质
响应的报头也和请求的报头差不多
以上加上之前的内容就是介绍了HTTP报文格式的重要内容了~