【JavaWeb】HTTP —— 请求协议

一、概念

客户端与服务端通信时传输的内容我们称之为报文HTTP协议就是规定报文的格式。HTTP就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。实际我们要学习的就是这两种报文。客户端发送给服务器的称为"请求报文",服务器发送给客户端的称为"响应报文"

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

刚才提到HTTP协议是规定了请求和响应数据的格式,那具体的格式是什么呢?

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

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

二、请求方式

在HTTP1.1版本中,浏览器访问服务器的几种方式:

请求方式请求说明
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协议中预留给能够将连接改为管道方式的代理服务器

在我们实际应用中常用的也就是 :GET、POST


三、GET方式的请求协议

1)请求行

HTTP请求中的第一行数据。由:请求方式资源路径协议以及协议的版本组成(之间使用空格分隔)

HTTP有两个版本:1.0和1.1,我们使用一般都是1.1版本

  • 请求方式:GET
  • 资源路径:/brand/findAll?name=OPPO&status=1
    • 请求路径:/brand/findAll
    • 请求参数:name=OPPO&status=1
      • 请求参数是以key=value形式出现
      • 多个请求参数之间使用 & 连接
    • 请求路径和请求参数之间使用 ? 连接
  • 协议/版本:HTTP/1.1

2)请求头

第二行开始,上图黄色部分内容就是请求头。格式为key: value形式

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

常见的HTTP请求头有:

- 表示请求的主机名
Host: localhost:8080   
- 浏览器版本。 例如:Chrome浏览器的标识类似Mozilla/5.0 ...Chrome/79 ,IE浏览器的标识类似Mozilla/5.0 (Windows NT ...)like Gecko
一般用于浏览器的兼容器处理,不同的浏览器它们的内核是有差异的,这就造成了,同一段程序在不同的浏览器解析出来的效果是不一样的,这个我们称之为浏览器的兼容性问题。
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36
- 表示浏览器能接收的资源类型【媒体类型,官网称呼:MIME】,如text/*(希望接受的是一个文本),image/*或者*/*表示所有;
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
- 表示浏览器偏好的语言,服务器可以据此返回不同语言的网页
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
- 表示浏览器可以支持的压缩类型,例如gzip, deflate等
Accept-Encoding: gzip, deflate, br
Content-Type: 请求主体的数据类型
Content-Length: 数据主体的大小(单位:字节)
- 表示支持长连接
Connection: keep-alive
- 请求协议的自动升级[我们发送请求的时候可能用的是http协议,服务器却是https协议,加上这个头后,浏览器自动会将请求协议升级为https的]
Upgrade-Insecure-Requests: 1  
- 当前页面的上一个页面的路径[当前页面通过哪个页面跳转过来的]:可以通过此路径跳转回上一个页面,广告计费,防止盗链
Referer: http://localhost:8080/05_web_tomcat/login.html

举例说明:服务端可以根据请求头中的内容来获取客户端的相关信息,有了这些信息服务端就可以处理不同的业务需求。

比如:

  • 不同浏览器解析HTML和CSS标签的结果会有不一致,所以就会导致相同的代码在不同的浏览器会出现不同的效果
  • 服务端根据客户端请求头中的数据获取到客户端的浏览器类型,就可以根据不同的浏览器设置不同的代码来达到一致的效果(这就是我们常说的浏览器兼容问题)

3)请求体

存储请求参数

  • GET请求的请求参数在请求行中,故不需要设置请求体,但是有一个 queryString(查询字符串,紧跟在URL后面的)

    image-20240304205434112

  • post方式:有请求体,称之为 form data

  • json格式:有请求体,request payload

  • 请求体和请求头是有一个空行存在的,通过一个空行将这两部分分离开来


四、POST方式的请求协议

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

五、GET请求和POST请求的区别

区别方式GET请求POST请求
请求参数请求参数在请求行中。
例:/brand/findAll?name=OPPO&status=1
请求参数在请求体中
并且请求报文多了和请求体相关的配置[请求头]
请求参数长度请求参数长度有限制(浏览器不同限制也不同)请求参数长度没有限制
安全性安全性低。原因:请求参数暴露在浏览器地址栏中。安全性相对高,但效率比GET低

当我们提交了表单数据后,在谷歌浏览器里它是放在payload里面,在请求体里我们是看不见的

image-20231025223338266
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值