【计算机网络】理解应用层协议HTTP

目录

  • HTTP协议
  • 认识URL
  • HTTP协议的请求
    • 如果我们想获得请求报文的完整内容,怎么办?
  • HTTP协议的响应
  • HTTP的方法
    • GETvsPOST
  • HTTP的状态码
  • HTTP常见Header
  • HTTP版本
  • 实现一个简单的HTTP服务器

HTTP协议

HTTP协议是一种超文本传输协议,它定义了客户端与服务端之间如何进行数据传输进而通信的协议,HTTP是一种可以用来解析和传输超文本的协议,

认识URL

随便找一个网址我们看一下对应的URL的格式是怎样的
在这里插入图片描述
对于协议方案名,我们这里学习的是http,但我们平常使用的都是https,但两者大同小异,https使用起来更安全。
对于域名,浏览器后台会自动给转换为ip地址,找到相应服务器,加上后面的带层次的文件路径,就能唯一标识网络上唯一一台主机上的唯一的文件资源,即互联网上的唯一文件资源。
域名后面其实还有端口号,但端口号跟协议名称是强关联的,我们不需要看到,后台会自动拼接。
对于?后面的一些字符串我们不需要知道,这些都是编码格式。

HTTP协议的请求

在这里插入图片描述

  • 首行(请求行):方法 + url + HTTP版本
  • Header(请求报头):请求的属性,每组属性是":"分隔的kv键值对,每组属性用\r\n分开,遇到空行表示Header部分结束。
  • Body行(请求正文):Body后面跟的都是Body,Body允许为空字符串,如果Body存在,则在Header中会有一个Content-Length 的属性来标识Body的长度。

如果我们想获得请求报文的完整内容,怎么办?

假如我们从网络中截获一段网络报文,我们如何知道这串报文是一个完整的请求报文呢?
我们可以按照换行符为分隔符,如果拿到空行,就说明我们已经拿到了请求报头部分,再从请求报头中拿到Content-Length属性就能知道Body数据的大小了,从而就能拿到完整的报文。
下面是一个截获的报文
在这里插入图片描述
上面就是一个GET请求的报文。

HTTP协议的响应

在这里插入图片描述

  • 首行(状态行):版本号 + 状态码 + 状态码描述
  • Header(响应报头):回应的属性,每组属性是":"分隔的kv键值对,每组属性用\r\n分开,遇到空行表示Header部分结束。
  • Body(响应正文): 空行后面的内容都是 Body. Body 允许为空字符串. 如果 Body 存在, 则在Header 中会有一个 Content-Length 属性来标识 Body 的长度; 如果服务器返回了一个 html 页面, 那么 html 页面内容就是在 body 中.

应答响应格式
在这里插入图片描述

HTTP的方法

HTTP的方法都是请求时使用,HTTP的方法众多
在这里插入图片描述
其中GET和POST是重点理解的两个方法,其他方法不常用,了解即可。

GETvsPOST

我们在进行登陆时,使用的账号密码就可以作为参数进行传递。

  1. GET一般用来获取静态资源(例如html),也可以通过URL来向服务器传递参数。
  2. POST可以通过http request的正文来进行参数传递。
  3. URL传递参数,参数的体量一定不大,正文可以很大。
  4. POST方法比GET方法传参更私密,但都不安全!所以需要对http的参数部分进行加密,所以就有了https。

HTTP的状态码

在这里插入图片描述
最常见的状态码, 比如 200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(Bad Gateway)
在这里插入图片描述
在这里插入图片描述
理解重定向:

  • 永久重定向:即状态码为301,表示请求的资源已经被永久的移动到新的位置,在这种情况下,服务器会在响应中添加一个Location头部,用于指定资源的新位置,这个Location包含了新的URL地址,以后浏览器会自动重定向到指定的地址。
  • 临时重定向:即状态码为302,表示请求的资源被暂时移动到新的位置,同样的,服务器会在响应中添加一个Location头部,用于暂时指定资源的新位置,浏览器会使用新的URL来重定向指定的地址,但不会缓存这个重定向。
  • 总之:无论是 HTTP 301 还是 HTTP 302 重定向, 都需要依赖 Location 选项来指定资源的新位置。 这个 Location 选项是一个标准的 HTTP 响应头部, 用于告诉浏览器应该将请求重定向到哪个新的 URL 地址。

HTTP常见Header

  • Content-Type: 数据类型(text/html 等)
  • Content-Length: Body 的长度
  • Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
  • User-Agent: 声明用户的操作系统和浏览器版本信息;
  • referer: 当前页面是从哪个页面跳转过来的;
  • Location: 搭配 3xx 状态码使用, 告诉客户端接下来要去哪里访问;
  • Cookie: 用于在客户端存储少量信息(比如存储账号密码,使得后续再次进入无需登录). 通常用于实现会话(session)的功能;
  • connection: 用于控制和管理客户端与服务器之间的连接状态。
  • Connection: keep-alive:表示希望保持连接以复用 TCP 连接(长连接)
  • Connection: close:表示请求/响应完成后,应该关闭 TCP 连接(短连接)

HTTP/1.1: 在 HTTP/1.1 协议中, 默认使用持久连接。 当客户端和服务器都不明确指定关闭连接时, 连接将保持打开状态, 以便后续的请求和响应可以复用同一个连接,而HTTP/1.0: 在 HTTP/1.0 协议中, 默认连接是非持久的。 如果希望在 HTTP/1.0上实现持久连接, 需要在请求头中显式设置 Connection: keep-alive。

HTTP版本

  • HTTP/0.9:仅支持GET请求,无请求与响应的报头,仅支持纯文本传输。
  • HTTP/1.0:引入POST和HEAD方法,请求和响应头信息,支持多种数据格式,支持缓存、状态码、字符集等。
  • HTTP/1.1:在1.0基础上增加了长连接、管道化、缓存控制。
  • HTTP/2.0:多路复用、二进制帧格式、头部压缩、服务器推送等功能的引入。
  • HTTP/3.0:使用 QUIC 协议替代 TCP 协议, 基于 UDP 构建的多路复用传输协议,减少了 TCP 三次握手及 TLS 握手时间, 提高了连接建立速度,解决了 TCP 中的线头阻塞问题, 提高了数据传输效率。

实现一个简单的HTTP服务器

我的gitee仓库点击这里有源码

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka 3.0.0集群部署教程

1、集群规划 主机名 ip地址 node.id process.roles kafka1 192.168.0.29 1 broker,controller Kafka2 192.168.0.30 2 broker,controller Kafka3 192.168.0.31 3 broker,controller 将kafka包上传以上节点/app目录下 mkdir /app 解压kafka包 tar -zxvf kafka_…

java之斗地主部分功能的实现

今天我们要实现斗地主中发牌和洗牌这两个功能,该如何去实现呢? 1.创建牌类:52张牌每一张牌包含两个属性:牌的大小和牌的花色。 故我们优先创建一个牌的类(Card):包含大小和花色。 public class Card { //单张牌的大小及类型/…

伊犁-linux 硬盘添加,分区,格式化

主要是linux 下操作硬盘分区,格式化 这样1个sata 盘就添加成功了 !  继续添加三块 sata1 hda sata hdb sata hdc sata hdd scsi sda 作为启动盘 进行操作系统的引导 如果scsi 往下调整 先敲enter 在用- 号往下 如果是往上调整敲…

【IDEA】使用IDEA连接MySQL数据库并自动生成MySQL的建表SQL语句

前言: 在软件开发过程中,数据库的设计与实现是至关重要的一环。IntelliJ IDEA作为一款强大的集成开发环境(IDE),提供了丰富的数据库工具,使得连接MySQL数据库并自动生成建表SQL语句变得简单快捷。本文将详细…

《python语言程序设计》2018版第8章18题几何circle2D类(上部)

一、利用第7章的内容来做前5个点 第一章之1--从各种角度来测量第一章之2--各种结果第二章之1--建立了针对比对点在圆内的几段第二章之2--利用建立的对比代码,得出的第2点位置 第一章之1–从各种角度来测量 class Circle2D:def __init__(self, x, y, radius):self._…

Stable Diffusion绘画 | ControlNet应用-qrcode 二维码控制器:艺术二维码来啦

qrcode 二维码控制器,是一款专用于生成艺术二维码的控制器, 需要单独下载,下载后,将文件放置在:SD安装目录\extensions\sd-webui-controlnet\models 实操 开启第一个 ControlNet,上传一个二维码图片&…

【24华为杯数模研赛赛题思路已出】国赛E题第二套思路丨附参考代码丨免费分享

2024年数模研赛E题解题思路 在高速公路建设中,通常会设置应急车道,以便应对救援和医疗需求。应急车道一般不允许占用,但在某些情况下,如监测到某路段即将拥堵且没有事故时,合理使用应急车道可以帮助降低车流密度&…

对不起,放弃了wiki.js转向了obsidian

wifi.js可以满足我的以下要求: 支持文档在线编辑支持浏览器编辑支持二进制文件上传和下载支持历史记录和回滚支持用户账号分权支持数据和nas同步支持markdown的预览模式 但是wiki.js不能满足如下: markdown编辑无法做到图片复制粘贴无法查看pdf无法独立于文档上传…

影刀RPA实战:网页爬虫之药品数据

1 实战目标 这次给大家带来的实战示例是采集中国医药信息平台上的药品数据,主要获取药品名称,介绍,药品类型,处方类型,医保类型,参考价格,药品成分,性状,适应病症&#…

SAP B1 Web Client MS Teams App集成连载四

过程/Procedure: 1.通过点击选项卡旁边的下拉箭头,可以重新配置、重命名和移除现有选项卡。 You can reconfigure, rename and remove an existing tab by clicking the drop down arrow alongside the tab. 要重新配置选项卡,请选择“设置”…

HTML-DOM模型

1.DOM模型 window对象下的document对象就是DOM模型。 DOM描绘了一个层次化的节点树,每一个节点就是一个html标签,而且每一个节点也是一个DOM对象。 2.操作DOM 2.1.获取DOM对象常用方法 获取DOM对象的常用方法有如下几种: getElementById(…

无线麦克风哪个好,麦克风哪个品牌音质最好,领夹麦克风推荐

​无线领夹麦克风作为直播、视频录制等场景必备的设备之一,用起来很方便,功能多样且易于操作,在音频设备领域占据着重要地位。但当前市场乱象较为严重,有许多商家纷纷打起价格战,忽视了产品质量,造成耐用性…

李沐 多层感知机【动手学深度学习v2】

学习XOR 同或操作:相同为1,不同为0。 先进入蓝色和黄色分类器,最后进入灰色分类器来得到最终的结果。 单隐藏层 输入为x1~x4,加入隐藏层后,x1~x4需要先进入h1~h5,该隐藏层再作为输入,连接下一层…

【24华为杯数模研赛赛题思路已出】国赛E题思路丨附参考代码丨免费分享

2024年华为杯研赛E题解题思路 E题 高速公路应急车道紧急启用模型 问题1 1. 某路段(长度约5000m,行车道2应急车道1)上有四个视频观测点(见示意图1)。请基于该路段四个视频数据解决如下问题: (…

任天堂发言人:不会透露起诉《幻兽帕鲁》开发商细节

任天堂在昨天突然宣布将起诉《幻兽帕鲁》开发商 Pocketpair,除了引起许多玩家不满外,更多的是所有人的疑惑:因为实际上大家内心里觉得任天堂出手是理所当然的,但是为什么是在游戏发布数月后才选择起诉?此次诉讼是“专利…

解决引入ethereumjs-wallet报错Uncaught ReferenceError: process is defined

最近在学习web3.0开发DApp的视频教程,遇到用助记词生成秘钥对报错Uncaught ReferenceError: process is defined。具体报错如下截图: 在网上搜了好几个小时都没找到解决方法。突然在学习的视频论坛找到有哥们说是引入的包不兼容问题导致报这个错。我试了…

集合框架(一):Collection集合的遍历方式

一.迭代器遍历Collection集合 package com.njau.d2_collection_traverse;import java.util.ArrayList; import java.util.Collection; import java.util.Iterator;/*** 目标:Collection集合的遍历方式一:使用迭代器Iterator对象遍历Collection集合*/ pub…

嵌入式常用硬件电路设计及分析 — 通信篇

目录 一、简介 二、RS232通信 1、硬件电路设计 2、硬件电路设计分析 (1)常规电路 (2)EMC设计使用注意事项 3、DB9接头定义 三、RS485通信 1、硬件电路设计 2、硬件电路设计分析 (1)自动收发电路…

【C++】C++入门概念(一)

C关键字 C总计63个关键字,C语言32个关键字 ps:下面我们只是看一下C有多少关键字,不对关键字进行具体的讲解。后面我们学到以后再详细讨论。 命名空间 在C/C中,变量、函数和后面要学到的类都是大量存在的,这些变量、…

神州数码社招校招入职北森测评笔试:语言理解、图形推理、材料计算

神州数码入职测评使用的是北森CATA-能力倾向计算机自适应测评 国内唯一被国际计算机自适应测验协会(IACAT)收录产品,基于企业大量招聘下对认知能力考察的需求,通过最新的测评技术手段,快速高效,评价候选人的认知能力,平均作答时…