HTTP 及 http 请求解析过程

本文涉及的产品
.cn 域名,1个 12个月
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: HTTP 及 http 请求解析过程

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

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

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

  目录

    1.HTTP报文格式

    2.请求行报文格式

    3.响应行报文格式

    4.HTTP 头字段

    5.常用头字段

    6.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. 浏览器收到响应之后,开始渲染页面

 

标签: 网络与传输协议

目录
相关文章
|
3天前
|
安全 网络协议 应用服务中间件
AJP Connector:深入解析及在Apache HTTP Server中的应用
【9月更文挑战第6天】在Java Web应用开发中,Tomcat作为广泛使用的Servlet容器,经常与Apache HTTP Server结合使用,以提供高效、稳定的Web服务。而AJP Connector(Apache JServ Protocol Connector)作为连接Tomcat和Apache HTTP Server的重要桥梁,扮演着至关重要的角色
20 2
|
9天前
|
Shell
HTTP状态码解析:在Haskell中判断响应成功与否
HTTP状态码解析:在Haskell中判断响应成功与否
|
15天前
|
数据采集
Haskell爬虫:连接管理与HTTP请求性能
Haskell爬虫:连接管理与HTTP请求性能
|
7天前
|
JSON JavaScript 前端开发
Haskell中的数据交换:通过http-conduit发送JSON请求
Haskell中的数据交换:通过http-conduit发送JSON请求
|
10天前
|
JSON API 开发者
Python网络编程新纪元:urllib与requests库,让你的HTTP请求无所不能
【9月更文挑战第9天】随着互联网的发展,网络编程成为现代软件开发的关键部分。Python凭借简洁、易读及强大的特性,在该领域展现出独特魅力。本文介绍了Python标准库中的`urllib`和第三方库`requests`在处理HTTP请求方面的优势。`urllib`虽API底层但功能全面,适用于深入控制HTTP请求;而`requests`则以简洁的API和人性化设计著称,使HTTP请求变得简单高效。两者互补共存,共同推动Python网络编程进入全新纪元,无论初学者还是资深开发者都能从中受益。
28 7
|
8天前
|
开发者
HTTP状态码是由网页服务器返回的三位数字响应代码,用于表示请求的处理结果和状态
HTTP状态码是由网页服务器返回的三位数字响应代码,用于表示请求的处理结果和状态
12 1
|
10天前
|
存储 JSON API
Python编程:解析HTTP请求返回的JSON数据
使用Python处理HTTP请求和解析JSON数据既直接又高效。`requests`库的简洁性和强大功能使得发送请求、接收和解析响应变得异常简单。以上步骤和示例提供了一个基础的框架,可以根据你的具体需求进行调整和扩展。通过合适的异常处理,你的代码将更加健壮和可靠,为用户提供更加流畅的体验。
32 0
|
Java Apache
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
hbase从集群中有8台regionserver服务器,已稳定运行了5个多月,8月15号,发现集群中4个datanode进程死了,经查原因是内存 outofMemory了(因为这几台机器上部署了spark,给spark开的...
805 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
最近在线上往hbase导数据,因为hbase写入能力比较强,没有太在意写的问题。让业务方进行历史数据的导入操作,中间发现一个问题,写入速度太快,并且业务数据集中到其中一个region,这个region无法split掉,处于不可用状态。
1321 0
|
Web App开发 前端开发

推荐镜像

更多