再次理解HTTP请求过程[概念原理篇]
我曾多次阅读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请求过程[概念原理篇]相关推荐
- 深入理解WEB请求过程
随着web2.0时代的到来,互联网的网络架构已经从传统的C/S架构转变成更加方便快捷的B/S架构,B/S架构大大简化了用户使用网络应用的难度,带来了以下两方面的好处: 1.客户端使用统一的浏览器.由于 ...
- 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...
- Faster RCNN原理篇(一)——Bounding-Box Regression边界框回归的学习和理解
Bounding-Box Regression边界框回归的学习和理解 引言 1. (Why?)为何要做边框回归? 2. (What?)什么是边框回归? 3. (How?)如何实现边框回归? 4. 边框 ...
- 理解:商业模式探索 - 概念基础篇(附思维导图)
[商业模式]这个词可以算是所有商业活动中的最高频词了,高频到成了我们"最熟悉的陌生人",就像所有人都在说人工智能.区块链,但是真正理解的并不多.产品经理的行为本质上就是商业行为,所 ...
- (原理篇)FFT与NTT (快速傅里叶变换)摘自oiwi,仅方便理解
题目大多来自于2022杭电多校与牛客多校,且绝大多数为NTT,学了一个暑假的,从初学者的角度理解题目,理论学习方面是从oiwiki上学来的,板子用的是jls板子. FFT与NTT的应用 FFT是使用复 ...
- golang 关闭制定名称的 tomcat_Tomcat原理详解及请求过程
点击蓝字"程序员考拉"欢迎关注! Tomcat是一个JSP/Servlet容器.其作为Servlet容器,有三种工作模式:独立的Servlet容器.进程内的Servlet容器和进程 ...
- TOMCAT原理详解及请求过程
Tomcat: Tomcat是一个JSP/Servlet容器.其作为Servlet容器,有三种工作模式:独立的Servlet容器.进程内的Servlet容器和进程外的Servlet容器. Tomcat ...
- 前端面试题之浏览器原理篇
前端面试题之浏览器原理篇 一.浏览器安全 1. 什么是 XSS 攻击? (1)概念 (2)攻击类型 2. 如何防御 XSS 攻击? 3. 什么是 CSRF 攻击? (1)概念 (2)攻击类型 4. 如 ...
- Android卡顿掉帧问题分析之原理篇
当用户抱怨手机在使用过程中存在卡顿问题的时候,会严重影响用户对手机品牌的好感和应用APP的体验,从而导致用户对手机品牌的忠诚度降低或应用APP的装机留存率下降.所以无论是手机设备厂商还是应用APP开发 ...
最新文章
- MSDN-9月杂志推荐
- MacOS系统下简单安装以及配置MongoDB数据库(一)
- 《我在51CTO微职位学软考——奋发之路》
- Project interpreter not specified(eclipse+pydev)
- 本地git和远程github连接完整教程
- mysql 十八哥_十八哥Mysql笔记之基础篇
- 如何在ubuntu中编写python_在ubuntu下编写python(python入门)
- 【效率技巧】利用TI计算器的程序映射功能 kbdprgm1()~9() 简化GTC程序调试操作
- 前端学习笔记-22-浏览器中的DOM操作
- r5驱动 索尼exmor_卡片机“X”档案 ——索尼Exmor R CMOS技术解析
- 格力支持鸿蒙吗,董明珠万没想到,格力终将被美的超越,华为鸿蒙“功不可没”...
- 深度解读 RocketMQ 存储机制
- 使用 SharePoint 2007 进行安全性编程(SPUser,SPGroup,SPSiteGroups)
- Chapter 8 Part-of-Speech Tagging
- nginx验证微信文件
- 武大地理信息科学本科生的专业相关网站总结分享(包括制图、专业课、自学复习等)
- Ajax --- 客户端与服务器端之间传递数据
- python 升级setuptools_python3.6升级及setuptools、pip安装
- IBM服务器硬盘灯不正常闪烁的解决办法(新硬盘绿灯闪烁)
- 高薪前端都应该具备的开发好习惯
热门文章
- python中文显示不出来_Python查询数据库,中文的结果显示不出来
- neoterm如何安装python_NeoTerm官方版v2.1.0下载_NeoTerm(21世纪的终端)下载-刷机之家
- 大数据与商业地理分析
- 机器学习决策树_机器学习-决策树 Decision Tree
- 孙鑫-MFC笔记十--修改应用程序外观
- Shiro教程_2 Shiro+SpringBoot+Mysql+Redis(缓存)
- scala List入门到熟悉
- Opencv_缺少CV_CAP_PROP_FRAME_WIDTH
- Django REST框架--认证和权限
- Monkey King