HTTP 及 http 请求解析过程

本文涉及的产品
.cn 域名,1个 12个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 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. 浏览器收到响应之后,开始渲染页面

 

标签: 网络与传输协议

目录
相关文章
|
2天前
|
Shell
HTTP状态码解析:在Haskell中判断响应成功与否
HTTP状态码解析:在Haskell中判断响应成功与否
|
8天前
|
数据采集
Haskell爬虫:连接管理与HTTP请求性能
Haskell爬虫:连接管理与HTTP请求性能
|
3天前
|
JSON API 开发者
Python网络编程新纪元:urllib与requests库,让你的HTTP请求无所不能
【9月更文挑战第9天】随着互联网的发展,网络编程成为现代软件开发的关键部分。Python凭借简洁、易读及强大的特性,在该领域展现出独特魅力。本文介绍了Python标准库中的`urllib`和第三方库`requests`在处理HTTP请求方面的优势。`urllib`虽API底层但功能全面,适用于深入控制HTTP请求;而`requests`则以简洁的API和人性化设计著称,使HTTP请求变得简单高效。两者互补共存,共同推动Python网络编程进入全新纪元,无论初学者还是资深开发者都能从中受益。
21 7
|
10天前
|
JSON 监控 API
http 请求系列
XMLHttpRequest(XHR)是一种用于在客户端和服务器之间进行异步HTTP请求的API,广泛应用于动态更新网页内容,无需重新加载整个页面。本文提供了多个官方学习资源,包括MDN Web Docs、WhatWG和W3C的规范文档,涵盖属性、方法、事件及示例代码。XHR的主要应用场景包括动态内容更新、异步表单提交、局部数据刷新等,具有广泛的支持和灵活性,但也存在处理异步请求的复杂性等问题。最佳实践包括使用异步请求、处理请求状态变化、设置请求头、处理错误和超时等。这些资源和实践将帮助你更好地理解和使用XHR。
17 1
|
3天前
|
存储 JSON API
Python编程:解析HTTP请求返回的JSON数据
使用Python处理HTTP请求和解析JSON数据既直接又高效。`requests`库的简洁性和强大功能使得发送请求、接收和解析响应变得异常简单。以上步骤和示例提供了一个基础的框架,可以根据你的具体需求进行调整和扩展。通过合适的异常处理,你的代码将更加健壮和可靠,为用户提供更加流畅的体验。
20 0
|
11天前
|
测试技术 持续交付 开发者
Xamarin 高效移动应用测试最佳实践大揭秘,从框架选择到持续集成,让你的应用质量无敌!
【8月更文挑战第31天】竞争激烈的移动应用市场,Xamarin 作为一款优秀的跨平台开发工具,提供了包括单元测试、集成测试及 UI 测试在内的全面测试方案。借助 Xamarin.UITest 框架,开发者能便捷地用 C# 编写测试案例,如登录功能测试;通过 Xamarin 模拟框架,则可在无需真实设备的情况下模拟各种环境测试应用表现;Xamarin.TestCloud 则支持在真实设备上执行自动化测试,确保应用兼容性。结合持续集成与部署策略,进一步提升测试效率与应用质量。掌握 Xamarin 的测试最佳实践,对确保应用稳定性和优化用户体验至关重要。
24 0
|
11天前
|
中间件 PHP 开发者
深入解析 Laravel 中的 HTTP 中间件
【8月更文挑战第31天】
12 0
|
13天前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
1月前
|
存储 NoSQL Redis
redis 6源码解析之 object
redis 6源码解析之 object
52 6
|
1天前
|
开发工具
Flutter-AnimatedWidget组件源码解析
Flutter-AnimatedWidget组件源码解析

热门文章

最新文章

推荐镜像

更多