【JavaWeb】详细讲解 HTTP 协议

文章目录

一、HTTP简介

1.1 概念

HTTP:

超文本传输协议,规定了浏览器与服务器之间数据传输的规则。请求/响应数据时,都必须按照固定的格式进行数据传输。

我们可以打开浏览器,点击F12打开开发者工具,点击Network来查看http协议的数据传输格式

浏览器向服务器进行请求

服务器向浏览器进行响应

1.2 特点

  • 基于TCP协议: 面向连接,安全
  • 基于请求-响应模型: 一次请求对应一次响应(先请求后响应)
  • HTTP协议是无状态协议: 对于数据没有记忆能力。每次请求-响应都是独立的

无状态:

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

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

二、协议

请求协议:浏览器将数据以请求格式发送到服务器

  • 包括:请求行、请求头 、请求体

响应协议:服务器将数据以响应格式返回给浏览器

  • 包括:响应行 、响应头 、响应体

2.1 HTTP-请求协议

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

请求方式 请求说明
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)GET方式

  1. 请求行:

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

  2. 请求头 :

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

常见的HTTP请求头有:

  1. Host: 表示请求的主机名
  2. User-Agent: 浏览器版本。
    例如:Chrome浏览器的标识类似Mozilla/5.0 ...Chrome/79 ,IE浏览器的标识类似Mozilla/5.0
    (Windows NT ...)like Gecko
  3. Accept:表示浏览器能接收的资源类型,如text/*,image/*或者*/*表示所有;
  4. Accept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页;
  5. Accept-Encoding:表示浏览器可以支持的压缩类型,例如gzip, deflate等。
  6. Content-Type:请求主体的数据类型
  7. Content-Length:数据主体的大小(单位:字节)
  1. 请求体:
    存储请求参数

GET请求的请求参数在请求行中,故不需要设置请求体

(2)POST方式

  1. 请求行(红色部分):包含请求方式、资源路径、协议/版本
    ○ 请求方式:POST
    ○ 资源路径:/brand
    ○ 协议/版本:HTTP/1.1
  2. 请求头(黄色部分)
  3. 请求体(绿色部分):存储请求参数

请求体和请求头之间是有一个空行隔开(作用:用于标记请求头结束)

(3)GET和POST的区别:

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

2.2 HTTP-响应协议

(1)格式

  1. 响应行 :
    响应数据的第一行。响应行由协议及版本、响应状态码、状态码描述组成
    ○ 协议/版本:HTTP/1.1
    ○ 响应状态码:200
    ○ 状态码描述:OK
  2. 响应头 :
    响应数据的第二行开始,格式为key:value形式。

因为http是个无状态的协议,所以可以在请求头和响应头中设置一些信息和想要执行的动作。

常见的HTTP响应头有:

  1. Content-Type:表示该响应内容的类型,例如text/html,image/jpeg ;
  2. Content-Length:表示该响应内容的长度(字节数);
  3. Content-Encoding:表示该响应压缩算法,例如gzip ;
  4. Cache-Control:指示客户端应如何缓存,例如max-age=300表示可以最多缓存300秒 ;
  5. Set-Cookie: 告诉浏览器为当前页面所在的域设置cookie ;
  1. 响应体
    响应数据的最后一部分,存储响应的数据

响应体和响应头之间有一个空行隔开(作用:用于标记响应头结束)

(2)响应状态码

状态码分类 说明
1xx 响应中 --- 临时状态码。表示请求已经接受,告诉客户端应该继续请求或者如果已经完成则忽略
2xx 成功 --- 表示请求已经被成功接收,处理已完成
3xx 重定向 --- 重定向到其它地方,让客户端再发起一个请求以完成整个处理
4xx 客户端错误 --- 处理发生错误,责任在客户端,如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等
5xx 服务器端错误 --- 处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持等
状态码 英文描述 解释
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

相关推荐
倔强的小石头_11 分钟前
【C语言指南】函数指针深度解析
java·c语言·算法
kangkang-4 小时前
PC端基于SpringBoot架构控制无人机(三):系统架构设计
java·架构·无人机
界面开发小八哥6 小时前
「Java EE开发指南」如何用MyEclipse创建一个WEB项目?(三)
java·ide·java-ee·myeclipse
idolyXyz6 小时前
[java: Cleaner]-一文述之
java
一碗谦谦粉6 小时前
Maven 依赖调解的两大原则
java·maven
netyeaxi7 小时前
Java:使用spring-boot + mybatis如何打印SQL日志?
java·spring·mybatis
收破烂的小熊猫~7 小时前
《Java修仙传:从凡胎到码帝》第四章:设计模式破万法
java·开发语言·设计模式
猴哥源码7 小时前
基于Java+SpringBoot的动物领养平台
java·spring boot
老任与码7 小时前
Spring AI Alibaba(1)——基本使用
java·人工智能·后端·springaialibaba
小兵张健7 小时前
武汉拿下 23k offer 经历
java·面试·ai编程