浏览器网络请求——HTTP详解

这篇具有很好参考价值的文章主要介绍了浏览器网络请求——HTTP详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


HTTP 是什么

HTTP(Hyper Text Transfer Protocol): 超文本传输协议,是用层协议,用于从万维网服务器传输超文本到本地浏览器的传送协议。

HTTP 发展历程

截至目前,http 经历了原始版本、http1.0、 http1.1、 http2.0 几个版本,新版本每次出现都针对上一个版本的不足进行加强

HTTP 1.0

1.0 版本有个很大的缺点:TCP连接不可复用,每进行一次 HTTP 通信,都需要进行一次TCP 连接、HTTP 通信、断开 TCP 连接流程,如下图,两次 HTTP 通信就要进行两个完整的流程

浏览器网络请求——HTTP详解

HTTP 1.1

为了解决1.0版本的TCP连接不可复用问题,在1.1版本中,提出了 长连接机制, 在一个 TCP 连接里可以进行多次 HTTP 通信,如下图。

浏览器网络请求——HTTP详解

但是1.1 版本和 1.0 都有个很大的问题:队头阻塞,由于服务的响应是串行的,前一个请求若未响应,会阻塞后一个响应的返回

HTTP 2.0

HTTP2.0 对性能做出了极大的改进主要包括:二进制分帧、头部压缩、服务端推送、多路复用

  • 二进制分帧

在 HTTP1.x 中,数据以文本的格式进行传输,解析起来比较低效。HTTP2.0 在传输消息时,首先会将消息划分为更小的消息和帧,然后再对其采取二进制格式的编码,确保高效的解析。

  • 头部压缩

HTTP2.0 中,客户端和服务器分别会维护一份相同的静态字典,这个字典用来存储常见的头部名称,以及常见的头部名称和值的组合。同时还会维护一份相同的动态字典,这个字典可以实时被更新。第一次相互通信过后,后面的请求只需要发送与前面请求之间头部不同的地方,其它的头部信息都可以从字典中获取。大大节省了网络开销。

  • 服务端推送

在 HTTP1.x 中,如果用户请求了资源 A,结果发现自己如果要用资源 A,那么必须依赖资源 B,这时他不得不再消耗一个请求。而 HTTP2.0 中,允许服务器主动向客户端 push 资源。也就是说当服务器发现客户端请求了资源 A,却忘了请求资源 A 依赖的资源 B 时,它可以主动将资源 B 顺手推送给客户端。

  • 多路复用

在 HTTP 2.0 中,一次连接建立后,只要这个连接还在,那么客户端就可以在一个链接中批量发起多个请求。同时,请求与请求间属于并行,不会互相阻塞。由此,彻底规避了队头阻塞问题。

常用方法

HTTP 协议常用的请求方法有 GET、POST、PUT、DELETE

  • GET :仅用作数据的读取,请求参数以query的形式拼接到url
  • POST :创建新资源或修改现有资源,请求参数以body的形式传递
  • PUT :PUT 在能力上和 POST 类似,区别在于 PUT 的 URI 指向是具体的某个资源,而不能指向资源集合。
  • DELETE:用于删除指定的资源

头部信息 (Headers)

http 在发出请求或者响应时,都会携带有header,其中存放了一些必要的信息,下面列举常用的头部信息。缓存相关的头将在后续文章介绍。 更多头部信息可以参考:httq请求头/响应头

请求头(request Headers)

  • Accept: 浏览器可接受的数据格式
  • Accept-encoding: 浏览器可接受的压缩算法,如gzip(服务器压缩,客户端解压,让传输的资源变小,速度更快)
  • Accept-Language: 浏览器可接收的语言,如zh-CN
  • Connect:keep-alive 一次TCP连接重复使用
  • Cookie同域每次请求资源都会把cookie带上
  • Host请求的域名
  • User-agent:简称UA,浏览器信息,标识是什么浏览器,是什么系统,供给服务器分析
  • Content-type:发送数据的格式(多存在于post请求中),如一般json数据为application/json ,图片或文件为multipart/form-data

响应头(response Headers)

  • Content-type:返回数据的格式,如application/json(json),text/html(html),text/css(css)、text/javascript(javascript)image/png

  • Content-length:返回数据的大小,多少字节

  • Content-Encoding返回数据的压缩算法,如gzip

  • Set-Cookie服务端需要通过该字段来修改浏览器中的cookie

状态码

1xx:成功接收了请求,但是处理过程还没结束,需要客户端再抛出一个请求才能完成整个过程。

2xx:表示成功接收请求、并且已经处理完毕。

  • 200 OK,标识客户端的请求已经被服务器正确处理

3xx:表示服务器虽然也处理了你的请求,但客户端还需要进一步的工作,才可以完成请求。

  • 301:永久性重定向,表示资源已被分配了新的 URL

  • 302:临时性重定向,表示资源临时被分配了新的 URL

  • 304,表示服务器校验后发现资源没有改变,提醒客户端直接走缓存来取资源

4xx:客户端错误,意味着请求出错了。

  • 400:请求报文存在语法错误

  • 403:对请求资源的访问被服务器拒绝(多半是没权限)

  • 404,资源不存在,可能是你的路径不对,也可能是这个资源在服务端已经被下掉了

5xx:服务器错误,意味着服务器内部的程序处理有问题。

  • 500:服务器在接受请求后进行处理的过程中,发生了内部错误

  • 502:网关错误

  • 504:网关超时

HTTP无状态理解:cookie与session

HTTP无状态协议,是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,简单的说:前一刻发出的 A 请求,与下一刻发出的 B 请求, B 是完全感知不到 A 请求过的,两个请求间毫无关系。

如果想维持状态信息,需要使用cookiesession

  • cooike

客户端第一次向服务器端发送请求时是没有cookie的,请求后服务器端会在cookie中存入一些数据。下次在访问相同的服务器就会带上cookie中的数据。

  • session

实际上是一个对象,存储在服务器端的内存中,在session对象中也可以存储多条数据,每一条数据都有一个sessionid作为唯一标识。

  • 以登录逻辑为例

1、 客户输入账号密码进行登录,服务器端进行验证,验证成功则生成sessionId,并且在session对象中存储当前用户信息。

2、 服务器端将sessionId写入客户端cookie中,当客户端下次访问服务器端时cookie会被自动发送给服务器端。

3、 服务器端在 cookie 中拿到 sessionId 然后在服务器端的 session 对象中查找 sessionId 进行验证,验证成功说明用户是登陆状态,则可以为其响应只有在登陆状态才能响应的数据。

总结

  • HTTP 是什么

  • HTTP 发展历程

  • 常用方法

  • 头部信息 (Headers)

  • 状态码

  • HTTP无状态理解:cookie与session文章来源地址https://www.toymoban.com/news/detail-465700.html

到了这里,关于浏览器网络请求——HTTP详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 谷歌浏览器(chrome)允许跨域/允许https网站中发送http请求

    直接上方法了 第一步:对谷歌浏览器图标点击鼠标右键,打开属性面板 第二步:在下图位置,添加下列代码 原来启动浏览器的地址: C:UsersxxxxxAppDataLocalGoogleChromeApplicationchrome.exe 增加的代码(注意开头是有个空格的,要把两部分用空格隔开的): --args --disable-web-secu

    2024年02月02日
    浏览(33)
  • 谷歌浏览器通过network模拟HTTP中的GET/POST请求获取response

    1、F12打开network选中需要模拟的方法Copy-Copy as fetch 2、通过AI帮你进行转换一下调用格式  原代码 通过文心一言转换(有条件的可以用ChatGPT) 问题:帮我转换为js 转换之后的代码  3、拿到response返回结果data值 比如我这边想获取到toPhoneShield的值 老规矩通过文心一言提问(有条件的

    2024年01月23日
    浏览(46)
  • Http 响应头 Transfer-Encoding : chunked 导致 浏览器客户端请求错误问题

    生产环境服务器规划如下 服务器 类型 网络环境 cal.com nginx 外网 192.168.7.15:9200 tomcat 内网 192.168.7.16:9200 tomcat 内网 sdd.com nginx 内网 192.168.7.15:9100 tomcat 内网 192.168.7.16:9100 tomcat 内网 192.168.7.15和192.168.7.16是做个负载均衡。目前的需求是用户访问外网的cal.com 返回 内网 192.168.7.15:9

    2024年02月15日
    浏览(34)
  • Chrome浏览器设置header请求 响应头 使用 Chrome ModHeader插件,添加/修改/删除HTTP请求标头和响应标头

    ModHeader插件支持添加/修改/删除请求标头和响应标头,并可以启用基于URL /资源类型的标题修改。 添加扩展程序,并且开启使用 在浏览器右上角的扩展程序中,确认ModHeader是否已经适用 点击modHeader,开启 在窗口的+号上,可以添加其他属性。进行修改,删除,置空 修改heade

    2024年02月11日
    浏览(43)
  • Chrome浏览器中访问http会自动跳转https下,导致请求和文件不能正常访问

    网上查了很多解决方案,例如清楚缓存等等其他方法,都不能解决该问题 例如: 地址栏输入: chrome://net-internals/#hsts 找到底部 Delete domain security policies 一栏,输入想处理的域名,点击 delete 。 搞定了,再次访问http域名不再自动跳转https了。 点击地址栏旁边的锁 打开网站设置

    2024年02月02日
    浏览(33)
  • 详解禁止浏览器 http自动跳转成https

    在Web开发中,禁止浏览器在HTTP请求中自动跳转到HTTPS是通过设置HTTP响应头中的Strict-Transport-Security(HSTS)字段来实现的。HSTS是一个安全策略,它告诉浏览器在一定的时间内强制使用HTTPS连接来加载网站,从而提高网站的安全性。 以下是通过设置HSTS头来禁止浏览器在HTTP请求中

    2024年02月04日
    浏览(47)
  • 浏览器工作原理与实践--HTTP/2:如何提升网络速度

    上一篇文章我们聊了HTTP/1.1的发展史,虽然HTTP/1.1已经做了大量的优化,但是依然存在很多性能瓶颈,依然不能满足我们日益变化的新需求,所以就有了我们今天要聊的HTTP/2。 本文我们依然从需求的层面来谈,先分析HTTP/1.1存在哪些问题,然后再来分析HTTP/2是如何解决这些问题

    2024年04月16日
    浏览(31)
  • js 在浏览器窗口关闭后还可以不中断网络请求

    有个需求,我们需要在用户发送数据过程中,如果用户关闭了网页( 包括整个浏览器关闭 ),不要中断数据传递 目前XMLHttpRequest对象是不支持的 http服务器 为了测试效果我们用nodejs写了个http服务器代码 文件名为httpServer.js如下,执行 node httpServer.js 就可以跑起来,支持get,pos

    2024年02月15日
    浏览(39)
  • 什么是浏览器缓存(browser caching)?如何使用HTTP头来控制缓存?

    前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而又亲切的学习平台。在这个

    2024年02月09日
    浏览(42)
  • JS-27 前端数据请求方式;HTTP协议的解析;JavaScript XHR、Fetch的数据请求与响应函数;前端文件上传XHR、Fetch;安装浏览器插件FeHelper

    早期的网页都是通过后端渲染来完成的,即服务器端渲染(SSR,server side render): 客户端发出请求 - 服务端接收请求并返回相应HTML文档 - 页面刷新,客户端加载新的HTML文档; 服务器端渲染的缺点: 当用户点击页面中的某个按钮向服务器发送请求时,页面本质上只是一些数

    2024年02月16日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包