标签:Web HTTP 请求 WEB 对象 TCP 服务器 应用层
WEB应用
Web与HTTP
- World Wide Web: Tim Berners-Lee
- 只有二十多年的历史
- 依靠HTTP协议
构成
- 网页(Web Page)
- 包含多个对象(Objects)
- HTML、JPEG、视频文件、动态脚本等
- 基本HTML文件:包含对其他对象引用的链接
- 对象的寻址(addressing)
- URL(Uniform Resource Locator): 统一资源定位器 RFC1738
Scheme://host:port/path
- 包含多个对象(Objects)
- 网页互相链接
HTTP协议概述
- 超文本传输协议 HyperTExt Transfer Protocol
- C/S结构
- 客户 - Browser:请求、接收、展示Web对象
- 服务器 - Web Server:响应客户请求,发送请求
- Web应用进程与TCP连接之间的门
- 套接字
- 使用TCP传输服务
- Server port 80 等待请求
- 浏览器i发送TCP连接(创建socket)
- 服务器接收TCP连接
- 浏览器(HTTP客户端)与Web服务器(HTTP服务器)交换消息
- 关闭TCP连接
- 无状态
- 服务器不维护任何有关客户端过去所发请求的信息
- 解释服务器响应
- HTTP只负责传输文件
- 对接收页面的解释由客户端应用(浏览器)进行
- 可扩展!
HTTP连接的两种类型
- 非持久性连接(Nonpersistent Http)
- 每个TCP连接最多允许传输一个对象
- HTTP 1.0 version
- 持久性连接(Persistent HTTP)
- 每个TCP连接允许传输多个对象
- HTTP 1.1 version 默认使用
非持久性连接
响应时间分析与建模
-
RTT(Round Trip Time)
- 从客户端发送一个很小的数据包到服务器并返回所经历的时间
-
响应时间(Response Time)
- 发起、建立TCP:1 RTT
- 发送HTTP请求到HTTP响应消息的前几个字节到达:1 RTT
- 响应消息所含文件/对象的传输时间
- Total = 2 * RTT + 文件发送时间
问题
- 每个对象需要2个RTT
- 操作系统需要为每个TCP连接开销资源(overhead)
- 浏览器
- 打开多个并行的TCP连接获取网页对象
- 增加服务器负担
持久性连接
- 发送响应后,服务器保持TCP连接的打开
- 后续的HTTP消息可以通过该连接发送
分类
- 无流水(pipelining)的持久性连接
- 客户但只有收到前一个响应后才发送新的请求
- 每个被引用的对象耗时1个RTT
- 带流水机制的持久性连接
- HTTP 1.1默认选项
- 客户端只要遇到一个引用对象就尽快发出请求
- 理想情况下,收到所有的引用对象只需耗时约1个RTT
- 可以通过配置浏览器控制并行度
HTTP消息格式
两类消息
- 请求消息
- 响应消息
请求消息
格式
- 请求行
- 请求方法
- URL
- HTTP版本
- 头部行
- Host:有代理/缓存服务器时才有意义
- User-agent:浏览器类型
- Connection:是否关闭连接
- Accept-language:语言
- 内容协商头部
- 如果无法满足则发送默认版本
- 空行
- 表示头部结束
- 消息体
- 使用GET时为空
- POST时使用
上传输入的方法
- POST
- 填写表单(form)
- 在请求消息的消息体(entity body)中上传
- GET
- 输入信息通过request行的URL字段上传
方法类型
- HTTP/1.0
- GET
- POST
- HEAD
- 请Server不要将请求的对象放入响应消息中
- HTTP/1.1 增加
- PUT
- 将消息体中的文件上传到URL字段指定的路径
- DELETE
- 删除URL字段所指定的文件
- PUT
HTTP响应消息
组成
- 状态行
- version
- status code
- status
- 头部行
- Connection:TCP连接关闭或保持
- Date:生成响应消息的时间
- Server:Web服务器类型
- Last-Modified:网页上一次修改的时间
- Content-Length
- Content-Type
- 对象类型由Content-Tyep而不是文件扩展名指示
- 请求对象
状态码
- 200 OK
- 301 Moved Permanently
- 对象已被转移
- 新的URL定义在:头部Location中
- 400 Bad Request
- 服务器无法理解请求
- 404 Not Found
- 请求对象不在服务器上
- 505 Http Version Not Supported
- 不支持请求使用的HTTP协议版本
换一种方式体验HTTP
- telnet
COOKIE技术
为什么需要Cookie?
- HTTP协议无状态的
- 网上购物一类的应用需要记录客户端状态
概述
- 为了辨别用户身份、进行session跟踪而存储在用户本地终端上的数据(通常经过加密)
- RFC6265
组件
- HTTP响应消息的cookie头部行
- HTTP请求消息的cookie头部行
- 保存在客户端主机上的cookie文件。由浏览器管理
- Web服务器端的后台数据库
原理
- Set-cookie: 1678
作用
- 身份认证
- 购物车
- 个性化推荐
- Web Email
隐私问题
- 你在网络上的举动都被记录了
Web缓存/代理服务器技术
- 功能
- 在不访问服务器的前提下满足客户端的HTTP请求
- 提升性能
- 作用
- 缩短客户请求的响应时间
- 减少机构/组织的流量
- 在大范围内(Internet)实现有效的内容分发
- 原理
- 用户设定浏览器通过缓存进行Web访问
- 浏览器向缓存/代理服务器发送所有的HTTP请求
- 请求对象已缓存,返回对象
- 未缓存,代理请求对象,返回客户端并保存该对象
- 即充当客户端、也充当服务器
- 一般由ISP架设
例子
问题
- 对象在缓存服务器中,但是是否和远程服务器一致?
解决
- 条件性GET
- 缓存
- 在HTTP请求消息中声明所持有版本的日期
- 包含首部行:if-modified-since:
- 服务器
- 如果是最新的,响应中不包括对象
- HTTp/1.0 304 Not Modified
- 缓存
标签:Web,HTTP,请求,WEB,对象,TCP,服务器,应用层 来源: https://blog.csdn.net/weixin_39578432/article/details/120389623
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。