首页 > 其他分享 >前端基础之HTTP协议介绍

前端基础之HTTP协议介绍

时间:2024-03-18 19:33:27浏览次数:19  
标签:协议 HTTP 请求 前端 响应 服务器 服务端 客户端

HTTP 协议介绍

HTTP协议(HyperText Transfer Protocol,超文本传输协议),用来规定服务端和浏览器之间的数据交互的格式,也是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。

该协议构建于TCP/IP 协议族之上,属于应用层协议。主要用于传输与超文本相关的资源文件,如HTML网页,css,js,图片,视频,音频等。其中 HTTP1.0、HTTP1.1、HTTP2.0 均为 TCP 实现,HTTP3.0 基于 UDP 实现。现主流使用 HTTP1.0 和 HTTP3.0。

协议: 为了使数据在网络上从源头到达目的,网络通信的参与方必须遵循相同的规则,这套规则称为协议,它最终体现为在网络上传输的数据包的格式。

通俗点讲,协议就是要保证网络通信的双方,能够互相对接上号。就像是两个人传递纸条通过互相指定的暗号,如果发送天亮了,表示可以打游戏了等等。

注意: 当我们访问一些网页时,是显示通过 HTTPS 来进行通信的,并且当下大多数的网页都是通过 HTTPS 来进行通信的,因为 HTTPS 在 HTTP 的基础上做了一个加密的工作。

HTTP和HTTPS的区别

  • 直接构建于TCP协议之上
    • 没有进行加密传输数据的是HTTP协议
    • 默认通信端口是80端口
    • 常用端口有:3000,5000,8000,8080等。
  • 构建于TLS或SSL协议之上
    • 对数据使用SSL加壳加密传输数据的是HTTPS协议
    • 默认通信端口是443端口
    • 常用端口8443。

HTTP协议的四大特性

http协议具有无状态、无事务、所有请求必有所回应的特点。

(1)基于请求、响应

当我们在浏览器输入一个网址,此时浏览器就会给对应的服务器发送一个 HTTP 请求,对应的服务器收到这个请求之后,经过计算处理,就会返回一个 HTTP 响应。并且当我们访问一个网站时,可能涉及不止一次的 HTTP 请求和响应的交互过程。

基础术语:

客户端: 主动发起网络请求的一端
服务器: 被动接收网络请求的一端
请求: 客户端给服务器发送的数据
响应: 服务器给客户端返回的数据

HTTP 协议的重要特点: 一发一收,一问一答

image

注意: 网络编程中,除了一发一收之外,还有其它的模式

  • 多发一收:例如上传大文件
  • 一发多收:例如看直播时,搜索一个词条可以得到多个视频源
  • 多发多收:例如串流(steam link、moonlight 等等)

(2)基于TCP/IP作用于应用层之上的协议

  • 应用层协议:HTTP HTTPS FTP ...

(3)无状态

HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理

总结:见你千百遍,我始终待你如初恋。

  • 所谓的无状态是指http协议默认情况下,服务端不识别客户端的。

  • 在客户端多次发起请求到同一个服务器,服务端接收到客户端的请求在处理完成以后就会主动断开。

  • 所以对于客户端的每一次请求,对于服务端来说,都是一次新的客户端请求。

  • 也就是说,服务端无法区分多次请求的客户端是否同一个客户端

问题:比如,用户登录到一家购物网站,即使他跳转到该站的 其他页面后,也需要能继续保持登录状态。针对这个实例,网站为了能 够掌握是谁送出的请求,需要保存用户的状态。那怎样实现?

​ 使用一些专门记录用户状态的技术:cookie、session、token....

(4)短连接

  • 请求来一次我响应一次,之后我们两个就没有任何链接和关系了

补充:双方建立连接之后默认不断开,例:websocket(群聊功能,服务端主动给客户端发消息)

请求协议 和 HTTP响应协议

1、请求协议

(1) 请求数据格式

image

HTTP GET方法的请求格式

客户端给服务端发送消息应该遵循的数据格式

  • 请求首行(标识HTTP协议版本,当前请求方法)
  • 请求头(一大堆k:v键值对)
  • 换行不可省略(\r\n)
  • 请求体(并不是所有的请求方式都有,get没有post有,存放的是post请求提交的敏感数据)

image

(2)请求行

请求行由三部分组成:请求方法 、请求路径 、HTTP协议版本。

  • HTTP请求方法(HTTP Request Method):表示客户端希望对服务器指定资源进行哪一种类型的操作;
  • 请求路径:表示远程web服务器的一个可访问资源;
  • HTTP协议版本:表示客户端目前使用的HTTP协议版本,并期望服务端也采用同样版本的协议与客户端进行通信。

请求方法

  • “get” 请求 : 朝服务端索要数据

    • url?username=xiao&password=123

    • eg:输入网址获取对应的内容

  • “post” 请求 : 朝服务端提交数据

    • eg:用户登录,输入用户名和密码之后,提交到服务端后端做身份校验

常见请求方法如下:

请求方法 描述 报文中是否包含请求体
GET 表示客户端希望从服务器中获取下载资源信息 Flase
POST 表示客户端希望上传文件或通过请求在服务器创建资源信息。 True
PUT 表示客户端希望修改或更新服务器资源(表示修改全部资源信息,例如数据表的一整个记录) True
PATCH 表示客户端希望修改或更新服务器资源(表示修改部分资源信息,例如数据表的一个记录里面某个属性值) True
DELETE 表示客户端希望删除或废弃服务器资源 Flase
OPTION 表示客户端希望获取服务器所支持的请求方法列表 Flase
HEAD 表示客户端希望获取服务器支持的跨域地址列表 Flase

请求路径

  • 表示远程web服务器的一个可访问资源。
  • 一般就是代表的就是一个服务器的具体文件或数据表中的记录信息,或一个服务端里面的函数或方法。
/     表示根路径
/1.html   表示web服务器中web根目录下的1.html文件
/login    表示web服务器中的一个login方法或者login函数

http协议版本

  • 表示客户端目前使用的HTTP协议版本,并期望服务端也采用同样版本的协议与客户端进行通信。

  • http协议发展至今已经到了HTTP/3.0版本,目前主流的使用版本有:HTTP/1.0 、HTTP/1.1、 HTTP/3.0。

(3)请求头

  • HTTP请求头(Request Head)
    • 主要对客户端请求操作进行限制条件与补充说明。
  • 常见的标准HTTP请求头如下:
选项 描述
Host 指定客户端请求的服务器的域名和端口号。 www.baidu.com
Content-Type 告诉服务器,客户端请求携带的请求体数据的媒体类型信息(MIME类型)
User-Agent 告知服务器HTTP 客户端网络代理程序的版本信息,一般就是浏览器的版本信息。
Authorization 告知服务器客户端的Web认证信息。
Content-Length HTTP报文中请求体的大小,以字节为单位。
Referer 告诉服务器该网页是从哪个页面链接过来。也就是上一页页面的地址。
Accept 指定客户端能够接收并理解的媒体类型类型(MIME类型),用于表达希望服务端的返回资源格式。
Accept-Encoding 指定浏览器可以支持的web服务器返回内容压缩编码类型。 gzip, deflate, br
Pragma 指定服务端控制缓存行为。http/1.0以前的字段。 Pragme: no-cache
Cache-Control 指定服务端控制缓存行为。http/1.1以后的字段。 Cache-Control: no-cache
Upgrade 向服务器请求在当前http协议的基础上升级采用新的某种传输协议以便服务器进行转换 常用于http协议升级到ws协议。
Connection 指定本次http通信结束以后,是否关闭TCP网络连接。如果设置持久连接,则可以在一次会话中,可以使用同一个TCP连接,进行多次的HTTP通信,提高效率。 持久连接,Connection: keep-alive
非持久连接,Connection: close

注意:在http通信过程中,请求头也是可以自定义的,但是不能出现多字节编码字符,例如中文等。

(4)常见的MIME格式

类型 描述 别名
text/html HTML网页
application/json json文本 text/json
text/plain 纯文本,普通文本
text/xml xml文档
application/javascript js脚本 text/javascript
text/css css样式
image/png png格式图片
image/jpeg jpg格式图片
image/gif gif格式图片
application/x-gzip gzip格式压缩包
application/msword doc文档
application/vnd.openxmlformats-officedocument.wordprocessingml.document docx文档
application/vnd.ms-excel xls文档
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx文档
application/pdf pdf文档
audio/mpeg mp3音频
video/mp4 mp4视频

(5)URL

  • 统一资源定位符(网址)

2、HTTP响应

服务器收到了客户端发来的HTTP请求后,根据HTTP请求中的动作要求,服务端做出具体的动作,将结果回应给客户端,称为HTTP响应。

(1)响应数据格式

image

服务端给客户端发送消息应该遵循的数据格式

  • 响应首行(标识HTTP协议版本,响应状态码)
  • 响应头(一大堆k:v键值对)
  • 换行不可省略(\r\n)
  • 响应体(返回给浏览器展示给用户看的数据)

image

(2)响应行

HTTP响应行(HTTP Request Line),是HTTP响应报文的首行。由三部分组成:状态行、响应头、响应正文;

  • 状态行:包括协议版本Version、状态码Status Code、回应短语;
  • 响应头(server header):包括搭建服务器的软件,发送响应的时间,回应数据的格式等信息,包含HTTP状态码 (HTTP Status Code) ;
  • 响应正文:就是响应的具体数据。

HTTP协议版本

  • 响应报文的HTTP协议版本,与客户端的协议版本保持一致。
  • 例如:HTTP/1.0,HTTP/1.1。

响应状态码

  • 状态码(Status Code)
    • 用一串简单的数字来表示一些复杂的状态或者描述性信息
状态码类型 描述
1xx 服务端已经成功接受到了你的数据正在处理,你可以继续提交额外的数据。
2xx 服务端成功响应了你想要的数据。
3xx 重定向(当你在访问一个需要登录之后才能看的页面,你回发现自动跳转到登录页面,例如:学校校园网登录认证)
4xx 告诉客户端,本次请求有误,服务器无法处理。
5xx 告诉客户端,本次请求服务端在处理过程中服务端出错了。

ps:上述的状态码是HTTP协议规定的,其实到了公司之后每个公司还会自定定制自己状态码及提示信息

常见的HTTP状态码

状态码 响应信息 描述
101 Switching Protocols 服务器已经理解了客户端的请求,并将通过Upgrade消息头通知客户端采用升级协议来完成请求。
200 OK 请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是表示正常状态。常用于GET,PUT或PATCH
201 Created 请求已成功,请求的资源已经创建成功或更新完成,常用于POST,PUT或PATCH
204 No Content 请求已成功,但是没有任何内容返回。常用于DEELTE
301 Moved Permanently 永久重定向,表示当前客户端请求的资源地址已经永久发生改变。
302 Move Temporarily 临时重定向,表示当前客户端请求的资源地址还存在,但是访问客户端达不到访问资源的条件,所以暂时无法访问。
304 Not Modified 表示本次客户端请求的资源,并非来自服务端,而是本地缓存。如果web项目有做了客户端缓存,一般静态文件都会出现304
305 Use Proxy 被请求的资源必须通过指定的代理才能被访问。
307 Temporary Redirect 请求的资源临时从不同的URI 响应请求。
400 Bad Request 本次请求,报文语义有误或请求参数有误,当前请求无法被服务器理解。
401 Unauthorized 本次请求,需要需要用户验证,但用户并没有提供认证。
403 Forbidden 服务器已经理解请求,但是拒绝执行它。一般是因为没有权限导致的。
404 Not Found 请求失败,请求所希望得到的资源未被在服务器上发现,请求路径不存在。
405 Method Not Allowed 请求行中指定的请求方法不能被用于请求相应的资源。使用了错误的请求方法。
500 Internal Server Error 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。就是服务端的代码报错了。
502 Bad Gateway 网关宕机,作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。一般就是大量访问请求导致服务器瘫痪或宕机了。
503 Service Unavailable 网关过载,由于临时的服务器维护或者过载,服务器当前无法处理请求。
504 Gateway Timeout 网关超时,作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器或者辅助服务器(例如DNS)收到响应。
507 Insufficient Storage 服务器无法存储完成请求所必须的内容。

(3)响应头

  • HTTP响应头(Response Head),主要是服务器返回的内容进行补充说明,并提供下一次请求的一些辅助信息。
选项 描述
Content-Type 告知客户端,响应数据的MIME类型
Content-Length 告知客户端,响应数据的字节大小
Content-Encoding 告知客户端,响应数据采用的压缩格式
Server 告知客户端,响应服务器的名字或类型
Date 告知客户端,响应请求的时间
Location 告知客户端,实际要请求的资源地址(用于301或302进行页面跳转)
Cache-Control 告知客户端,响应数据的缓存机制
Refresh 告知客户端,要定时刷新的时间间隔
Connection 告知客户端,本次HTTP通信完成以后是否要保持TCP连接。
Transfer-Encoding 告知客户端,数据是以分块方式响应回来的。
Content-Disposition 告知客户端,以下载方式打数据的,格式:Content-Disposition: attachment;filename=文件名
Expires 告知客户端,响应数据的过期事件,-1表示马上过期,客户端不要缓存当前响应数据。
Retry-After 告知客户端,应该在多久之后再次发送请求。常见于服务端限流,或503中。
Access-Control-Allow-Origin 指定客户端通过哪些域名下的脚本可以访问服务器资源。
Access-Control-Allow-Methods 指定客户端通过哪些HTTP请求方法访问服务端资源。
Access-Control-Allow-Headers 指定客户端请求服务器的报文中,允许包含哪些请求头。

3、get 与 post 的区别

  1. 都可以携带额外的参数 :
    GET 提交的数据会放在URL之后,以"?"分割URL和传输数据,参数之间以"&"相连
    POST方法是把提交的数据放在HTTP包的请求体(Body)中.
  2. 提交的数据大小限制 :
    浏览器对URL长度有限制, 所以GET提交的数据大小有限制
    POST方法没有数据大小限制
  3. 数据的安全性 :
    GET方式提交数据, 会带来安全问题, 比如一个登录页面, 通过GET方式提交数据时, 用户名和密码将出现在URL上
    如果页面可以被缓存或者其他人可以访问这台机器, 就可以从历史记录获得该用户的账号和密码

标签:协议,HTTP,请求,前端,响应,服务器,服务端,客户端
From: https://www.cnblogs.com/xiao01/p/18081232

相关文章

  • 什么是HTTP? HTTP 和 HTTPS 的区别?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助一、HTTPHTTP (HyperTextTransferProtocol),即超文本运输协议,是实现网络通信的一种规范在计算机和网络世界有,存在不同的协议,如广播协议、寻址协议、路由协议等等......而HTTP是一个传输协议,即将数据由A传到B或......
  • 前端面试题合集附答案(问题来源BOOS直聘)
    1,vue的双向绑定原理是什么?里面的关键点在哪里?    1,数据劫持    vue通过Object.defineProperty()方法劫持数据对象属性上的getter和setter,从而实现数据的监听和更新    2,观察者模式    vue采用观察者模式实现对数据的监听和更新,当数据发生变......
  • 前端基础之前端知识引入
    本篇要研究的内容为前端的开发。我们知道存储于服务器端的统称为后端技术,而前端技术是指通过浏览器到用户端计算机的统称。因此,前端的所有知识都和“浏览器”紧密相关,在本篇文章中,我们将通过介绍浏览器的诞生原因及发展历史来详细地阐述浏览器的本质。软件开发架构C/S,B/S架构......
  • Python实现HTTPS网站证书过期监控及更新
    Python实现HTTPS网站证书过期监控及更新当前HTTP逐渐被大众所抛弃,HTTPS正在成为互联网上的主流。前段时间我们维护的一个HTTPS证书即将过期,由于多云环境比较复杂,团队小伙伴在替换更新证书的过程中出现疏漏,导致有一个域名证书没有及时更新,影响了系统可用性,为了杜绝这种问题再次发......
  • 关于前端的学习
    目录前言:1.初识HTML: 1.1超文本:1.2标记语言:2.关于html的基本框架:3.HTML基本文字标签:3.1.h标题标签:3.3文本内容:3.4换行的和分割的:        3.5特殊文字标签:3.5.1表面上看着三对的结果呈现都是一样的:3.5.2但是其背后的效果其实是不一样的:3.6转......
  • 传输层协议
    tcp/ip模型应用层传输层网络层接口层tcp/ip协议族tcp(传输控制协议):面向连接,在传递数据之前,会测试主机的联通性,如果通才会传输真实数据udp(用户数据报协议):无连接,不会测试主机的联通性,直接传递真实数据面向连接网络协议:是指通信双方之间在进行通信之前要先建立连......
  • 【HTTP完全注解】揭开Authorization神秘的面纱
    AuthorizationAuthorization是HTTP提供一个用于权限控制和认证的通用框架,可能有不少小伙伴会感到疑惑"Cookie不就可以做权限控制和认证吗?",确实如此!Cookie确实是在单个系统内认证用户身份、保持会话状态的有效方式,但如果涉及到多个系统、多个域名或多个应用程序之间认证......
  • 【HTTP完全注解】Web常见攻击与防护手段
    Web常见攻击与防护前段时间深入的学习了下HTTP的CSP策略,就想着找几个网站练练手,看看哪个倒霉蛋要中招。说巧不巧打开掘金一看,嘻嘻正是我想要的,于是乎就诞生了一个有意思的攻击示例:攻击掘金示例(大家放心访问不造成任何安全风险)。相信大家看源码之后恍然大悟,并且不屑一顾,我......
  • [web-front-end] Web前端(1)Vue项目目录结构 [转]
    0序因近期接触开源项目,需温故、了解一下基于Vue框架等前端工程的目录结构。本文属于笔记类博文,非原创,主要阅读对象:博主本人。1Vue项目目录结构1.1目录结构Vue项目的目录结构通常是由VueCLI(Vue命令行界面)生成的默认结构,它提供了一个基本的项目框架。以下是一个典型......
  • golang fasthttp服务端的简单实现
    使用示例:packagemainimport("github.com/buaazp/fasthttprouter""github.com/valyala/fasthttp""log")funcmain(){//创建路由r:=fasthttprouter.New()r.GET("/",Index)iferr:=fasthttp.Listen......