前段时间,在和许久未见的老同学聊天时,突然被问到 http 协议到底是什么?脑海里面第一时间想起来的就是 request 请求、response 响应之类的词汇,但是这样讲他真的能知道是什么吗?我反问自己,于是找了相关的资料攻读一番。其实,大多数程序员经常都是在每天努力的搬砖,我相信,很少有人认真的研究过 http 协议到底是什么?

用官方的话来形容 http 协议又被称之为 超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议,它是网络互联的基础。我们通常知道 http 协议,说白了只是知道其如何使用在编程中,但其实 http 协议的底层实现极其复杂,它是通过网络七层架构或者说是网络五层架构通过一层一层的延伸到最上层的应用层协议。网络架构不是我们所研究的重点,但是起码得知道 tcp 协议的基本原理,为什么这里又提到了 tcp 协议,因为 tcp 协议也是属于应用层的一种协议,并且 http 协议就是对 tcp 协议的一种封装。

接下来,我们看看 http 协议是怎么工作的。一个 http 请求在发送到服务端之后,首先会建立一个 tcp 的套接字连接,紧接着服务端会收到来自客户端的请求报文、服务端对报文完成解析、就是知道这个请求想干什么,然后服务端将其客户端请求所需要的的内容信息返回给客户端、同时也会返回 tcp 的连接状态等信息,客户端拿到信息之后进行解析,在此之前响应也已经完成、相应的连接也会得到释放。注意:如果是对域名进行请求,在 tcp 套接字建立之前还会先进行域名服务器的访问完成域名解析。

下面用几个有趣的图来说明一下( 图片引用自:博客园 | 作者:爱文飞翔 ),通过图片说明 http 协议的请求过程。


上面两个有趣的图反映了 http 协议大致的请求过程。

另外,http 协议是一种无状态的协议。也就是说,http 协议自身不对请求和响应之间的通信状态进行保存、不做持久化的处理,在完成了一次请求、响应操作之后会断开连接。

在日常的编码中,http 请求主要定义了八种执行请求的方法。也就是朋友在问起时我脑海里面想到的关于 http 请求的 POST、GET、PUT、DELETE 等,这些内容只是 http 请求过程可以用于操作服务器资源的方法而不是 http 请求的概念或者原理性的东西。
更多精彩前往老王说编程>>>

如果被问到 HTTP 协议,你真的能讲清楚吗?的更多相关文章

  1. Java 訪问权限控制:你真的了解 protected keyword吗?

    摘要: 在一个类的内部,其成员(包含成员变量和成员方法)是否能被其它类所訪问,取决于该成员的修饰词:而一个类是否能被其它类所訪问,取决于该类的修饰词.Java的类成员訪问权限修饰词有四类:privat ...

  2. 【转】再有人问你Http协议是什么,把这篇文章发给他

    一.HTTP简介 1.HTTP协议,即超文本传输协议(Hypertext transfer protocol).是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相 ...

  3. 面试官问我HTTP,我真的是

    面试官:今天要不来聊聊HTTP吧? 候选者:嗯,HTTP「协议」是客户端和服务器「交互」的一种通迅的格式 候选者:所谓的「协议」实际上就是双方约定好的「格式」,让双方都能看得懂的东西而已 候选者:所谓 ...

  4. 你真的了解load方法么?(转载)

    本文授权转载,作者:左书祺(关注仓库,及时获得更新:iOS-Source-Code-Analyze) 因为 ObjC 的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Ma ...

  5. C#的HTTP协议中POST与GET的区别

    引言 HTTP协议我想任何IT人士都耳熟能详了,大家都能说出个所以然来.但是如果我问你HTTP协议的请求方法有哪些?POST与GET的差异?GET或POST传送数据量的大小有限制吗?HTTP响应的状态 ...

  6. [ASP.NET] Http协议GET与POST

    引言 HTTP 协议我想任何IT人士都耳熟能详了,大家都能说出个所以然来.但是如果我问你HTTP协议的请求方法有哪些?POST与GET的差异?GET或POST传送数据量的大小有限制吗?HTTP响应的状 ...

  7. TCP/IP协议详解概述

    TCP/IP协议详解卷1--第一章概述--读书笔记 作者:vpoet 日期:2015/06/25 注:本系列的文章只是作者对TCP/IP协议的理解,难免会出现纰漏或者不完整,当然也有可能很肤浅,希望大 ...

  8. Android 面向协议编程 体会优雅编程之旅

    Android中面向协议编程的深入浅出 http://blog.csdn.net/sk719887916/article/details skay编写 说起协议,现实生活中大家第一感觉会想到规则或者约 ...

  9. 网络协议 终章 - GTP 协议:复杂的移动网络

        前面都是讲电脑上网的情景,今天我们就来认识下使用最多的移动网络上网场景. 移动网络的发展历程     你一定知道手机上网有 2G.3G.4G 的说法,究竟这都是什么意思呢?有一个通俗的说法就是 ...

随机推荐

  1. [刘阳Java]_Web前端入门级练习_迅雷首页第一屏设计

    今天接着上一篇文章<Web前端入门级练习_迅雷官宣网设计>正式开始迅雷首页第一版的设计.如果完成,则最终的效果图如下 第一步:先完成logo部分的设计 logo设计,我们会使用CSS的定位 ...

  2. Python爬虫下载酷狗音乐

    目录 1.Python下载酷狗音乐 1.1.前期准备 1.2.分析 1.2.1.第一步 1.2.2.第二步 1.2.3.第三步 1.2.4.第四步 1.3.代码实现 1.4.运行结果 1.Python ...

  3. 以太坊-Mac环境下remix环境搭建

    环境: 设备:MacBookPro 系统:macOS Catalina 10.15.7 芯片: intel i7 Node,npm,nvm安装 Node,npm的安装方式有很多种此处作者第一次通过命令 ...

  4. FastDFS是使用c语言编写的开源高性能分布式文件系统

    FastDFS是什么 FastDFS是使用c语言编写的开源高性能分布式文件系统 是由淘宝开发平台部资深架构师余庆开发,FastDFS孵化平台板块 他对文件进行管理,功能包括文件存储,文件同步,文件访问 ...

  5. 什么是EL表达式,以及作用

    1.概念 EL(Expression Language) 是为了使JSP写起来更加简单.减少java代码,便于开发和维护. 2.语法 格式都是以"${}"表示. 3.与运算符 EL ...

  6. 第十五篇 -- QListWidget与QToolButton(界面)

    效果图: 这还只是一个界面,并没有实现相应功能. 先看下这图的构成吧. 工具栏的就是将Action拖上去,这部分前面已经介绍过了,那就看下面这部分的构图. 1.左侧是一个工具箱(ToolBox)组件, ...

  7. Python基础之用tkinter写界面

    参考链接:https://blog.csdn.net/qq_37482202/article/details/84201259 Tkinter介绍 Tkinter(也叫Tk接口)是Tk图形用户界面工具 ...

  8. 深入刨析tomcat 之---第7篇 这个是链接,如果使用idea 创建servlet工程

    recoded by 张艳涛 使用IDEA创建Servlet项目 使用IDEA创建Servlet项目

  9. java标识符,关键字,注释及生成Doc文档

    # java语法基础 ## 标识符,关键字与注释 ### 标识符 1.类名,变量名,方法名都称为标识符. 2.命名规则:(1):所有的标识符都应该以字母(AZ,或者az)美元符($)或者下划线(_)开 ...

  10. Netty 源码分析系列(二)Netty 架构设计

    前言 上一篇文章,我们对 Netty做了一个基本的概述,知道什么是Netty以及Netty的简单应用. Netty 源码分析系列(一)Netty 概述 本篇文章我们就来说说Netty的架构设计,解密高 ...