本文为博主原创,未经允许不得转载:

    HTTP 全称为:超文本传输协议(HyperText Transfer Protocol,HTTP),一种无状态的,以请求/应答方式运行的协议,

  它使用可扩展的语义和自描述消息格式,与 基于网络的超文本信息系统灵活的互动 。

    1.HTTP报文格式

      HTTP 协议的请求报文和响应报文的结构基本相同,由三大部分组成:      

      •  起始行(start line):描述请求或响应的基本信息

      •  头部字段集合(header):使用 key-value 形式更详细地说明报文

      •  消息正文(entity):实际传输的数据,它不一定是纯文本,可以是图片、视频 等二进制数据

    2.请求行报文格式

      

        • 请求方法:如 GET/HEAD/PUT/POST,表示对资源的操作;

        • 请求目标:通常是一个 URI,标记了请求方法要操作的资源;

        • 版本号:表示报文使用的 HTTP 协议版本。

    3.响应行报文格式

      

      • 版本号:表示报文使用的 HTTP 协议版本;

      • 状态码:一个三位数,用代码的形式表示处理的结果,比如 200 是成功,500 是服务器错误;原因:作为数字状态码补充,是更详细的解释文字,帮助人理解原因

      • 原因:作为数字状态码补充,是更详细的解释文字,帮助人理解原因

    4.HTTP 头字段

       头部字段是 key-value 的形式,key 和 value 之间用“:”分隔,最后用 CRLF 换行表示字 段结束。比如前后分离时经常遇到的要与后端协商

    传输数据的类型“Content-type: application/json”,这里 key 就是“Content-type”,value 就 是“application/json”。HTTP 头字段非常灵活,

    不仅可以使用标准里的 Host、 Connection 等已有头,也可以任意添加自定义头,这就给 HTTP 协议带来了无限的扩展可 能。

      

    头字段注意事项

      • 字段名不区分大小写,字段名里不允许出现空格,可以使用连字符“-”,但不 能使用下划线“”(有的服务器不会解析带“”的头字段)。

      • 字段名后面必须紧接 着“:”,不能有空格,而“:”后的字段值前可以有多个空格;

      • 字段的顺序是没有意义的,可以任意排列不影响语义;

      • 字段原则上不能重复,除非这个字段本身的语义允许,例如 Set-Cookie。

  

    5.常用头字段

    HTTP 协议中有非常多的头字段,但基本上可以分为以下几类:

      • 请求字段:请求头中的头字段;如Host,Referer。

      • 响应字段:响应头中的头字段,如:Server;

      • 通用字段:在请求头和响应头里都可以出现,如 Content-type, Connection ;

6.http请求解析完整过程

      当用户在浏览器输入网址回车之后,网络都做了哪些工作呢?

    1.   首先干活的事浏览器应用程序,他要解析出url中的域名

    2.   根据域名获取对应的ip地址,首先从浏览器缓存中查看,如下可以查看浏览器中域名对应的ip的解析

chrome://net-internals/

    如果没有则从本机域名解析文件host(/etc/hosts)中查看,还没有则从LDNS(LocalDnsServer),RootServer 域名服务器,国际顶级域名服务商的DNS的层层解析。

  1. 拿到IP地址后,浏览器就可以发起于服务器的三次握手

  2. 握手建立之后,就开始组装http请求报文,发送报文

  3. 服务器收到请求报文之后开始,请求报文解析,生成响应数据,发送响应数据

  4. 浏览器收到响应之后,开始渲染页面

HTTP 及 http 请求解析过程的更多相关文章

  1. HTTP请求解析过程 (简单概括)

    1.域名解析 用户输入网址,由域名系统DNS解析输入的网址: 2.TCP的3次握手 通过域名解析出的IP地址来向web服务器发起TCP连接请求,如果3次握手通过,则与web服务端建立了可靠的连接: 3 ...

  2. 一次 HTTP 请求响应过程的完整解析

    因特网无疑是人类有史以来最伟大的设计,它互联了全球数亿台计算机.通讯设备,即便位于地球两端的用户也可在顷刻间完成通讯. 可以说『协议』是支撑这么一个庞大而复杂的系统有条不紊运作的核心,而所谓『协议』就 ...

  3. Android之三种网络请求解析数据(最佳案例)

    AsyncTask解析数据 AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法. ...

  4. DNS原理及其解析过程 精彩剖析

    本文章转自下面:http://369369.blog.51cto.com/319630/812889 DNS原理及其解析过程 精彩剖析 网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址 ...

  5. DNS解析过程详解

    先说一下DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点 ...

  6. DNS原理及其解析过程【精彩剖析】(转)

      2012-03-21 17:23:10 标签:dig wireshark bind nslookup dns 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否 ...

  7. dig理解DNS的解析过程 - 阿权的书房

    关于DNS的常识,可以阅读附录的一些参考资料.本文旨在尝试举例用dig命令理解这个过程,并非权威知识,仅供参考.测试域名为阿权的书房的域名 www.aslibra.com 和 www.163.com. ...

  8. 从零开始写一个Tomcat(叁)--请求解析

    挖坑挖了这么长时间也该继续填坑了,上文书讲到从零开始写一个Tomcat(贰)--建立动态服务器,讲了如何让服务器解析请求,分离servlet请求和静态资源请求,读取静态资源文件输出或是通过URLCla ...

  9. live555学习之RTSP连接建立以及请求消息处理过程

    1,RTSP连接的建立过程    RTSPServer类用于构建一个RTSP服务器,该类同时在其内部定义了一个RTSPClientSession类,用于处理单独的客户会话.    首先创建RTSP服务 ...

  10. Asp.Net请求响应过程

    Asp.Net请求响应过程 在之前,我们写了自己的Asp.Net框架,对整个流程有了一个大概的认识.这次我们来看一下Asp.Net整个请求处理过程是怎么样的. 浏览器封装请求报文,发送请求到达服务器, ...

随机推荐

  1. 解决C#连接MySQL数据库报错 MySqlConnector

    如果主机不支持 SSL 连接,则不会使用 SSL 连接. 连接不上. 解决方案:在连接字符串后添加 sslmode = none. <add key="connstring" ...

  2. Python——第二章:单引号(')、双引号(")、花括号 {}的用法及注意事项

    在Python中,字符串可以用单引号(')或双引号(")括起来,它们在用法上没有本质区别.你可以根据个人偏好来选择使用单引号或双引号来创建字符串. 例如: 使用单引号括起的字符串: prin ...

  3. 11 个步骤完美排查Linux服务器是否被入侵

    文章来源公众号:LemonSec 随着开源产品的越来越盛行,作为一个Linux运维工程师,能够清晰地鉴别异常机器是否已经被入侵了显得至关重要,个人结合自己的工作经历,整理了几种常见的机器被黑情况供参考 ...

  4. 记一次 .NET某收银软件 非托管泄露分析

    一:背景 1. 讲故事 在我的分析之旅中,遇到过很多程序的故障和杀毒软件扯上了关系,有杀毒软件导致的程序卡死,有杀毒软件导致的程序崩溃,这一篇又出现了一个杀毒软件导致的程序非托管内存泄露,真的是分析多 ...

  5. 设计模式Java实战,彻底学会

    ​ ​这是全网最强的Java设计模式实战教程.此教程用实际项目场景,结合SpringBoot,让你真正掌握设计模式. 网址是:Java设计模式实战专栏介绍 - 自学精灵(也可以百度搜索"自学 ...

  6. Git commit emoji 对照表

    emoji emoji代码 commit说明 (调色板) :art: 改进代码结构/代码格式 ️ (闪电) :zap: 提升性能 (赛马) :racehorse: 提升性能 (火焰) :fire: 移 ...

  7. 教你如何基于MindSpore进行ChatGLM微调

    本文分享自华为云社区<基于MindSpore的ChatGLM微调>,作者: JeffDing . 基于MindSpore的ChatGLM微调 克隆Hugging Face模型 克隆chat ...

  8. 云小课 | 玩转HiLens Studio之手机实时视频流调试代码

    摘要:在开发技能过程中,搭配视频流调试技能是非常必要的环节,也是检验技能效果的重要环节.HiLens Studio推出使用手机实时视频流调试代码的功能,以手机摄像头实时的视频流作为技能输入,查看技能输 ...

  9. GaussDB (for Cassandra) 数据库治理:大key与热key问题的检测与解决

    摘要:GaussDB(for Cassandra) 提供了大key和热key的实时检测,以帮助业务进行合理的schema设计,规避业务稳定性风险. 本文分享自华为云社区<GaussDB (for ...

  10. 总结MySQL 的一些知识点:MySQL 连接的使用

    MySQL 连接的使用 在前几章节中,我们已经学会了如何在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据. 本章节我们将向大家介绍如何使用 MySQL 的 JOIN ...