当前位置: 首页 > news >正文

HTTP介绍

HTTP

1、简介

HTTP概念:HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。

  • 数据传输的规则指的是请求数据和响应数据需要按照指定的格式进行传输。

  • 如果想知道具体的格式,可以打开浏览器,点击F12打开开发者工具,点击Network来查看某一次请求的请求数据和响应数据具体的格式内容,如下图所示:

注意:在浏览器中如果看不到上述内容,需要清除浏览器的浏览数据。chrome浏览器可以使用ctrl+shift+Del进行清除。

所以学习HTTP主要就是学习请求和响应数据的具体格式内容。

2、HTTP协议特点

HTTP协议有它自己的一些特点,分别是:

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

  1. 基于请求-响应模型的:一次请求对应一次响应。请求和响应是一一对应关系

  1. HTTP协议是无状态协议:对于事物处理没有记忆能力。每次请求和响应都是独立的

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

这种特性有优点也有缺点:

  1. 缺点:多次请求间不能共享数据

  1. 优点:速度快

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

  1. 在网站购物中,加入购物车和去购物车结算是两次请求,

  1. HTTP协议的无状态特性,加入购物车请求响应结束后,并未记录加入购物车是何商品

  1. 发起去购物车结算的请求后,因为无法获取哪些商品加入了购物车,会导致此次请求无法正确展示数据

其实是Java早已考虑到这个问题,并提出了使用会话技术(Cookie、Session)来解决这个问题。

刚才提到HTTP协议是规定了请求和响应数据的格式,下面介绍具体格式:

3、请求数据格式

3.1、格式介绍

请求数据总共分为三部分内容,分别是请求行、请求头、请求体:

  1. 请求行:HTTP请求中的第一行数据,请求行包含三块内容,

分别是GET[请求方式] /[请求URL路径] HTTP/1.1[HTTP协议及版本]

请求方式有七种,最常用的是GET和POST

  1. 请求头:第二行开始,格式为key: value形式

请求头中会包含若干个属性,常见的HTTP请求头有:

  1. Host: 表示请求的主机名

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

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

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

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

这些数据有什么用处?

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

  • 不同浏览器解析HTML和CSS标签的结果会有不一致,所以就会导致相同的代码在不同的浏览器会出现不同的效果

  • 服务端根据客户端请求头中的数据获取到客户端的浏览器类型,就可以根据不同的浏览器设置不同的代码来达到一致的效果。这就是我们常说的浏览器兼容问题

  1. 请求体: POST请求的最后一部分,存储请求参数

如上图红线框的内容就是请求体的内容,请求体和请求头之间是有一个空行隔开。此时浏览器发送的是POST请求,为什么不能使用GET呢?这时就需要回顾GET和POST两个请求之间的区别了:

  • GET请求请求参数在请求行中,没有请求体,POST请求请求参数在请求体中

  • GET请求请求参数大小有限制,POST没有

3.2、GET&POST实例演示

查看另外一篇笔记中的"4.2、<from>":

此处为语雀内容卡片,点击链接查看:https://www.yuque.com/shiran-jo7vb/yyfgyx/frpqsesrwuzxupnf

小结

  1. 请求数据中包含三部分内容,分别是请求行、请求头和请求体

  1. POST请求数据在请求体中,GET请求数据在请求行上

4、响应数据格式

4.1、格式介绍

响应数据总共分为三部分内容,分别是响应行、响应头、响应体

  1. 响应行:响应数据的第一行,响应行包含三块内容,分别是 HTTP/1.1[HTTP协议及版本] 200[响应状态码] ok[状态码的描述]

  1. 响应头:第二行开始,格式为key:value形式

响应头中会包含若干个属性,常见的HTTP响应头有:

  • Content-Type:表示该响应内容的类型,例如text/html,image/jpeg;

  • Content-Length:表示该响应内容的长度(字节数);

  • Content-Encoding:表示该响应压缩算法,例如gzip;

  • Cache-Control:指示客户端应如何缓存,例如max-age=300表示可以最多缓存300秒

  1. 响应体: 最后一部分。存放响应数据
    下图中.<htlm>....</html>这部分内容就是响应体,它和响应头之间有一个空行隔开。

4.2、响应状态码

4.2.1、状态码大类

状态码分类

说明

1xx

响应中——临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果它已经完成则忽略它

2xx

成功——表示请求已经被成功接收,处理已完成

3xx

重定向——重定向到其它地方:它让客户端再发起一个请求以完成整个处理。

4xx

客户端错误——处理发生错误,责任在客户端,如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等

5xx

服务器端错误——处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持等

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

4.2.2、常见的响应状态码

状态码

英文描述

解释

200

OK

客户端请求成功,即处理成功,这是我们最想看到的状态码

302

Found

指示所请求的资源已移动到由Location响应头给定的 URL,浏览器会自动重新访问到这个页面

304

Not Modified

告诉客户端,你请求的资源至上次取得后,服务端并未更改,直接用本地缓存。隐式重定向。

400

Bad Request

客户端请求有语法错误,不能被服务器所理解

403

Forbidden

服务器收到请求,但是拒绝提供服务,比如:没有权限访问相关资源

404

Not Found

请求资源不存在,一般是URL输入有误,或者网站资源被删除了

428

Precondition Required

服务器要求有条件的请求,告诉客户端要想访问该资源,必须携带特定的请求头

429

Too Many

Requests

太多请求,可以限制客户端请求某个资源的数量,配合 Retry-After(多长时间后可以请求)响应头一起使用

431

Request Header

Fields Too Large

请求头太大,服务器不愿意处理请求,因为它的头部字段太大。请求可以在减少请求头域的大小后重新提交。

405

Method Not

Allowed

请求方式有误,比如应该用GET请求方式的资源,用了POST

500

Internal Server

Error

服务器发生不可预期的错误。服务器出异常了,赶紧看日志去吧

503

Service

Unavailable

服务器尚未准备好处理请求,服务器刚刚启动,还未初始化好

511

Network

Authentication

Required

客户端需要进行身份验证才能获得网络访问权限

关于响应状态码,先主要认识三个状态码,其余的等后期用到了再去掌握:

  • 200:ok 客户端请求成功

  • 404:Not Found 请求资源不存在

  • 500:Internal Server Error 服务端发生不可预期的错误

http://www.lryc.cn/news/35421.html

相关文章:

  • 10 卷积神经网络及python实现
  • 【立体匹配论文阅读】AANet: Adaptive Aggregation Network for Efficient Stereo Matching
  • 服务器防入侵攻击,安全加固措施
  • 解读:“出境标准合同”与“出境安全评估”要点与异同
  • python带你成功复刻热门手机游戏——飞翔的小鸟
  • YOLOv8初体验:检测、跟踪、模型部署
  • Vue 监听(watch handler)
  • 前端代码质量-圈复杂度原理和实践
  • 汽车微控制器芯片F280039CPZRQ1、F280039CSPM、F280039CSPN规格参数
  • 禾观科技三面经历
  • Spring Boot 实现接口幂等性的 4 种方案
  • Android Studio开发APP
  • Spring之实例化Bean _ @Resource和@Autowired实现原理(3)
  • 华为HCIE学习之Openstack Cinder组件(cinder对接glusterfs)
  • 关于Go语言的底层,你想知道的都在这里!
  • 每日一问-ChapGPT-20230308-关于技术与思考的问题
  • Oracle表分区的创建、新增、拆分
  • 如何快速升级Java 8 到Java11
  • 内卷把同事逼成了“扫地僧”,把Git上所有面试题整理成足足24W字Java八股文
  • 【计组】主存储器有关知识梳理
  • QT对象树
  • 什么是B+树
  • 【Unity游戏破解】外挂原理分析
  • windows 关闭指定端口进程
  • 虚拟化系列教程:创建 KVM 虚机的几种方式
  • MacBook安装Golang Oracle数据库驱动程序
  • Elasticsearch 核心技术(七):IK 中文分词器的安装、使用、自定义字典
  • 【LeetCode】剑指 Offer(19)
  • 吐血整理,web自动化测试,POM模式搭建自动化测试框架(超级详细)
  • 【数据库原理复习】索引 视图 sql语句