【应用层】网络基础 -- HTTP协议

这篇具有很好参考价值的文章主要介绍了【应用层】网络基础 -- HTTP协议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

再谈协议

协议是一种 “约定”. socket api的接口,在读写数据时,都是按 “字符串” 的方式来发送接收的(tcp是以字节流的方式发送的,这里便与表述使用"字符串")

如果我们要传输一些"结构化的数据" 怎么办呢?
【应用层】网络基础 -- HTTP协议,Linux网络基础,网络,linux,http,服务器

那么我们(TCP)在收到一个报文的时候,如何保证你收到了一个完整的报文?
【应用层】网络基础 -- HTTP协议,Linux网络基础,网络,linux,http,服务器
tcp是面向字节流的,所以要明确报文和报文的边界

我们调用的所有的发送函数,根本就不是把数据发送到网络中,发送函数,本质是拷贝函数tcp发送的本质,其实就是将数据从c的发送缓冲区,拷贝到s的接受缓冲区:tcp是全双工的!


HTTP协议

虽然我们说, 应用层协议是我们程序猿自己定的.
但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)
就是其中之一.

认识URL

平时我们俗称的 “网址” 其实就是说的 URL
【应用层】网络基础 -- HTTP协议,Linux网络基础,网络,linux,http,服务器
【应用层】网络基础 -- HTTP协议,Linux网络基础,网络,linux,http,服务器

一切你在网络中看到的都是资源,这些资源文件在你服务器的磁盘上,拿到这些文件就需要Linux系统的路径结构,http就是通过http协议从服务器上拿下来对应的"资源"。因为文件资源种类特别多,http都能搞定,所以:http协议为超文本传输协议

不要认为在https的网址上没有看见端口号就真的没有端口号,只是一般而言端口号采用默认的443

urlencode和urldecode

/ ? :等这样的字符,已经被url当做特殊意义理解了,因此这些字符不能随意出现。

比如,某个参数中需要带有这些特殊字符,就必须先对特殊字符进行转义。
转义的规则如下:
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式
【应用层】网络基础 -- HTTP协议,Linux网络基础,网络,linux,http,服务器

“+” 被转义成了 “%2B”,urldecode就是urlencode的逆过程;

HTTP协议格式

HTTP请求:
【应用层】网络基础 -- HTTP协议,Linux网络基础,网络,linux,http,服务器
【应用层】网络基础 -- HTTP协议,Linux网络基础,网络,linux,http,服务器

  • 首行: [方法] + [url] + [版本]
  • Header:请求的属性,冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
  • Body:空行后面的内容都是Body。Body允许为空字符串。如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度;

细节:
1.请求和响应怎么保证应用层完整读取完毕了?

  • 我可以读取完整的一行
  • while(读取完整的一行) 一 所有的请求行+请求报头全部读完 一 直到空行
  • 我们能保证把报头读完,报头有一个属性: Content-Length: XXX正文长度
  • 解析出来内容长度,在根据内容长度,读取正文即可

2.请求和响应是怎么做到序列化和反序列化的?
http自己实现的,第一行+请求/响应报头,只要按照\r\n将字符串1->n即可。正文不用做

HTTP响应:

【应用层】网络基础 -- HTTP协议,Linux网络基础,网络,linux,http,服务器

  • 首行:[版本号] + [状态码] + [状态码解释]
  • Header:请求的属性,冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
  • Body:空行后面的内容都是Body。Body允许为空字符串。如果Body存在,则在Header中会有一个
  • Content-Length属性来标识Body的长度;如果服务器返回了一个html页面,那么html页面内容就是在body中。

HTTP的方法

【应用层】网络基础 -- HTTP协议,Linux网络基础,网络,linux,http,服务器

其中最常用的就是GET方法和POST方法.

【应用层】网络基础 -- HTTP协议,Linux网络基础,网络,linux,http,服务器
我们进行数据提交的时候,本质前端要通过form表单提交的,浏览器会自动将form表单中的内容转换成为GET/POST方法请求

  • GET方法:
    【应用层】网络基础 -- HTTP协议,Linux网络基础,网络,linux,http,服务器
  • POST方法:
    【应用层】网络基础 -- HTTP协议,Linux网络基础,网络,linux,http,服务器
    区别:
  • GET通过url传递参数,具体: http://ip:port/Xxx/YY?name=value&name2=value2
  • POST提交参数通过http请求的正文提交参数!
  • Post方法通过正文提交参数,所以一般用户看不到,私密性更好,私密性!=安全性,GET方法不私密
  • 无论是GET和POST方法,都不安全!要谈安全,必须加密!
  • 通过URL传递参数,注定了不能太大,但是POST方法,通过正文,正文可以很大,甚至可以是其他的东西

HTTP的状态码

【应用层】网络基础 -- HTTP协议,Linux网络基础,网络,linux,http,服务器
最常见的状态码, 比如 200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(Bad Gateway)

什么是重定向?就是server告诉client,由客户端完成
【应用层】网络基础 -- HTTP协议,Linux网络基础,网络,linux,http,服务器

  • 临时重定向:比如自动跳转到广告商
  • 永久重定向:比如一个公司以前用的域名更换了,但是用户不知道,所以就给旧域名一个重定向到新的域名,来防止用户找不到新地址。

HTTP常见Header

  • Content-Type: 数据类型(text/html等)
  • Content-Length: Body的长度
  • Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
  • User-Agent: 声明用户的操作系统和浏览器版本信息;
  • referer: 当前页面是从哪个页面跳转过来的;
  • location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
  • Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;

长连接:
其实一张我们看到的网页,实际上可能由多种元素构成,所以一张完整的网页需要多次http请求

【应用层】网络基础 -- HTTP协议,Linux网络基础,网络,linux,http,服务器
http网页中可能包含多个元素,http是基于tcp的,如果频繁发起http请求,那么就会有tcp面向链接的频繁创建链接的问题

长连接:建立好一条链接,获取一大份资源的时候,通过同一条链接完成
建立长连接需要client和server都要支持,才能建立,显示Connection: keep-alive表示支持长连接,显示Connection: close表示短链接

HTTP周边会话保持

HTTP无状态协议,是指协议对于交互性场景没有记忆能力。

比如点击一个纯的html网页,请求获取服务器的html文件资源时,每次http请求都会返回同样的信息,因为这个是没有交互的,每一次的请求都是相互独立的。在无交互场景中上面那样,当然也不会有太大的问题。但是对于涉及到动态交互的场景,就显得很尴尬了

会话保持严格意义不是http天然具备的,是后面使用发现需要的,http协议是无状态的。但是用户需要。因为用户查看新的网页是常规操作,如果发生网页跳转,那么新的页面也就无法识别是哪一个用户了,为了让用户一经登陆,可以在整个网站,按照自己的身份进行随意访问

【应用层】网络基础 -- HTTP协议,Linux网络基础,网络,linux,http,服务器

cookie技术:

  • cookie文件:比如你登陆了一个网站,关闭浏览器,结束掉这个进程,你再次登陆这个浏览器的网站,你不需要重新登陆,这就是文件级别的。
  • cookie内存:跟上面例子相反,你没有关闭浏览器,你关闭这个网站重新打开不需要登陆,但是你关闭浏览器以后,再次打开这个浏览器的网站就需要重新登陆。(使用文件还是内存可以自行配置)

【应用层】网络基础 -- HTTP协议,Linux网络基础,网络,linux,http,服务器

【应用层】网络基础 -- HTTP协议,Linux网络基础,网络,linux,http,服务器

配合策略:比如异地登陆提醒等。
比如你个人的信息被黑客盗取走问题可能不是特别严重,但是如果企业的信息被盗取,问题就上升了几个档次。


如有错误或者不清楚的地方欢迎私信或者评论指出🚀🚀文章来源地址https://www.toymoban.com/news/detail-669233.html

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

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

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

相关文章

  • Linux网络:应用层之HTTP协议

    我们程序员写的一个个解决实际问题,满足日常需求的网络程序,都是在应用层。 协议是一种约定。网络协议是计算机网络中通信双方都必须遵守的一组约定。 在网络通信中,都是以 “字符串” 的方式来发送和接收数据的。 如果要发送和接收一些结构化的数据,就需要序

    2023年04月26日
    浏览(53)
  • 【计算机网络】应用层——HTTP 协议(一)

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】 本专栏旨在分享学习计算机网络的一点学习心得,欢迎大家在评论区交流讨论💌 HTTP协议全称超文本传输协议,通过浏览器和服务器进行数据交互,进行

    2024年01月23日
    浏览(52)
  • 【Linux网络】网络应用层的 http 和 https协议

    在之前学习序列化和反序列化的时候,认识到主机之间传输结构数据的时候,最好是通过某种约定将结构数据序列化成一串字符串,接收方再通过反序列化将字符串转换成结构数据。以上说的这种约定,其实可以看成是用户层通信的一种协议,是由程序猿自己定的。   实际

    2024年02月02日
    浏览(63)
  • 「网络编程」应用层协议_ HTTP协议学习及深入理解

    「前言」文章内容大致是应用层协议的HTTP协议讲解。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「句子分享」 俗话说,开弓没有回头箭,唯有箭折、箭落、箭中靶子三种结果而已。 ——江晓英《苏东坡:最是人间真情味》

    2024年02月13日
    浏览(47)
  • 计算机网络 - 应用层http协议 - http报文格式介绍(1)

    本篇认识和理解应用层中的http协议,了解抓包工具并进行使用,认识请求报文与响应报文,了解报文中基本键值对意思例如:Set-Cookie, 状态码等,如有错误,请在评论区指正,让我们一起交流,共同进步! 本文开始 ① 根据输入的url,在域名系统DNS中进行解析获取对应的服务

    2024年02月12日
    浏览(58)
  • 计算机网络:应用层(二) Web与http协议

    我最近开了几个专栏,诚信互三! ==== ||| 《算法专栏》::刷题教程来自网站《代码随想录》。||| ==== ||| 《C++专栏》::记录我学习C++的经历,看完你一定会有收获。||| ==== ||| 《Linux专栏》::记录我学习Linux的经历,看完你一定会有收获。||| ==== ||| 《C#专栏》::记录我复

    2024年02月03日
    浏览(51)
  • 学习网络编程No.8【应用层协议之HTTP】

    北京时间:2023/10/9/13:03,一晃好多天过去了,9月14号的文章终于在昨天发出去了,也是许久没有更文了,国庆放假期间由于各种原因,在王者峡谷和铲子世界遨游的不亦乐乎,有待改善!目前面临挑战艰巨,问题很多,在这个空窗期我们需要有一股强大的支撑作为动力,毕竟

    2024年02月08日
    浏览(48)
  • 【网络】应用层——协议定制 | 序列化和反序列化 | 初识http

    🐱作者:一只大喵咪1201 🐱专栏:《网络》 🔥格言: 你只管努力,剩下的交给时间! 在前面本喵已经带大家见识过了 scoket 网络通信的样子,现在开始深入学习网络的原理,本喵采取的策略是从顶层往底层讲解,也就是从应用层到数据链路层的顺序。 我们知道,协议就是

    2024年02月15日
    浏览(47)
  • 【计网笔记06】计算机网络之应用层协议(SMTP协议、POP3协议、HTTP协议)、DNS域名系统、电子邮件系统

    这篇文章,主要介绍计算机网络之应用层协议(SMTP协议、POP3协议、HTTP协议)、DNS域名系统、电子邮件系统。 目录 一、计算机网络之应用层 1.1、应用层介绍 1.2、网络应用模型

    2024年02月08日
    浏览(58)
  • 应用层协议——http

    虽然我们说,应用层协议是我们自己定的,但实际上,已经有一些现成的,又非常好用的应用层协议,供我们直接参考使用。HTTP(超文本传输协议)就是其中之一。 平时我们俗称的 “网址” 其实就是说的 URL: 这里的登录信息现在已经隐藏起来,改成例如手机登录、微信登录

    2024年02月15日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包