HTTP协议04(HTTP请求/响应)

文章详细介绍了HTTP请求和响应的组成部分,包括请求报头中的Host、Content-Length/Content-Type、User-Agent、Referer和Cookie,以及响应报头中的Content-Type。重点讲解了Cookie的工作原理和应用场景,还有HTTP状态码的常见类型,如200、302、404、403和500等。
摘要由CSDN通过智能技术生成

1 前情回顾

在前面介绍了HTTP请求和响应的格式、URL格式及重要组成部分、HTTP8种方法、GET和POST区别等内容,下面继续了解关于HTTP的相关内容。

2 认识请求“报头”(header)

header的整体格式也是键值对格式,每个键值对占一行. 键和值之间使用分号分割,由于键值对都是标准规定的,有特定的含义,当然也有一些可以自定义的键值对 。

2.1 Host

表示服务器主机的地址和端口:
在这里插入图片描述
端口可以省略,省略表示默认值(HTTP:80、HTTPS:443);
我们了解过url,可以看到在url里面也有服务器主机的IP和端口,那与Host有什么区别?事实上,url里的IP和端口与Host里的IP和端口不一定完全一致,如果我们访问过程中经过了某些代理,可能就会不一样。

2.2 Content-Length/Content-Type

  1. Content-Length:表示 body 中的数据长度
  • HTTP协议在传输层是基于TCP(3.0变成UDP),TCP是基于面向字节流的,可能会出现粘包问题,不知道从哪儿读到哪儿(解决办法:约定分隔符、约定报文长度),这时候就需要body长度Content-Length,不需要手动设置,浏览器和HTTP服务器可以自己计算好。
  1. Content-Type:表示请求的 body 中的数据格式
  • body种的数据可以有多种格式,不同的格式对于接收方来说解析方式也是不同的,当我们约定好Content-Type,才知道如何进行解析。
  1. Content-Type常见格式
  • application/x-www-form-urlencoded: form 表单提交的数据格式. 此时 body 的格式形如:
    title=test&content=hello
  • multipart/form-data: form 表单提交的数据格式(在 form 标签中加上enctyped=“multipart/form-data” ,通常用于提交图片/文件。
  • application/json: 数据为 json 格式. body 格式形如:
    在这里插入图片描述
    最常见也是最常用的格式。

这两个字段不一定有,但是如果有一个就会有另外一个,两个同时出现,如果请求没有body(GET)就没有这两个字段,如果请求有body(POST)就会有这两个字段。

2.3 User-Agent (简称 UA)

表示浏览器/操作系统的属性,格式:
在这里插入图片描述
UA主要包含的信息就是操作系统信息和浏览器信息,描述了用户在使用什么样的设备上网,虽然如今的浏览器差距不多,但是浏览器可以识别PC、平板、手机版本分别开发出不同的页面。后来代码也可以实现根据不同的尺寸自动重新调整页面布局,如今UA可以用来在服务器端统计用户设备使用情况。

2.4 Referer

表示这个页面是从哪个页面跳转过来的,如果直接在浏览器中输入URL, 或者直接通过收藏夹访问页面时是没有 Referer 的。
在这里插入图片描述

2.5 Cookie

重要字段,是浏览器把数据存到本地硬盘上的一个机制。
浏览器也需要保存一些特殊信息,由于需要持久化保存,就需要存储到硬盘上,浏览器为了安全起见,禁止网页的js访问电脑的文件系统。浏览器专门提供了api给网页用,存储一些简单的数据,浏览器提供的数据存储方案:经典的Cookie、较新的LocalStorage、更年轻的indexDB……在这里插入图片描述
Cookie是按照域名维度来组织的,不同的域名下有不同的Cookie,一个网站发起的http请求可能是来自多个域名的。
每个Cookie都是一个键值对,名称是key,内容是value,域名和路径描述了Cookie的有效范围,Cookie和query string都是自定义的,由于cookie中的键值对都是简单的字符串,只能存储一些简单的信息,无法存储图片、视频等复杂的信息。
在这里插入图片描述

2.5.1 Cookie的来源

上面截图里的cookie都是浏览器访问了服务器之后由服务器返回的,在服务器返回的响应报文中,可以在响应header中包含一个或多个Set-Cookie这样的资源,浏览器看到Set-Cookie就会把这样的数据保存到浏览器本地。

2.5.2 Cookie的去向

cookie来源于服务器,存储在浏览器中,还要回到服务器,当浏览器保存了Cookie之后,下次浏览器访问同一个网站,就会把之前本地存储的Cookie再通过http请求header中的cookie给带过去。
为什么要保存又带走呢,服务器的客户端有很多,不同的客户端需要的数据不同,所以每次都得转一圈。

2.5.3 Cookie的应用场景

典型应用场景(不是唯一)就是在客户端维持登陆状态。
例如当我们登录Gitee,无论我们进入这个网站的哪个页面,持续保持登陆状态。
画图理解一下具体的过程:
在这里插入图片描述
当我们移出某个网页的cookie,重新刷新页面,抓包可以看到相应里面携带的Set-Cookie:
在这里插入图片描述在这里插入图片描述

3 认识请求“正文”(body)

我们前面了解过,Get没有body,Post一般有body。

3.1 常见格式

  1. application/x-www-form-urlencoded
    构造form表单的时候就是这个格式,类似于query string,以键值对的格式存在。
  2. multipart/form-data
    上传文件的时候的格式
  3. application/json
    body里面是JSON格式

4 HTTP响应

4.1 状态码

状态码是一个数字,这个数字描述了请求的状态,是成功还是失败。HTTP的状态码种类很多,这里我们只了解常见的状态码,其余的大家有兴趣可以自行了解。

  1. 1xx 信息性状态码(接收的请求正在处理)
  2. 2xx 成功
  • 200 OK
    访问成功。但凡访问成功的状态码就是200,因此不在浏览器界面反馈给我们,抓包可以看到。
  1. 3xx 重定向
    重定向:类似于呼叫转移,现在的快递基本都是私密号,我们可以拨打隐私号然后输入暗号转接到正确的手机号。
  • 302 Move temporarily
    临时重定向。用于实现登陆成功后自动跳转到主页,响应报文的 header 部分会包含一个 Location 字段, 表示要跳转到哪个页面。服务器的地址迁移、
  • 301 Moved Permanently
    永久重定向。 当浏览器收到这种响应时, 后续的请求都会被自动改成新的地址,也是通过 Location 字段来表示要重定向到的新地址。
  1. 4xx 客户端错误(服务器无法处理请求)
  • 404 Not Found
    没有找到资源。这是经常会看到的一个错误,原因是请求路径错误,在url里面的路径表示要访问的服务器上的资源,当这里的路径写错了,服务器上就找不到,就返回404,还有很多网站响应“你的页面不见了”。
  • 403 Forbidden
    访问被拒绝。有的页面通常需要用户具有一定的权限才能访问(登陆后才能访问)。如果用户没有登陆,以游客的身份直接访问, 就容易见到 403,在我们常用gitee的时候就会发现偶尔(可能是未登录情况下查看私有仓库)会出现这种情况。
  • 405 Method Not Allowed
    方法不允许。前面我们已经学习了 HTTP 中所支持的方法, 有 GET, POST, PUT, DELETE 等,但是对方的服务器不一定都支持所有的方法(或者不允许用户使用一些其他的方法)。
  1. 5xx 服务器错误
  • 500 Internal Server Error
    服务器出现内部错误。服务器的代码执行过程中出现异常(服务器异常崩溃)会产生这个状态码。
  • 504 Gateway Timeout
    访问超时了。当服务器负载比较大的时候, 服务器处理单条请求的时候消耗的时间就会很长, 就可能会导致出现超时的情况。

5 认识响应“报头”(header)

响应报头的基本格式和请求报头的格式基本一致,类似于 Content-Type , Content-Length 等属性的含义也和请求中的含义一致。

Content-Type

响应中的 Content-Type 常见取值和请求不太一样:

  • text/html : body 数据格式是 HTML
  • text/css : body 数据格式是 CSS
  • application/javascript : body 数据格式是 JavaScript
  • application/json : body 数据格式是 JSON

6 认识响应“正文”(body)

正文的具体格式取决于 Content-Type,就是以上四种格式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值