计算机网络 网络原理之Http

news2024/11/26 2:39:21

目录

  • 1 前言
  • 2 什么是http的一次交互?
  • 3 理解“协议”二字
  • 4 认识URL
    • 4.1 简介
    • 4.2 URL的编码和解码(urlencode和urldecode)
  • 5 抓包工具 fiddler
  • 6 http和https的区别
  • 7 http 头
  • 8 HTTP 状态码
  • 9 常见的 Http 服务器

1 前言

为什么要了解Http原理呢?因为http原理是学习web的基础、Servlet的前置条件。前端仅是用来展现页面的,而后端是用来存储信息接口的,用来提供数据的;而前后端之所以能够进行交流,依靠的就是http协议来实现通讯的。
Http的全称叫做超文本传输协议(里面的重点二字是传输,刚巧web的重点也是传输)。

2 什么是http的一次交互?

web网站分为前端(Request) 和后端服务器(这里举例为Java Servlet)两个角色。
前端的每一次交互都是一个请求(Request) ,一次交互相当于一次信息的触发;服务器接收到前端请求的参数之后,做相应的业务处理;处理结束后服务器端返回一个响应(response)给前端,前端页面拿到这个响应之后通过浏览器进行解析再展现给用户,这样就实现了一次交互,这也就是http的一个交互。
在这里插入图片描述

3 理解“协议”二字

了解完Http的交互(也就是传输)之后,再谈 “协议”,那如何理解协议呢?其实它就相当于我们买东西的说明书,"协议"它的本质就是一个规范。
其实这个协议我们看到的是什么东西呢?我们看到的是在浏览器上输入了一个网址(url),这个url进行了一次交互。

4 认识URL

4.1 简介

平时我们俗称的 “网址” 其实就是所说的 URL。例如下面这个网址:
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&srcqid=8313749030690810143&tn=50000021_hao_pg&wd=111&oq=111&rsv_pq=97913337000f5d72&rsv_t=7443eNPUCxB%2B61kl8lgTRtVEUTSnsfPeZzLk5qgvQOYoIHFWQcBx%2BUWiXsxqW8NvlbO%2BM%2Bc0&rqlang=cn&rsv_dl=tb&rsv_enter=0&rsv_sug3=1&rsv_sug1=1&rsv_sug7=100&rsv_btype=t&prefixsug=111&rsp=0&rsv_sug4=674 中的https是协议(https协议是基于http协议的);www.baidu.com是域名(为什么会有域名呢?其实我们最早访问的时候使用的是ip,但是因为ip的可记性太差了,总记不住,于是就起了一个域名。其实访问的本质:我们在访问服务器的时候,它还是拿ip去找的。因为其实我们每个服务器都有一个域名,在访问地址的时候,首先它会通过域名服务器找到这个域名所对应的ip,然后通过这个ip才能去访问这台服务器),但其实这里是域名+端口号,只不过这里的端口号使用的是https协议的默认端口号(443),所以把它省略了,就相当于你把这块修改为https://www.baidu.com:443/s?ie=utf-8&f=8&rsv_bp=1&srcqid=8313749030690810143&tn=50000021_hao_pg&wd=111&oq=111&rsv_pq=97913337000f5d72&rsv_t=7443eNPUCxB%2B61kl8lgTRtVEUTSnsfPeZzLk5qgvQOYoIHFWQcBx%2BUWiXsxqW8NvlbO%2BM%2Bc0&rqlang=cn&rsv_dl=tb&rsv_enter=0&rsv_sug3=1&rsv_sug1=1&rsv_sug7=100&rsv_btype=t&prefixsug=111&rsp=0&rsv_sug4=674 ,它的作用也是一样的,同时我们需要知道http协议的默认端口号是80;s是目录(或目录+文件名,也就是目录地址/页面地址);?问号之后的统一称之为参数(参数的作用就是和服务器进行交互的一个响应,通过这个参数网页才知道你要干啥,比如你要搜索的内容是123呀),这个参数是以?开始的键值对(键值对就是key=value的形式),键值对是以&进行分隔的。
总结: http(或https) : //服务器地址(ip、域名):端口号(默认端口号可以省略)/目录地址/页面地址?参数(参数格式:以?开始的多个参数使用&进行分隔,每个键值对使用=进行分隔的)#片段修饰符(用来直接定位页面元素的,可有可没有,大部分情况是没有的)

4.2 URL的编码和解码(urlencode和urldecode)

  1. URL编码和解码是什么?
    在这里插入图片描述
  2. 为什么需要编码和解码?
    像 / ? : 等这样的字符, 已经被url当做特殊意义理解了,因此这些字符不能随意出现。所以为了维护URL参数格式的正确性,需要编码和解码。
    格式:是以?开始,以&进行分隔多个参数的,以=来区分key和value的。

urlencode编码:
比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义。
转义的规则如下: 将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。
例如:“+” 被转义成了 “%2B”。
在这里插入图片描述
urldecode解码:
urldecode就是urlencode的逆过程。

同时,我们可以通过在浏览器的控制台上直接编写JS代码进行编码和解码。例如:

//编码
encodeURI("蛋糕")
//解码
decodeURI("%E8%9B%8B%E7%B3%95")

5 抓包工具 fiddler

之前说过http的请求(交互),但是这个交互的过程我们看不到,我们为了研究http这个交互过程(也就是它里面交互的内容到底是什么 [主要是request和response,状态码,以及后续的cookie和session]),就需要在这个中间设置一个代理fiddler。
然后交互过程就变成了前端先去访问fiddler,然后fiddler再将这个包转发给后端服务器;同样后端在返回的时候fiddler先抓到这个包,再返回给前端。
在这里插入图片描述
下载安装好fiddler工具后,fiddler工具打开页面分为如下图所示的三部分,就可以直接进行使用了。
在这里插入图片描述在这里插入图片描述
注意:

  1. 点击左下角的Capturing按钮可以实现停止和继续抓包。
  2. 点击Raw查看原生的请求和响应头信息。

6 http和https的区别

https可以看成是基于http实现的,只是http在双方通讯的时候它是明文传输的,而明文传输就造成可能被拦截的现象,拦截之后就会被别人进行破解,破解之后相当于你的传输的内容就暴露了,为了解决这个问题就引入了https。
而https简单来说就是它先在客户端完成加密操作,再把这个信息通过加密的内容进行传输,这个时候即使你把我传输的内容进行了拦截,你拿到的内容也是加密过的,而加密过的内容你拿到也是无任何作用的,读不懂里面的内容到底是什么。客户端那边会有一个公钥进行加密,而服务器端会有一个私钥进行解密。

简单理解就是http传送数据(包括账号和密码),都是明文传送,很容易被窃取或者侦听,在现有的互联网应用中,很明显有不安全因素,所以有了https,可以简单理解成https多了一层加密解密层,在发送前加密,在收到后解密,在网络里传输的都是经过加密的数据。

7 http 头

http头分为两部分,分别是请求头(也就是Request请求端的头部信息)和响应头(Response响应头)。
当我们输入一个地址后,前后端就建立起来链接,可以进行通信了。如何进行通信呢?依靠的就是http的两个头。
请求头是客户端浏览器发送给服务器的信息,而响应头是服务器端响应给客户端的内容。
在这里插入图片描述

请求头里有四部分内容:

  1. 头信息,也就是首行信息
    首行信息里有三个内容:
    (1)方法类型,分为 [GET / POST]类型。
    这种https://so.csdn.net/so/search?spm=1010.2135.3001.4498&q=1&t=&u=在url中直接传参的方式是GET请求;而使用form表单(包含多个参数的容器)给后端传输数据的方式是POST请求(即使用的是隐藏的方式来提交参数的)。
    (2) URL,即请求的地址。
    (3) 版本号,即这里指的是http的版本号,我们目前用的最多的版本号是http/1.1。
  2. header,也就是请求头
    它是多个键值对,多个键值对使用\n进行分隔,每个键值对的格式是key:value。
  3. 空行
    它的作用是标志着header的结束。
  4. body,也就是正文
    空行后面的内容都是body,它放的是参数。如果是GET请求方式,那么body是没有值的,因为在get请求的时候就会把参数直接拼接到url中去;如果是POST请求方式,那么body才有值。
    Body里面可能会有多个参数,多个参数使用&进行分隔,每个参数使用=进行分隔。

http请求头 — 抓包结果示例:
在这里插入图片描述

  1. 首行: [方法] + [url] + [版本],也就是头信息。
  2. Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束。
  3. Body: 空行后面的内容都是Body。Body允许为空字符串。如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度。
  4. 常见的请求头信息:User-Agent(客户端的设备信息,也就是用户系统信息,声明用户的操作系统和浏览器版本信息等内容)、Cookie(客户端和服务器端保持身份识别的信息,也就是用于在客户端存储少量信息,通常用于实现会话session的功能)、Content-Type(用户告诉对方,自己的请求类型是啥?这个数据类型有很多,比如:text/html是告诉我发送给服务器端或者说服务器端响应给客户端的类型是一个html页面;text/css表示请求或响应的类型是css;application/javascript表示请求或响应的类型是js;image/png表示请求或响应的类型是png图片)、Content-Length(Body的长度)、Host(客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上)、referer(当前页面是从哪个页面跳转过来的)、location(搭配3xx状态码使用, 告诉客户端接下来要去哪里访问)。

响应头里也有四部分内容:

  1. 头信息,也就是首行信息
    首行信息里有三个内容:
    (1)版本号,即这里指的是http的版本号,我们目前用的最多的版本号是http/1.1。
    (2)状态码,即客户端拿到这个状态码之后就可以知道服务器端响应的结果是啥。
    每种状态码对应的响应是不同的(如果是200,则表示服务器端告诉客户端,我的响应是正常的)。
    (3)状态码描述。
  2. header,也就是响应头
    它是多个键值对,多个键值对使用\n进行分隔,每个键值对的格式是key:value。
  3. 空行
    它的作用是标志着header的结束。
  4. body,也就是正文
    空行后面的内容都是body,它放的是参数。

http响应头 — 抓包结果示例:在这里插入图片描述

  1. 首行: [版本号] + [状态码] + [状态码解释]
  2. Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
  3. Body: 空行后面的内容都是Body。Body允许为空字符串。如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在body中。
  4. 常用状态码(如下图所示分为5类):在这里插入图片描述
    最常见的状态码, 比如 200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(BadGateway)。

8 HTTP 状态码

以下是可能从 Web 服务器返回的 HTTP 状态码的列表:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
但要注意: 301和302的收录权重相比的话,301收录权重比较高,而302收录的权重比较低。

9 常见的 Http 服务器

市场上常见的 Http 服务器:

  1. Tomcat(web 应用服务器)
    它的主要核心使用人群是Java。
    针对的是单台服务器的发布。
  2. Nginx
  3. Apache
  4. Lighttpd

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

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

相关文章

鸿蒙NEXT开发实战:【网络管理-数据请求】

概述 本示例仿postman输入API接口地址,获取相应数据,介绍数据请求接口的用法。 样例展示 基础信息 Http 介绍 本示例通过[ohos.net.http]等接口,实现了根据URL地址和相关配置项发起http请求的功能。 效果预览 首页结果页 使用说明 1.…

每日一练 | 华为认证真题练习Day193

1、关于永久组播地址的描述,错误的是: A. 网段内所有主机和路由器都侦听224. 0. 0.1。 B. 所有路由器都侦听224 .0 .0.2 C. 所有运行OSPF协议的路由器都侦听224.0.0.5 D. 所有运行RIP V2协议的路由器都侦听224.0.0.100 2、ISIS协议所支持的网络类型除P2P以外还有…

搭建Zabbix监控系统

概述 Zabbix是一个基于Web界面的企业级开源监控套件,提供分布式系统监控与网络监视功能。具 备主机的性能监控,网络设备性能监控,数据库性能监控,多种告警方式,详细报表、图表的绘制等 功能。监测的对象可以是Linux或 …

Android岗面试,面试完腾讯我才发现这些知识点竟然没掌握全

前言 H 点击领取完整开源项目《安卓学习笔记总结最新移动架构视频大厂安卓面试真题项目实战源码讲义》 i~,我是 2020 届物联网专业毕业生,现就读于杭州。谨以此文来记录我的秋招以及入门前端以来的学习历程,如有错误,希望大家能及…

逻辑代数基础(二)(卡诺图)

目录 逻辑图表示 卡诺图表示 卡诺图的标准格式 二变量卡诺图 三变量卡诺图 四变量卡诺图 卡诺图表示逻辑函数 从逻辑表达式到卡诺图 逻辑代数的三个规则 代入规则 反演规则 对偶规则 逻辑函数的化简方式 化简逻辑函数的意义 逻辑函数最简表示式的判别标准 公式化简法 并…

java工程师面试突击第二季分布式,Java多线程从基础到并发模型统统帮你搞定

面试准备 不论是校招还是社招都避免不了各种面试、笔试,如何去准备这些东西就显得格外重要。 运筹帷幄之后,决胜千里之外!不打毫无准备的仗,我觉得大家可以先从下面几个方面来准备面试: 1. 自我介绍。(介…

Windows安装MySQL8.0详细步骤

目录 一、官网下载MySQL二、将压缩包解压到没有中文和空格的目录下三、设置配置文件四、配置环境变量五、安装初始化mysql服务 一、官网下载MySQL 进入MySQL官网:https://downloads.mysql.com/archives/community/,下载 Windows (x86, 64-bit), ZIP Arch…

全连接神经网络算法原理(激活函数、前向传播、梯度下降法、损失函数、反向传播)

文章目录 前言1、全连接神经网络的整体结构:全连接神经网络模型是由输入层、隐藏层、输出层所组成,全连接神经网络结构如下图所示:全连接神经网络的每一层都是由一个一个的神经元所组成的,因此只要搞清楚神经元的本质就可以搞清楚…

Stable Diffusion 3 技术论文解读:开源能赢得文生图竞赛吗?

在大语言模型领域,闭源模型正在赢得比赛,无论是 OpenAI 还是刚刚发布新模型的 Anthropic,都是闭源模型的代表。 但在文生图领域,开源模型却表现出了足够强的竞争力。 2 周前,开源模型的代表企业 Stability AI 发布了最…

ruoyi-nbcio-plus基于多租户的flowable设计考虑

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址: http://122.227.135.243:9666 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbach…

每日学习总结20240306

每日总结 20240306 1. 断言测试判断 #include <iostream> #include <assert.h> #include <cassert> #include <stdio.h>#define STR_OK "[\x1b[1;32m OK \x1b[0m]" #define STR_FAIL "[\x1b[1;31mFAIL\x1b[0m]"…

CTP-API开发系列之柜台系统简介

CTP-API开发系列之柜台系统简介 CTP-API开发系列之柜台系统简介中国金融市场结构---交易所柜台系统通用柜台系统极速柜台系统主席与次席 CTP柜台系统CTP组件名称对照表CTP柜台系统程序包CTP柜台系统架构图 CTP-API开发系列之柜台系统简介 中国金融市场结构—交易所 我们知道提…

4.2 比多数opencv函数效果更好的二值化(python)

在这里之间写代码&#xff1a; import numpy as np import torch import torch.nn as nn import cv2#1.silu激活函数 class SiLU(nn.Module):staticmethoddef forward(x):return x*torch.sigmoid(x)#2.获得轨道的类 def railway_classes3(img,x1,x2,y1,y2):img2 img[x1:x2, y…

【Flink入门修炼】2-2 Flink State 状态

什么是状态&#xff1f;状态有什么作用&#xff1f;如果你来设计&#xff0c;对于一个流式服务&#xff0c;如何根据不断输入的数据计算呢&#xff1f;又如何做故障恢复呢&#xff1f; 一、为什么要管理状态 流计算不像批计算&#xff0c;数据是持续流入的&#xff0c;而不是…

iOS小技能:苹果开发者申请材料

文章目录 引言I 个人账号申请资料II 公司账号申请所需资料III duns资料提交操作步骤IV 续费引言 https://developer.apple.com/cn/programs/enroll/ 申请过程只能使用同一台设备注册苹果开发者的Apple ID可以转让。注册苹果开发者的在验证身份证信息的时候,必须使用法定姓名拼…

STM32(18)I2C

串口通信缺点 一个设备就需要一个串口&#xff0c;单片机可能没有那么多串口外设 总线/非总线 主机&#xff1a;负责管理总线&#xff0c;可控制波特率、数据的通信方向 波特率&#xff1a;由主机产生波特率信号 数据的传输 每个从机都有7位地址&#xff0c;最后移位是读&a…

3.6IO作业

编写一个伪终端 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <wait.h> void getstring(char* buf,int si…

STM32CubeMX学习笔记12 ---低功耗模式

在实际使用中很多产品都需要考虑低功耗的问题&#xff0c;STM32F10X提供了三种低功耗模式&#xff1a;睡眠模式&#xff08;Sleep mode&#xff09;、停机模式&#xff08;Stop mode&#xff09;和待机模式&#xff08;Standby mode&#xff09;。这些低功耗模式可以有效减少系…

浅谈电子商务企业跨境电商经常要用到的电商API接口接入说明和参数解析

开发电商平台就一定离不开接口&#xff0c;作为产品经理&#xff0c;我们要对接口不要求能实现调用。但要知道接口是什么&#xff0c;有什么用&#xff0c;有哪些要素。 什么是API吗&#xff1f; API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口…

Linux上轻松搞定Docker环境下Nginx安装

Nginx安装 下载Nginx1.10的docker镜像&#xff1a; docker pull nginx:1.10先运行一次容器&#xff08;为了拷贝配置文件&#xff09;&#xff1a; docker run -p 80:80 --name nginx -v /mydata/nginx/html:/usr/share/nginx/html -v /mydata/nginx/logs:/var/log/nginx -d…