HTTP协议

1.http协议(超文本传输协议)

针对网络上的客户端与服务器端在执行http请求的时候,遵守的一种规范。 其实就是规定了客户端在访问服务器端的时候,要带上哪些东西, 服务器端返回数据的时候,也要带上什么东西。

  • 版本
    1.0—请求数据,服务器返回后,将会断开连接
    1.1—请求数据,服务器返回后,连接还会保持着。 除非服务器|客户端关掉。有一定的时间限制,如果都空着这个连接,那么后面会自己断掉。

1.1 介绍

image-20231222163410552

HTTP:Hyper Text Transfer Protocol(超文本传输协议),规定了浏览器与服务器之间数据传输的规则。

  • http是互联网上应用最为广泛的一种网络协议
  • http协议要求:浏览器在向服务器发送请求数据时,或是服务器在向浏览器发送响应数据时,都必须按照固定的格式进行数据传输

1.2 特点

我们刚才初步认识了HTTP协议,那么我们在看看HTTP协议有哪些特点:

  • *1.基于TCP协议: * 面向连接,安全

    TCP是一种面向连接的(建立连接之前是需要经过三次握手)、可靠的、基于字节流的传输层通信协议,在数据传输方面更安全

  • 2.基于请求-响应模型: 一次请求对应一次响应(先请求后响应)

    请求和响应是一一对应关系,没有请求,就没有响应

  • 3.HTTP协议是无状态协议: 对于数据没有记忆能力。每次请求-响应都是独立的

    无状态指的是客户端发送HTTP请求给服务端之后,服务端根据请求响应数据,响应完后,不会记录任何信息。

    • 缺点: 多次请求间不能共享数据
    • 优点: 速度快

    请求之间无法共享数据会引发的问题:

    • 如:京东购物。加入购物车和去购物车结算是两次请求
    • 由于HTTP协议的无状态特性,加入购物车请求响应结束后,并未记录加入购物车是何商品
    • 发起去购物车结算的请求后,因为无法获取哪些商品加入了购物车,会导致此次请求无法正确展示数据

    具体使用的时候,我们发现京东是可以正常展示数据的,原因是Java早已考虑到这个问题,并提出了使用会话技术(Cookie、Session)来解决这个问题。具体如何来做,我们后面课程中会讲到。

1.3 Http协议两个分类

浏览器和服务器是按照HTTP协议进行数据通信的。

HTTP协议又分为:请求协议响应协议

  • 请求协议:浏览器将数据以请求格式发送到服务器
    • 包括:请求行请求头请求体
  • 响应协议:服务器将数据以响应格式返回给浏览器
    • 包括:响应行响应头响应体

2.HTTP-请求协议

请求的数据(三部分):请求行、请求头、请求体

image-20231222164414883
  • 请求行(以上图中红色部分):包含请求方式、资源路径、协议/版本
    • 请求方式:POST
    • 资源路径:/brand
    • 协议/版本:HTTP/1.1
  • 请求头(以上图中黄色部分)
  • 请求体(以上图中绿色部分) :存储请求参数
    • 请求体和请求头之间是有一个空行隔开(作用:用于标记请求头结束)

2.1 请求行

image-20231222165531796
  • 请求方式
请求方式 请求说明
GET(最常见) 获取资源。
向特定的资源发出请求。例:http://www.baidu.com/s?wd=itheima
POST(最常见) 传输实体主体。
向指定资源提交数据进行处理请求(例:上传文件),数据被包含在请求体中。
OPTIONS 返回服务器针对特定资源所支持的HTTP请求方式。
因为并不是所有的服务器都支持规定的方法,为了安全有些服务器可能会禁止掉一些方法,例如:DELETE、PUT等。那么OPTIONS就是用来询问服务器支持的方法。
HEAD 获得报文首部。
HEAD方法类似GET方法,但是不同的是HEAD方法不要求返回数据。通常用于确认URI的有效性及资源更新时间等。
PUT 传输文件。
PUT方法用来传输文件。类似FTP协议,文件内容包含在请求报文的实体中,然后请求保存到URL指定的服务器位置。
DELETE 删除文件。
请求服务器删除Request-URI所标识的资源
TRACE 追踪路径。
回显服务器收到的请求,主要用于测试或诊断
CONNECT 要求用隧道协议连接代理。
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
  • 资源路径

资源路径=请求路径?请求参数1=值1&请求参数2=值2

  • 协议/版本

HTTP/1.1等等

2.2 请求头

image-20231222170506433

http是个无状态的协议,所以在请求头设置浏览器的一些自身信息和想要响应的形式。这样服务器在收到信息后,就可以知道是谁,想干什么了

常见的HTTP请求头有:

1
2
3
4
5
6
7
8
9
10
11
12
13
Host: 表示请求的主机名

User-Agent: 浏览器版本。 例如:Chrome浏览器的标识类似Mozilla/5.0 ...Chrome/79 ,IE浏览器的标识类似Mozilla/5.0 (Windows NT ...)like Gecko

Accept:表示浏览器能接收的资源类型,如text/*,image/*或者*/*表示所有;

Accept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页;

Accept-Encoding:表示浏览器可以支持的压缩类型,例如gzip, deflate等。

Content-Type:请求主体的数据类型

Content-Length:数据主体的大小(单位:字节)

2.3 请求体

image-20231222171056457

2.4 Get和Post的区别

区别方式 GET请求 POST请求
请求参数 请求参数在请求行(第一部分)
例:/brand/findAll?name=OPPO&status=1
请求参数在请求体(第三部分)
请求参数长度 有限制(浏览器不同限制也不同) 没有限制
安全性 安全性低(请求参数暴露在浏览器地址栏中) 安全性相对高

3.HTTP-响应协议

响应的数据(三部分):响应行、响应头、响应体

image-20231222164452936

3.1 响应行

image-20231222171333614

  • 协议

​ http1.1等协议

  • 状态码
状态码分类 说明
1xx 响应中(发送还未结束)——临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果它已经完成则忽略它
2xx 成功(最希望看到的)——表示请求已经被成功接收,处理已完成(成功了)
3xx 重定向(我这里有问题,给你自动换一个服务器)——重定向到其它地方:它让客户端再发起一个请求以完成整个处理(域名过期,已经为您转到新域名位置)
4xx 客户端错误——处理发生错误,责任在客户端,如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等
5xx 服务器端错误——处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持等(后端controller不写@RequestParam注解)
  • 描述

    对响应数据的描述

3.2 响应头

image-20231222171815139

  • 常见的响应头信息:

image-20231222172032115

3.3 响应体

image-20231222171920140

4.HTTP状态码(响应协议)

4.1 状态码大类

状态码分类 说明
1xx 响应中(发送还未结束)——临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果它已经完成则忽略它
2xx 成功(最希望看到的)——表示请求已经被成功接收,处理已完成(成功了)
3xx 重定向(我这里有问题,给你自动换一个服务器)——重定向到其它地方:它让客户端再发起一个请求以完成整个处理(域名过期,已经为您转到新域名位置)
4xx 客户端错误——处理发生错误,责任在客户端,如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等
5xx 服务器端错误——处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持等(后端controller不写@RequestParam注解,mapper写错了sql)

4.2 常见的响应状态码

状态码 英文描述 解释
==200== OK 客户端请求成功,即处理成功,这是我们最想看到的状态码
302 Found 指示所请求的资源已移动到由Location响应头给定的 URL,浏览器会自动重新访问到这个页面
304 Not Modified 告诉客户端,你请求的资源至上次取得后,服务端并未更改,你直接用你本地缓存吧。隐式重定向
400 Bad Request 客户端请求有语法错误,不能被服务器所理解
403 Forbidden 服务器收到请求,但是拒绝提供服务,比如:没有权限访问相关资源
==404== Not Found 请求资源不存在,一般是URL输入有误,或者网站资源被删除了
405 Method Not Allowed 请求方式有误,比如应该用GET请求方式的资源,用了POST
428 Precondition Required 服务器要求有条件的请求,告诉客户端要想访问该资源,必须携带特定的请求头
429 Too Many Requests 指示用户在给定时间内发送了太多请求(“限速”),配合 Retry-After(多长时间后可以请求)响应头一起使用
431 Request Header Fields Too Large 请求头太大,服务器不愿意处理请求,因为它的头部字段太大。请求可以在减少请求头域的大小后重新提交。
==500== Internal Server Error 服务器发生不可预期的错误。服务器出异常了,赶紧看日志去吧
503 Service Unavailable 服务器尚未准备好处理请求,服务器刚刚启动,还未初始化好

状态码大全:https://cloud.tencent.com/developer/chapter/13553

5. HTTP协议解析

image-20231222172249641

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 1.http协议(超文本传输协议)
    1. 1.1. 1.1 介绍
    2. 1.2. 1.2 特点
    3. 1.3. 1.3 Http协议两个分类
  2. 2. 2.HTTP-请求协议
    1. 2.1. 2.1 请求行
    2. 2.2. 2.2 请求头
    3. 2.3. 2.3 请求体
    4. 2.4. 2.4 Get和Post的区别
  3. 3. 3.HTTP-响应协议
    1. 3.1. 3.1 响应行
    2. 3.2. 3.2 响应头
    3. 3.3. 3.3 响应体
  4. 4. 4.HTTP状态码(响应协议)
    1. 4.1. 4.1 状态码大类
    2. 4.2. 4.2 常见的响应状态码
  5. 5. 5. HTTP协议解析
,