HTTP 请求/响应的步骤:(工作原理)

  1. 客户端连接到 Web 服务器

一个 HTTP 客户端,通常是浏览器,与 Web 服务器的 HTTP 端口(默认为 80)建立一个 TCP 套接字连接。例如,http://www.baidu.com

  1. 发送 HTTP 请求

通过 TCP 套接字,客户端向 Web 服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据 4 部分组成。

  1. 服务器接受请求并返回 HTTP 响应

Web 服务器解析请求,定位请求资源。服务器将资源复本写到 TCP 套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据 4 部分组成。

  1. 释放连接 TCP 连接

若 connection 模式为 close,则服务器主动关闭 TCP 连接,客户端被动关闭连接,释放 TCP 连接;若 connection 模式为 keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

  1. 客户端浏览器解析 HTML 内容

客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的 HTML 文档和文档的字符集。客户端浏览器读取响应数据 HTML,根据 HTML 的语法对其进行格式化,并在浏览器窗口中显示。

例如:在浏览器地址行键入 url,按下回车之后会经历以下流程

  • 浏览器向 DNS 服务器请求解析该 url 中的域名,找到域名对应的 ip 地址
  • 浏览器通过获得的 ip 地址向该地址的服务器建立 TCP 连接
  • 浏览器向该服务器发送请求报文(该请求作为 TCP 三次握手的第三个报文数据发送给服务器)
  • 服务器根据请求报文映射文件资源,复制文件资源并发送给浏览器
  • 服务器断开 TCP 连接,浏览器被动断开 TCP 连接(释放 TCP 连接)
  • 浏览器解析响应数据并显示内容

http 协议特点

  • http 协议是基于 TCP/IP 协议上的应用层协议

  • http 基于请求-响应模式(一定是从客户端先建立通信的,服务器端在没有接收到请求之前不会响应数据)

  • 无状态保存。HTTP 是一种不保存状态,即无状态 stateless 协议。HTTP 协议自身不对请求和响应的通信内容做保存。协议本身不保留之前一切的请求或响应的报文信息。为了实现保存状态(比如保持登录状态),引入了 cookie

    技术。有了 cookie 再使用 http 通信,就可以管理状态了。

  • 无连接。无连接的含义是限制每次连接只处理一个请求。服务器处理完用户的请求,并接收到用户的应答后,即断开连接。采用这种方式可以节省传输时间,并提高并发性能。早期的 http

    协议是接收到用户应答后就立即断开连接。现在的协议版本是接收到应答后再等待几秒(默认是 3

    秒),若用户没有再发起请求则断开连接。这样可以短时间内减少连接的次数。因为连接也是耗时的。(等待时间可以通过后端设置。可设置一个适合当前业务系统的最佳等待时间)

http 请求方式

  • get 查询数据
  • post 提交数据(如提交表单或上传文件)(新建数据或更改数据)
  • put 更新数据
  • delete 删除数据

get 与 post 请求方式

  • GET 提交的数据会放在 URL 之后,也就是请求行里面,以?分割 URL 和传输数据,参数之间以&相连,如 EditBook?name=test1&id=123456.(请求头里面那个 content-type

    做的这种参数形式,后面讲) POST 方法是把提交的数据放在 HTTP 包的请求体中.

  • GET 提交的数据大小有限制(因为浏览器对 URL 的长度有限制),而 POST 方法提交的数据没有限制.

  • GET 与 POST 请求在服务端获取请求数据方式不同,就是我们自己在服务端取请求数据的时候的方式不同了,这句废话昂。

http 状态码

  • 1xx 消息——请求已被服务器接收,继续处理
  • 2xx 成功——请求已成功被服务器接收、理解、并接受
  • 3xx 重定向——需要后续操作才能完成这一请求
  • 4xx 请求错误——请求含有词法错误或者无法被执行
  • 5xx 服务器错误——服务器在处理某个正确请求时发生错误

URL

超文本传输协议(HTTP)的统一资源定位符将从因特网获取信息的五个基本元素包括在一个简单的地址中:

  • 传送协议。
  • 层级 URL 标记符号(为[//],固定不变)
  • 访问资源需要的凭证信息(可省略)
  • 服务器。(通常为域名,有时为 IP 地址)
  • 端口号。(以数字方式表示,若为 HTTP 的默认值“:80”可省略)
  • 路径。(以“/”字符区别路径中的每一个目录名称)
  • 查询。(GET 模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再* 以“=”分开参数名称与数据,通常以 UTF8 的 URL 编码,避开字符冲突的问题)
  • 片段。以“#”字符为起点

以http://www.luffycity.com:80/news/index.html?id=250&page=1 为例, 其中:

  • http,是协议;
  • www.luffycity.com,是服务器;
  • 80,是服务器上的默认网络端口号,默认不显示;
  • /news/index.html,是路径(URI:直接定位到对应的资源);
  • ?id=250&page=1,是查询。

大多数网页浏览器不要求用户输入网页中 “http://” 的部分,因为绝大多数网页内容是超文本传输协议文件。同样,“80”是超文本传输协议文件的常用端口号,因此一般也不必写明。一般来说用户只要键入统一资源定位符的一部分(www.luffycity.com:80/news/index.html?id=250&page=1)就可以了。

由于超文本传输协议允许服务器将浏览器重定向到另一个网页地址,因此许多服务器允许用户省略网页地址中的部分,比如

www。从技术上来说这样省略后的网页地址实际上是一个不同的网页地址,浏览器本身无法决定这个新地址是否通,服务器必须完成重定向的任务。

http-超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)

  • http 协议是以 ASCII 码传输,建立在 TCP/IP 层之上的应用层协议

HTTP知识点的更多相关文章

  1. ASP.NET Core 中的那些认证中间件及一些重要知识点

    前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...

  2. ASP.NET MVC开发:Web项目开发必备知识点

    最近加班加点完成一个Web项目,使用Asp.net MVC开发.很久以前接触的Asp.net开发还是Aspx形式,什么Razor引擎,什么MVC还是这次开发才明白,可以算是新手. 对新手而言,那进行A ...

  3. UWP开发必备以及常用知识点总结

    一直在学UWP,一直在写Code,自己到达了什么水平?还有多少东西需要学习才能独挡一面?我想对刚接触UWP的开发者都有这种困惑,偶尔停下来总结分析一下还是很有收获的! 以下内容是自己开发中经常遇到的一 ...

  4. C#高级知识点&(ABP框架理论学习高级篇)——白金版

    前言摘要 很早以前就有要写ABP高级系列教程的计划了,但是迟迟到现在这个高级理论系列才和大家见面.其实这篇博客很早就着手写了,只是楼主一直写写停停.看看下图,就知道这篇博客的生产日期了,谁知它的出厂日 ...

  5. lucene 基础知识点

    部分知识点的梳理,参考<lucene实战>及网络资料 1.基本概念 lucence 可以认为分为两大组件: 1)索引组件 a.内容获取:即将原始的内容材料,可以是数据库.网站(爬虫).文本 ...

  6. DoraCMS 源码知识点备注

    项目需要研究了下DoraCMS这款开源CMS,真心做的不错:).用的框架是常用的express 4 + mongoose,代码也很规范,值得学习. 源码中一些涉及到的小知识点备注下: https:// ...

  7. atitit 商业项目常用模块技术知识点 v3 qc29

    atitit 商业项目常用模块技术知识点 v3 qc29 条码二维码barcodebarcode 条码二维码qrcodeqrcode 条码二维码dm码生成与识别 条码二维码pdf147码 条码二维码z ...

  8. HTML5知识点总结

    HTML5知识点总结(一) 一.HTML新增元素 1.IE9版本以下支持HTML5的方法 <!--[if lt IE9]> <script src="http://cdn. ...

  9. JavaScript易错知识点整理

    前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一 ...

  10. Sqlserver中一直在用又经常被忽略的知识点一

    已经有快2个月没有更新博客了,实在是因为最近发生了太多的事情,辞了工作,在湘雅医院待了一个多月,然后又新换了工作...... 在平时的工作中,Sqlserver中许多知识点是经常用到的,但是有时候我们 ...

随机推荐

  1. [机器学习] Yellowbrick使用笔记6-分类可视化

    分类模型试图在一个离散的空间中预测一个目标,即为一个因变量实例分配一个或多个类别. 代码下载 分类分数可视化工具显示类之间的差异以及一些特定于分类器的可视化评估.我们目前已经实施了以下分类器评估: 分 ...

  2. CF803G Periodic RMQ Problem

    简要题意 你需要维护一个序列 \(a\),有 \(q\) 个操作,支持: 1 l r x 将 \([l,r]\) 赋值为 \(x\). 2 l r 询问 \([l,r]\) 的最小值. 为了加大难度, ...

  3. Autodesk Maya2023 破解版安装教程(小白看了也说understand)

    前言 Maya是Autodesk旗下的著名三维建模和动画软件,应用对象是专业的影视广告,角色动画,电影特技等.Maya功能完善,工作灵活,制作效率极高,渲染真实感极强,是电影级别的高端制作软件. 安装 ...

  4. Portainer功能使用之容器管理

    下载镜像 点击左边功能菜单栏[images]下载镜像 容器管理 点击左边功能菜单栏[Containers]创建.启动.重启.停止.监控等功能 创建容器 例如:安装nginx代理服务器,并设置容器信息( ...

  5. find_package()的使用

    find_package()命令是用来查找依赖包的,理想情况下,一句find_package()把一整个依赖包的头文件包含路径.库路径.库名字.版本号等情况都获取到,后续只管用就好了.但实际中往往CM ...

  6. Zstack 鼎阳SDS6204示波器和Archiver Appliance的重度测试2

    https://blog.csdn.net/weixin_43767046/article/details/113748775 https://blog.csdn.net/weixin_4376704 ...

  7. .NET周报 【2月第3期 2023-02-18】

    国内文章 2023 年.NET仓库社区年度调查已经开始 https://mp.weixin.qq.com/s/H9xUAO_yAdqm5CIHBs_eqA 中国地区是 .NET 的一个重要的市场和社区 ...

  8. 教你快速做一个自己的“ChatGPT”

    摘要:在国内使用ChatGPT有些不便,是否可以基于OpenAI开放的API做一个给自己或者同事们使用的聊天机器人,甚至集成到更多的场景-. 本文分享自华为云社区<使用 FunctionGrap ...

  9. 高仿微信|基于Windows微信实现一个IM即时通讯App

    本文干货充足篇幅较长,建议收藏后阅读避免迷路.文末可获取[自动聊天机器人源码和Demo]. 即时通讯IM概述 如果能开发一款即时聊天App,能和微信消息互通,并且只需少许代码量,应该是件非常兴奋的事情 ...

  10. Linux命令-用户、权限管理

      Linux命令-用户.权限管理 用户是Unix/Linux系统工作中重要的一环,用户管理包括用户与组账号的管理. 在Unix/Linux系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个 ...