HTTP基础知识

2023-10-29

http属于TCP/IP协议族的一个子集

http的作用:

用来生成针对Wed服务器的HTTP请求报文

URI:标识互联网上的资源
URL:标识互联网资源的地址


URL(URI)(网址)的格式:


http://登录信息@域名:端口号文件路径(查询字符串#片段标识符)
登录信息包含用户名和密码,用来在服务端登录使用。

http请求报文的构成:

注意:这里的空格不一定是单一个空格,而是空格或者'\t'

HTTP各部分的连接

想要正确解析HTTP请求,一定要知道各部分之间的连接字符

可见,HTTP每一行都以”回车换行“符(\r\n)结尾,

而消息头和消息体之间有两个回车换行符,也就是多出一个空行

请求行:

协议版本现在基本上都是1.1版本的,1.0,0.9的基本不用了

消息头:

消息头中的信息类型由首部标识

HTTP首部组成:

字段名:字段值

host:

是要访问的服务器主机,字段值是主机域名

connection:

是否需要保持连接的设置

如果字段值为:keep-alive

那就是要求保持持久连接

Content-Type:

是消息体的对象类型

Content-Length:

消息体内容的长度()。

HTTP首部字段:

实体主体就是这报文

还有其他HTTP首部,需要时可 查阅。 

http响应报文的构成:

响应行:

状态码和状态原因短语:

状态码告知客户端从服务器返回的请求结果

 比较重要的:

200

304:通过在请求头中加上首部(eg:If -Modified-Since,If-None-Match),告诉服务器,如果客户端本次要请求的数据上次请求过,将服务器的这个数据和上一次请求的数据作比较,如果没有改动,那么就无需要返回这个数据,直接使用客户端缓存中的数据就可以了。

响应头:

Date:创建HTTP响应报文的时间和日期

http的持久连接和Cookie状态管理:
非持久的http连接:
请求一次数据,建立一次连接
持久的http连接:
建立一次连接,可以请求多次数据,直到一方发起连接关闭。

持久连接的基础上,http还可以进行“管线化”数据传输:从前发送请求需要等待接收到响应才可以发送下一个请求,管线化技术可以并行发送多个请求

Cookie状态管理:
http协议是无状态协议,即不记录之前发生过的请求和响应的状态。但是很多情况下,有需要之前请求和响应的数据状态,所以产生了Cookie技术。
Cookie技术通过在请求和响应的报文中写入Cookie信息来控制和记录客户端的状态
Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie,当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。
服务器端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
cookie 可以用于标识一个用户。用户首次访问一个站点时,可能需要提供一个用户标识(可能是名字)。在后继会话中,浏览器向服务器传递一个cookie首部,从而向该服务器标识了用户。因此cookie可以在无状态的HTTP之上建立一个用户会话层。例如,当用户向一个基于Web的电子邮件系统(如Hotmail)注册时,浏览器向服务器发送cookie信息,允许该服务器在用户与应用程序会话的过程中标识该用户。

S:我已经记住你了,记得把你在我这的OD号记下来,下次来记得带上,我就知道你是谁了
C:好的好的。


http方法:

GET:获取服务器的资源,(也可以传输数据)
POST:传输数据或者文件(比如登陆的用户名和密码)
HEAD:和GET一样,但是只需要返回响应报文的头部,不需要响应报文的主体

PUT:传输文件
DELETE:删除文件

OPTIONS:查看服务器允许使用 的HTTP方法

get和post的区别----

1、url可见性:

get,参数url可见;

post,url参数不可见

2、参数传输的位置:

get的参数通过拼接在url中传输;

post的参数通过body消息体传输;

3、数据缓存性:

因为get请求一般只是获取数据,不会修改数据,而post除了可以获取,还可以提交也就是修改,所以:

get请求是可以缓存的

post请求不可以缓存

什么是http缓存?\nhttp缓存指的是:当客户端向服务器请求资源时,会先抵达浏览器缓存,如果浏览器有“要请求资源”的副本,就可以直接从浏览器缓存中提取而不是从原始服务器中提取这个资源。\n常见的http缓存只能缓存get请求响应的资源,对于其他类型的响应无能为力。

4、后退页面的反应

get请求页面后退时,不产生影响

post请求页面后退时,会重新提交请求

5、传输数据的大小

get一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大)

post请求传输数据的大小可以设定,也可以无限大。

6、安全性

这个也是最不好分析的,原则上post肯定要比get安全,毕竟传输参数时url不可见,但也挡不住部分人闲的没事在那抓包玩。安全性个人觉得是没多大区别的,防君子不防小人就是这个道理。对传递的参数进行加密,其实都一样。

7、数据包

GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

管线化:

可以并行发送多个请求,不用等待一个请求得到响应再发送下一个请求

MIME type:

客户端请求的资源的类型。(媒体类型)

媒体类型通常是通过 HTTP 协议,由 Web 服务器告知浏览器的,更准确地说,是通过 Content-Type 来表示的,例如:

Content-Type: text/HTML

HTTP服务器程序需要做哪些处理:

想知道需要进行哪些处理,我需要知道,一个URL从客户端被发送到服务端,在服务端获取数据再将内容显示在客户端的整个过程:

http处理请求的步骤过程:

接收URL,对URL进行拆分,检测,对检测的结果进程处理,对处理的结果进行打包发送。

1 建立Tcp连接
 

注意linux下建立web服务器需要80端口号,需要root用户权限访问

2 读取http请求
 

3 解析http请求数据


处理的过程大致是把请求的信息解析出来,想要知道怎么处理HTTP请求,就要知道:

(1):接收到的数据(文件名)是什么

url的类型:

(静态文件)静态资源:

可以理解为前端的固定页面,这里面包含HTML、CSS、JS、图片等等,不需要查数据库也不需要程序处理,直接将文件复制发送给客户端,直接就能够显示的页面,如果想修改内容则必须修改页面,但是访问效率相当高。


(静态文件)动态资源:

需要程序处理或者从数据库中读取的数据(总之不是简单的读取数据,而是需要运行程序),将程序处理之后的数据返回给客户端

静态文件和动态文件如何区分和识别:

利用文件的拓展名

.html这些是静态文件

.cgi, .php是程序文件(动态文件)

(2):http请求报文的组成

4 访问资源
访问资源可以是访问静态资源,这个就直接根据url地址去服务器里寻找,然后发送给客户端就好了。

访问动态资源的话要经过一个叫CGI的东西,再用服务端脚本处理,再返回给前端。如下图所示

5 构建响应
要是找到资源,则构建响应信息,包括响应的对象类型,长度,状态码。

另一个情况是重定向响应,就是直接返回一个重定向,客户端看到之后,立刻再向重定向的地址发起请求。重定向的响应的状态码一般是3xx。

6 发送响应
把构建的响应发送给客户端

7 记录日志
服务端对这个请求响应过程进行记录。

状态机:

有限状态机:

定义:很多东西(数据)的模型就是有限状态机。

实现方式:

1,switch

2,if---else

3,enum

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP基础知识 的相关文章

  • golang中默认的HTTP拨号超时值

    我正在运行 golang http 客户端来对服务器进行压力测试 有时我会收到错误 拨号 tcp 161 170 xx xxx 80 操作超时 错误 我认为这是 HTTP 客户端超时 我正在考虑增加超时值https stackoverflo
  • CXF 增加连接池大小而不更改 http.maxConnections

    最近我被要求将 CXF 配置为与我们旧的 XFire 服务相同的参数 这些参数之一是Keep Alive timeout 60 max 20 然而 我做了一些研究 看来 CXF 使用 JVMHttpURLConnection引擎盖下的对象
  • HTTP 接受“级别”?

    我一直在阅读HTTP 1 1 标头 http www w3 org Protocols rfc2616 rfc2616 sec14 html sec14 1在第 14 1 节 接受 的一些示例标头中 他们使用accept extension
  • 在 Go 中读取请求负载?

    我正在使用文件上传器 需要请求负载中的详细信息来裁剪它 func Upload w http ResponseWriter r http Request reader err r MultipartReader if err nil htt
  • POST 之后在 PHP 中设置 Location 标头时避免 HTTP 302 响应代码

    我需要放一个201 CreatedPOST 请求的响应代码和 Location 标头 但由于某种原因我仍然收到 302 响应 这就是我所拥有的 header HTTP 1 1 201 header Location The new reso
  • AddressAccessDeniedException :无需 netsh 即可解决它?

    我遇到了异常AddressAccessDeniedException因为我的processus没有注册URL的权限 我首先以管理员身份运行我的程序 好的 它成功了 但我现在想要分发我的应用程序 并且我希望每个用户都能够运行它 而不必成为管理
  • 如何使用 Node.js 和 Axios 将文件上传到 AWS 中的预签名 URL?

    我有下一个场景 通过 AWS SDK 生成用于文件上传的签名 URL 尝试使用axios 或request npm包上传本地文件 但每次我都会出错 Status 403状态文本 禁止
  • 如何给所有HttpClient请求方法添加参数?

    我正在编写一些使用 Apache 的 Java 代码HttpClient版本4 2 2使用 RESTful 第三方 API 该 API 具有利用 HTTP 的方法GET POST PUT and DELETE 需要注意的是 我使用的是 4
  • REST URL 结构建议

    我正在尝试为我正在开发的网站的愿望清单部分敲定一个宁静的网址结构 这是一个非常简单的模型 用户可以有许多愿望清单 每个愿望清单可以包含许多产品 目前我有明显的 CRUD URL 来操作愿望清单本身 GET account wishlists
  • HTTP 重定向图像可以吗?

    返回图片资源时返回301 302 303代码可以吗 我过去曾这样做过 而且似乎有效 这是好的做法吗 它与大多数浏览器兼容吗 是的 您可以重定向图像 浏览器将遵循重定向 但出于性能原因 您通常希望将重定向保持在最低限度 因为每个重定向都需要单
  • 如何在C++中使用Curl获取HTTP响应字符串

    我对 HTTP 命令和 libcurl 库非常陌生 我知道如何获取 HTTP 响应代码 但不知道如何获取 HTTP 响应字符串 以下是我为获取响应代码而编写的代码片段 任何有关如何获取响应字符串的帮助将不胜感激 curl easy seto
  • 从浏览器中删除cookie?

    有什么方法可以指示网络浏览器完全delete一个人的cookie是用PHP设置的吗 我不想expiry或者等待浏览器closed 对于删除 我的意思是实际上不再将其列在 cookie 列表中 尝试这样删除所有 cookie foreach
  • 在 Heroku 上获取客户端的真实 IP 地址

    在任何 Heroku 堆栈上 我想获取客户端的 IP 我的第一次尝试可能是 request headers REMOTE ADDR 当然 这是行不通的 因为所有请求都是通过代理传递的 所以替代方法是使用 request headers X
  • org.apache.http 软件包在 API 级别 23 中被删除。替代方案是什么?

    在更新到最新的 android API 级别 23 Marshmallow 后 通过 build gradle 添加以下更改后 所有 org apache http 类都不起作用 android compileSdkVersion 23 b
  • HttpRequest PUT内容到poco库中

    我想使用 HTTP PUT 请求将一些数据从 C 应用程序发送到服务器 我在用poco http pocoproject org我的应用程序中的网络库 我正在使用这个代码片段 HTTPClientSession session uri ge
  • 在处理程序之后访问 HTTP 请求上下文

    在我的日志记录中间件 链中的第一个 中 我需要访问一些在链下游的某些身份验证中间件中编写的上下文 并且仅在处理程序本身执行之后 旁注 需要首先调用日志记录中间件 因为我需要记录请求的持续时间 包括在中间件中花费的时间 此外 当权限不足时 身
  • Angular2 中 Http 的 Promise 与 Observable? [复制]

    这个问题在这里已经有答案了 本质上 正如标题所说 是否有任何理由使用可观察的承诺 https stackoverflow com questions 37364973 angular 2 promise vs observable为了进行
  • HTTP代理服务器

    我开始研究一个用 C 编写的非常基本的 HTTP 代理服务器 Edit 只是转发我的请求的东西 此时我很难理解如何继续 任何帮助都会有益的 看一眼micro proxy http acme com software micro proxy
  • Django 响应总是用 text/html 分块无法设置内容长度

    在我的Django应用程序的views py中 我在尝试设置以下HTTP标头字段后返回一个HttpResponse对象 Create a Response Object with the content to return response
  • 有没有办法使用 ASP.NET 在用户离开页面时始终运行某些服务器端代码?

    我想知道当用户离开 ASP NET 中的页面时是否有任何方法可以始终运行一些服务器端代码 页面卸载事件不好 因为如果有人单击链接 则不会调用该事件 理想情况下 即使用户关闭浏览器 我也希望代码能够运行 我怀疑我所问的问题是不可能的 但问一下

随机推荐

  • 解决Windows系统目录缺少cfgbkend.dll文件问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个cfgbken
  • SpringCould Swagger API接口管理

    课题引入 随着微服务架构体系的发展和应用 为了前后端能够更好的集成与对接 同时为了项目的方便交付 每个项目都需要提供相应的API文档 来源 PC端 微信端 H5端 移动端 安卓和IOS端 传统的API文档编写存在以下几个痛点 对API文档进
  • UWP和WPF比较

    UWP Universal Windows Platform 开发流程通常包括以下步骤 准备开发环境 安装Visual Studio 使用最新版本的Visual Studio来进行UWP开发 安装Windows 10 确保你的开发机器上安装
  • 面试题创作0008,请说明当系统中的主CPU的MMU单元,与设备中的MMU单元共用内存时,两个CPU地址总线与内存的链接方式。

    请说明当系统中的主CPU的MMU单元 与设备中的MMU单元共用内存时 两个CPU地址总线与内存的链接方式 这对软件编程的影响是什么呢 比如如何做到互知内存的分配情况 避免两个CPU打架的机制
  • 解决“keil无法找到相应文件的错误”方法

    今天来分享一下之前遇到的一个关于Keil使用过程中的一个BUG 不知道大家有没有听说过keil工程中的文件包含路劲是不能太深的 如果没有听说过 使用过程中可能会遇到这个错误 其错误提示为 xx x error A1023E File Lib
  • 使用C++开发游戏的技巧

    引言 C 是一种广泛使用的编程语言 因其高效性能和灵活性而受到许多游戏开发者的青睐 本文将探讨使用C 开发游戏的一些技巧 帮助您更有效地实现游戏设计的目标 一 选择适合的游戏引擎 选择一个合适的游戏引擎是开发游戏的关键 目前市场上有许多优秀
  • Python数据分析与应用_从数据获取到可视化题库及答案

    第1章习题 填空题 的目的在于将隐藏在一大批看似杂乱无章的数据信息集中提炼出来有用的数据 中包含了conda Python在内的超过180个科学包及其依赖项 Jupyter Notebook是一个支持 代码 数学方程 可视化和Markdow
  • Unity的C#编程教程_43_遍历数组

    1 Print Out All Elements Using For Loop 如何将数组和循环搭配起来 打印数组中的所有元素 我们可以使用 for 循环 using System Collections using System Coll
  • Endnote导入新的Styles[以Chinese Std GBT7714 (numeric)为例]

    1 进入Endnote官网 找到下载Style的地址 地址如下 Output Styles EndNote 需要下载的style包如图所示 2 下载我们需要的style包 把style包放到Endnote的安装路径下的指定文件夹位置即可 如
  • bss段,data段、text段、堆heap和栈stack

    bss段 data段 text段 堆heap和栈stack bss段 data段 text段 堆 heap 栈 stack 例子 在C的学习中 你总避免不了对各类数据的存储区域学习归纳总结 简单的总结 bss存全局和静态变量 data存全局
  • 全连接神经网络

    注 本文是关于北京邮电大学鲁鹏老师计算机视觉与深度学习课程全连接神经网络部分内容的笔记与一些个人理解 课程视频链接 全连接神经网络 全连接神经网络模型 两层全连接神经网络模型如下 f W 2 m
  • CLion 2020.3 亮点解析:具有root权限的运行和调试能力

    CLion是一款专为开发C及C 所设计的跨平台IDE 它是以IntelliJ为基础设计的 包含了许多智能功能来提高开发人员的生产力 这种强大的IDE帮助开发人员在Linux OS X和Windows上来开发C C 同时它还使用智能编辑器来提
  • 【VMware Workstation Pro 16】安装【Deepin-15.11】

    我的电脑配置 VMware Workstation Pro 16的安装 VMware官网 下载完成后进行安装 目前我不太了解WIN10的Hyper V 勾选了安装WHP 默认勾选添加到系统变量 以防打不开 虚拟机的安装 Deepin官网下载
  • muduo net库学习笔记1——TCP网络编程的本质、 EchoServer类、EventLoop类的简化封装

    TCP网络编程最本质是处理三个半事件 1 连接建立 服务器accept接收连接 客户端发起连接 2 连接断开 主动断开 close shutdown 被动断开 read返回0 3 消息到达 文件描述符可读 4 消息发送完毕 这算半个 对于低
  • nvm,参数存储

    目录 NVM 简介 API说明 实现流程 table类型参数的写入和读取 示例 常见问题 相关资料以及购买链接 资料附上API链接 demo链接 NVM 简介 nvm 非易失性存储器 英语 non volatile memory 缩写为NV
  • 如何使用Java以编程方式在 Excel 中创建图表

    图表和图形用于汇总和直观地表示数据 它们提供了可进一步用于做出决策的洞察力 图表被认为是 Excel 电子表格的一个组成部分 广泛用于各种应用程序 在本文中 将学习如何根据 Excel 工作表中提供的数据以编程方式生成图表 特别是 本文介绍
  • 百度智能云,沈抖拿到第二个KPI

    作为最近几年帮助百度这所大船加速转向并有亮眼战绩的关键人物 沈抖的加入 不论对百度智能云 还是中国云计算市场 都是一个足够值得期待的变量 作者 葡萄 子雨 编辑 皮爷 出品 产业家 5月的第一个工作日 沈抖领到了他进入百度的第二个KPI 执
  • Uncaught DOMException: Failed to execute 'drawImage' on 'CanvasRenderingContext2D':

    问题 Uncaught DOMException Failed to execute drawImage on CanvasRenderingContext2D The HTMLImageElement provided is in the
  • Html表单--form标签

    表单用于收集用户的输入信息 HTML 表单表示文档中的一个区域 此区域包含交互控件 将用户收集到的信息发送到 Web 服务器 1 form标签 form标签用来定义一个表单
  • HTTP基础知识

    http属于TCP IP协议族的一个子集 http的作用 用来生成针对Wed服务器的HTTP请求报文 URI 标识互联网上的资源 URL 标识互联网资源的地址 URL URI 网址 的格式 http 登录信息 域名 端口号文件路径 查询字符