前端必须知道的http知识

news/2024/5/10 20:29:05/文章来源:https://blog.csdn.net/ks795820/article/details/129136072

HTTP协议也叫超文本传输协议,是一种基于TCP/IP的应用层通信协议,这个协议详细规定了浏览器和万维网服务器之间互相通信的规则(报文,请求报文、响应报文)

 

请求方式

HTTP设定了八种发送请求方式,这八种方法没有任何本质上的区别,只是让请求,更加有语义化而已。

八种方法分别为: OPTIONS/HEAD/GET/POST/PUT/DELETE/TRACE/CONNECT,最常用的是get和post

get请求:从指定的资源获取数据;一般用于单纯获取非敏感数据时候;get请求没有请求体

post请求:向指定的资源提交要被处理的数据;一般用于请求的结果有持续性的副作用且传送相对敏感数据时;

常见的get请求有:

①浏览器地址栏输入网址时(即浏览器请求页面时,且无法手动更改)

②请求外部资源的html标签,如<img>/<a>/<link>/<script>,且无法手动更改

③form表单提交时,若没有指明方式,默认使用get

④发送ajax请求时,默认使用get

请求报文

get请求报文分析:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Cookie: oschina_new_user=false; user_locale=zh-CN; 
Host: gitee.com
Referer: https://gitee.com/login
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
DNT: 1

 Accept:表示浏览器能够接收资源的类型及优先级,q表示优先级,不写优先级的话默认是1,优先级最高;

Accept-Encoding:表示浏览器能够接收服务器的压缩文件类型;

Accept-Language: 表示浏览器能够支持的语言种类及优先级;

Connection: 若为keep-alive表示支持长连接;

Host:表示发送请求的目标主机;

Referer: 表示该请求是从哪里发出去的,可以用于防盗链、广告计费

Cookie: 表示Cookie;

User-Agent: 表示用户代理,之前用于判断用户的浏览器品牌及版本,现在没啥用;

Pragma: 表示不走缓存

Cache-Control: 表示不走缓存(强缓存)

Upgrade-Insecure-Requests: 表示可以使用更为安全的https协议

DNT: 表示是否可被追踪,0表示可以被追踪,1表示禁止跟踪

post报文中也有上述类似key,还包含:

Content-length: 表示返回数据的长度;

Origin:表示精简版的Referer,亦可用于防盗链、广告计费

Content-Type:表示发送数据的类型

响应报文

get响应和post响应的响应头一样(可能会包含如下关键字),但是get请求没有响应报文体

access-control-allow-origin: *
access-control-expose-headers: *
content-length: 0
date: Tue, 21 Feb 2023 02:13:00 GMT
eagleid: 2a30782016769455799488802e
server: Tengine
timing-allow-origin: *
via: cache33.l2cm9-6[50,0], kunlun12.cn350[78,0]
x-log-requestid: 63F428ABCEBF10C607123897
x-log-time: 1676945580

常见的响应状态码:

200 ok 表示请求成功(最理想状态)

201 Created 表示已创建,即成功请求并创建了新的资源

301 表示重定向,是指被请求的旧资源永久移除了(不可以访问了),将会跳转到一个新资源,搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的地址;

302 表示重定向,是指被请求的旧资源还在(依然可以访问),但是会临时跳转到一个新资源,搜索引擎会抓取新的内容而保存旧的网址;

304 表示请求资源重定向到缓存中(即命中了协商缓存)

401 Unauthorized   表示未授权/请求要求用户的身份认证

404 Not Found   表示服务器无法根据客户端的请求找到资源,一般是前端的锅~

500 Internal Server Error  表示服务器内部错误,无法完成请求;

502 表示连接服务器失败(服务器在处理一个请求的时候,或许需要其他的服务器配合,但是联系不上其他的服务器)

请求参数

请求参数分为三种:query参数(查询字符串参数)、params参数以及请求体参数;

  • query参数(查询字符串参数)

query参数包含在请求地址(url)中,key-value组合之间用&连接,如name=team&age=19(这种方式称为urlencoded编码方式)

  • params参数

params参数也包含在请求地址中,路由路径中用:key做占位符,形如/team/18

  • 请求体参数

请求体参数包含在请求报文中的请求体中,常用的有两种格式:

①urlencoded格式

如name=team&age=18,对应请求头中

Content-Type: application/x-www-form-urlencoded

②json格式

如{"name": "tom", "age": 12},对应请求头中

Content-Type: application/json

补充:

一般通过form表单发送post请求时,默认使用请求体参数,编码格式为urlencoded编码;

经典面试题:

从用户输入URL按下回车,一直到用户能看到界面,期间都经历了什么?

①DNS解析

依次按照浏览器DNS缓存、本机DNS缓存、路由器DNS缓存、运营商DNS缓存进行域名解析,若缓存中没有对应的域名,则去DNS根服务器中寻找;

②通过三次握手进行TCP连接

通俗讲解:

第一次握手:由浏览器发给服务器,我想和你说话,你能听见么?

第二次握手:由服务器发给浏览器,我能听得见,你说吧!

第三次握手:由浏览器发给服务器,好,那我就开始说话!

③发送请求

④得到响应

⑤浏览器解析html

    预解析:将所有外部的资源,发请求出去;

    解析html,生成DOM树;

    解析CSS,生成CSS树;

    合并成一个render树;

    js是否操作了DOM或样式,若有,则进行重绘重排,若没有则不作处理;

    最终展示界面

⑥利用四次挥手断开TCP连接

第一次挥手:由浏览器发给服务器,我的东西接受完了,你断开吧;

第二次挥手:由服务器发给浏览器,我还有一些东西没接收完,等我接收好告诉你;或是由服务器发给浏览器,我的东西接收完了,但是你还得等一会,我要验证数据的完整性,验证完了告诉你;

第三次挥手:由服务器发给浏览器,我接收完了,你断开吧;

第四次挥手:又浏览器发给服务器,好的,我断开了;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_261037.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

APP测试中ios和androis的区别,有哪些注意点

目录 一、运行机制不同 二、对app内存消耗处理方式不同 三、后台制度不同 四、最高权限指令不同 五、推送机制不同 六、抓取方式不同 七、灰度发版机制不同 八、审核机制不同 总结感谢每一个认真阅读我文章的人&#xff01;&#xff01;&#xff01; 重点&#xff1a;…

独立搭建 handle server

本节主要介绍,如何搭建一个与 GHR隔离的 handle sever,不与外界有任何连通。 下载文件 访问地址下载最新版:http://www.handle.net/download_hnr.html 这里以 9.3.0 版本作为讲解 解压服务端,解压客户端 # 解压 tar -xzvf handle-9.3.0-distribution.tar.gz# 到目录下 …

剑指 Offer 27. 二叉树的镜像

剑指 Offer 27. 二叉树的镜像 难度&#xff1a;easy\color{Green}{easy}easy 题目描述 请完成一个函数&#xff0c;输入一个二叉树&#xff0c;该函数输出它的镜像。 例如输入&#xff1a; 镜像输出&#xff1a; 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,…

性能测试的二八原则

性能测试二八原则&#xff0c;响应时间2/5/8原则 所谓响应时间的“2-5-8原则”&#xff0c;简单说&#xff0c;就是 当用户能够在2秒以内得到响应时&#xff0c;会感觉系统的响应很快; 当用户在2-5秒之间得到响应时&#xff0c;会感觉系统的响应速度还可以; 当用户在5-8秒以内得…

智能小车PWM调速原理

电机驱动电路智能小车电机的驱动芯片采用L293D。L293D是一款单片集成的高电压、高电流、4通道电机驱动&#xff0c;设计用于连接标准DTL或TTL逻辑电平&#xff0c;驱动电感负载&#xff08;诸如继电线圈、DC和步进电机&#xff09;和开关功率晶体管等等。L293D有4个通道&#x…

SpringBoot2核心技术-核心功能【05、Web开发】

目录 1、SpringMVC自动配置概览 2、简单功能分析 2.1、静态资源访问 1、静态资源目录 2、静态资源访问前缀 2.2、欢迎页支持 2.3、自定义 Favicon 2.4、静态资源配置原理 3、请求参数处理 0、请求映射 1、rest使用与原理 2、请求映射原理 1、普通参数与基本注解 …

Vulnhub靶场----1、DC-1

文章目录一、环境搭建二、渗透流程三、思路总结一、环境搭建 靶场下载地址&#xff1a;https://download.vulnhub.com/dc/DC-1.zip Kali地址&#xff1a;192.168.144.148 DC-1靶机地址&#xff1a;192.168.144.149 二、渗透流程 端口扫描&#xff1a;nmap -A -T4 192.168.144.1…

基于 U-Net 网络的遥感图像语义分割 完整代码+论文

一、研究目的U-Net 是一种由全卷积神经网络启发的对称结构网络&#xff0c;在医疗影像分割领域取得了很好的效果。 此次研究尝试使用 U-Net 网络在对多光谱遥感影像数据集上进行训练&#xff0c;尝试使用卷积神经网络自动分割出建筑&#xff0c;希望能够得到一种自动分割遥感影…

基于Java+SpringBoot+Vue+Uniapp前后端分离健身预约系统设计与实现

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战✌ 博主作品&#xff1a;《微服务实战》专栏是本人的实战经验总结&#xff0c;《Spring家族及…

数字经济讨论题

自2001年以来&#xff0c;Alphabet&#xff08;Google&#xff09;已进行了200多次并购。下面列出了并购年份。选择Alphabet进行的三笔并购讨论这些并购是如何使Alphabet拥有新的或增强的现有业务领域重要的是考虑何时进行所选择的收购。谷歌已经从一家提供互联网搜索引擎的公司…

【VUE3.0_CSS功能】

CSS功能组件css作用域深度选择器&#xff08;标签名空格:deep(标签名)&#xff09;插槽选择器&#xff08;:soltted(标签名)&#xff09;全局选择器&#xff08;:global(类名)&#xff09;动态CSS&#xff08;v-bind&#xff09;useCSSModule拓展知识&#xff1a;deep的写法组件…

拒绝背锅:测试项目中的风险管理一定要知道

测试经理除了要管理产品线的质量保障和日常部门事务工作外&#xff0c;另一项比较重要的就是测试项目全流程的管理。 今天不聊整体的测试项目流程如何开展&#xff0c;而是想聊一聊在同行中比较高频出现的一个字眼&#xff1a;风险管理。 什么是风险管理 引用百度上的解释&a…

亿级高并发电商项目-- 实战篇 --万达商城项目 十二(编写用户服务、发送短信功能、发送注册验证码功能、手机号验证码登录功能、单点登录等模块)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小童&#xff0c;Java开发工程师&#xff0c;CSDN博客博主&#xff0c;Java领域新星创作者 &#x1f4d5;系列专栏&#xff1a;前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 &#x1f4…

ES6的迭代器与迭代协议Symbol.iterator

前言ES6新增了两个协议&#xff1a;可迭代协议&#xff1a;对象必须具有Symbol.Iterator属性&#xff0c;属性值为一个函数&#xff0c;当这个对象被迭代时&#xff0c;就会调用该函数&#xff0c;返回一个迭代器。迭代器协议&#xff1a;描述了迭代器对象的具体规则。迭代器迭…

数据分析-深度学习 NLP Day2关键词提取案例

训练一个关键词提取算法需要以下几个步骤&#xff1a;1&#xff09;加载已有的文档数据集&#xff1b;2&#xff09;加载停用词表&#xff1b;3&#xff09;对数据集中的文档进行分词&#xff1b;4&#xff09;根据停用词表&#xff0c;过滤干扰词&#xff1b;5&#xff09;根据…

推荐5款免费且无广告的软件,助你提升效率

有时候一些小工具&#xff0c;能给你带来一些意想不到的效果&#xff0c;我们来看看下面这5款工具&#xff0c;你又用过其中几款呢&#xff1f; 1.文件大小查看——Folder Size Folder Size是一个可以查看文件大小的软件&#xff0c;使用它可以一键查看文件夹里的文件大小。你…

容器技术概述

容器化应用程序 软件应用程序通常依赖于运行时环境提供的其他库、配置文件或服务。软件应用程序的传统运行环境是物理主机或虚拟机&#xff0c;应用程序依赖项作为主机的一部分安装。 例如&#xff0c;考虑一个 Python 应用程序&#xff0c;它需要访问实现 TLS 协议的公共共享…

Leaf说明

什么是Leafleaf是叶子的意思我们使用的Leaf是美团公司开源的一个分布式序列号(id)生成系统我们可以在Github网站上下载项目直接使用为什么需要Leaf上面的图片中是一个实际开发中常见的读写分离的数据库部署格式专门进行数据更新(写)的有两个数据库节点它们同时新增数据可能产生…

性能测试学习和性能瓶颈分析路线

很多企业招聘都只写性能测试&#xff0c;会使用LR&#xff0c;jmeter工具。其实会使用jmeter和LR进行性能测试还只是性能测试的第一步&#xff0c;离真正的性能测试工程师还很远&#xff0c;笔者也还在路上 .。 性能测试&#xff0c;都是要求测试系统性能&#xff0c;系统自然…

【nas折腾篇】抉择吧,是入门还是放弃

2018年公司一位女同事问群晖的nas是否值得买。我一脸懵&#xff0c;以前给公司买云服务有采购nas盘&#xff0c;直接mount挂到服务器上当存储&#xff0c;但对于单独的nas服务器没有什么概念。一晃几年过去了&#xff0c;陆续刷到些nas服务的视频&#xff0c;周边朋友用nas的也…