我曾多次阅读http协议,但是理解依然不深,在此,再次阅读,再次理解。加深两点:解析头部信息\r\n,分解头部和主体用\r\n\r\n。之所以一次请求会看到网络里有很多请求,是因为浏览器代替访问了多次!程序只管处理一次即可!

HTTP请求

步骤1:浏览器首先向服务器发送HTTP请求,请求包括:

方法:GET还是POST,GET仅请求资源,POST会附带用户数据;

路径:/html/path;

域名:由Host头指定:Host: www.sina.com.cn

以及其他相关的Header;

如果是POST,那么请求还包括一个Body,包含用户数据。

步骤2:服务器向浏览器返回HTTP响应,响应包括:

响应代码:200表示成功,3xx表示重定向,4xx表示客户端发送的请求有错误,5xx表示服务器端处理时发生了错误;

响应类型:由Content-Type指定;

以及其他相关的Header;

通常服务器的HTTP响应会携带内容,也就是有一个Body,包含响应的内容,网页的HTML源码就在Body中。

步骤3:如果浏览器还需要继续向服务器请求其他资源,比如图片,就再次发出HTTP请求,重复步骤1、2。

Web采用的HTTP协议采用了非常简单的请求-响应模式,从而大大简化了开发。当我们编写一个页面时,我们只需要在HTTP请求中把HTML发送出去,不需要考虑如何附带图片、视频等,浏览器如果需要请求图片和视频,它会发送另一个HTTP请求,因此,一个HTTP请求只处理一个资源。

HTTP协议同时具备极强的扩展性,虽然浏览器请求的是http://www.sina.com.cn/的首页,但是新浪在HTML中可以链入其他服务器的资源,比如<img src="http://i1.sinaimg.cn/home/2015/1008/U8455PxDT20131008135420.png">,从而将请求压力分散到各个服务器上,并且,一个站点可以链接到其他站点,无数个站点互相链接起来,就形成了World Wide Web,简称WWW。

HTTP格式

每个HTTP请求和响应都遵循相同的格式,一个HTTP包含Header和Body两部分,其中Body是可选的。

HTTP协议是一种文本协议,所以,它的格式也非常简单。HTTP GET请求的格式:

GET /path HTTP/1.1
Header1: Value1
Header2: Value2

每个Header一行一个,换行符是\r\n

HTTP POST请求的格式:

POST /path HTTP/1.1
Header1: Value1
Header2: Value2body data goes here...

当遇到连续两个\r\n时,Header部分结束,后面的数据全部是Body。

HTTP响应的格式:

200 OK
Header1: Value1
Header2: Value2
body data goes here...

HTTP响应如果包含body,也是通过\r\n\r\n来分隔的。请再次注意,Body的数据类型由Content-Type头来确定,如果是网页,Body就是文本,如果是图片,Body就是图片的二进制数据。

当存在Content-Encoding时,Body数据是被压缩的,最常见的压缩方式是gzip,所以,看到Content-Encoding: gzip时,需要将Body数据先解压缩,才能得到真正的数据。压缩的目的在于减少Body的大小,加快网络传输。

转载于:https://www.cnblogs.com/yougewe/p/4966379.html

再次理解HTTP请求过程[概念原理篇]相关推荐

  1. 深入理解WEB请求过程

    随着web2.0时代的到来,互联网的网络架构已经从传统的C/S架构转变成更加方便快捷的B/S架构,B/S架构大大简化了用户使用网络应用的难度,带来了以下两方面的好处: 1.客户端使用统一的浏览器.由于 ...

  2. 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

    作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...

  3. Faster RCNN原理篇(一)——Bounding-Box Regression边界框回归的学习和理解

    Bounding-Box Regression边界框回归的学习和理解 引言 1. (Why?)为何要做边框回归? 2. (What?)什么是边框回归? 3. (How?)如何实现边框回归? 4. 边框 ...

  4. 理解:商业模式探索 - 概念基础篇(附思维导图)

    [商业模式]这个词可以算是所有商业活动中的最高频词了,高频到成了我们"最熟悉的陌生人",就像所有人都在说人工智能.区块链,但是真正理解的并不多.产品经理的行为本质上就是商业行为,所 ...

  5. (原理篇)FFT与NTT (快速傅里叶变换)摘自oiwi,仅方便理解

    题目大多来自于2022杭电多校与牛客多校,且绝大多数为NTT,学了一个暑假的,从初学者的角度理解题目,理论学习方面是从oiwiki上学来的,板子用的是jls板子. FFT与NTT的应用 FFT是使用复 ...

  6. golang 关闭制定名称的 tomcat_Tomcat原理详解及请求过程

    点击蓝字"程序员考拉"欢迎关注! Tomcat是一个JSP/Servlet容器.其作为Servlet容器,有三种工作模式:独立的Servlet容器.进程内的Servlet容器和进程 ...

  7. TOMCAT原理详解及请求过程

    Tomcat: Tomcat是一个JSP/Servlet容器.其作为Servlet容器,有三种工作模式:独立的Servlet容器.进程内的Servlet容器和进程外的Servlet容器. Tomcat ...

  8. 前端面试题之浏览器原理篇

    前端面试题之浏览器原理篇 一.浏览器安全 1. 什么是 XSS 攻击? (1)概念 (2)攻击类型 2. 如何防御 XSS 攻击? 3. 什么是 CSRF 攻击? (1)概念 (2)攻击类型 4. 如 ...

  9. Android卡顿掉帧问题分析之原理篇

    当用户抱怨手机在使用过程中存在卡顿问题的时候,会严重影响用户对手机品牌的好感和应用APP的体验,从而导致用户对手机品牌的忠诚度降低或应用APP的装机留存率下降.所以无论是手机设备厂商还是应用APP开发 ...

最新文章

  1. MSDN-9月杂志推荐
  2. MacOS系统下简单安装以及配置MongoDB数据库(一)
  3. 《我在51CTO微职位学软考——奋发之路》
  4. Project interpreter not specified(eclipse+pydev)
  5. 本地git和远程github连接完整教程
  6. mysql 十八哥_十八哥Mysql笔记之基础篇
  7. 如何在ubuntu中编写python_在ubuntu下编写python(python入门)
  8. 【效率技巧】利用TI计算器的程序映射功能 kbdprgm1()~9() 简化GTC程序调试操作
  9. 前端学习笔记-22-浏览器中的DOM操作
  10. r5驱动 索尼exmor_卡片机“X”档案 ——索尼Exmor R CMOS技术解析
  11. 格力支持鸿蒙吗,董明珠万没想到,格力终将被美的超越,华为鸿蒙“功不可没”...
  12. 深度解读 RocketMQ 存储机制
  13. 使用 SharePoint 2007 进行安全性编程(SPUser,SPGroup,SPSiteGroups)
  14. Chapter 8 Part-of-Speech Tagging
  15. nginx验证微信文件
  16. 武大地理信息科学本科生的专业相关网站总结分享(包括制图、专业课、自学复习等)
  17. Ajax --- 客户端与服务器端之间传递数据
  18. python 升级setuptools_python3.6升级及setuptools、pip安装
  19. IBM服务器硬盘灯不正常闪烁的解决办法(新硬盘绿灯闪烁)
  20. 高薪前端都应该具备的开发好习惯

热门文章

  1. python中文显示不出来_Python查询数据库,中文的结果显示不出来
  2. neoterm如何安装python_NeoTerm官方版v2.1.0下载_NeoTerm(21世纪的终端)下载-刷机之家
  3. 大数据与商业地理分析
  4. 机器学习决策树_机器学习-决策树 Decision Tree
  5. 孙鑫-MFC笔记十--修改应用程序外观
  6. Shiro教程_2 Shiro+SpringBoot+Mysql+Redis(缓存)
  7. scala List入门到熟悉
  8. Opencv_缺少CV_CAP_PROP_FRAME_WIDTH
  9. Django REST框架--认证和权限
  10. Monkey King