HTTP简介
来源:互联网 发布:不实名域名注册商 编辑:程序博客网 时间:2024/05/01 01:21
1Web的结构组件
1.1代理
代理位于客户端和服务端之间,接受所有客户端的HTTP请求,并将这些请求转发给服务器(可能会对请求进行修改)
1.2缓存
将经过代理传送的常用文档保存起来,供下次请求时传送
1.3网关
网管请求时就好像自己是资源的源端服务器一样,客户端可能并不知道自己正在跟一个网管进行通信. 通常用于将HTTP转换成其他协议.
1.4隧道
用于通过HTTP协议传送其他协议的数据包
1.5Agent代理
代表用户发起HTTP请求的客户端程序,例如Web浏览器
2URL语法
每个URL方案的语法格式是不一样的,但是大多数URL语法都建立在这9给部分构成的通用格式上:
<scheme>://<user>:<password>:<port>/<path>:<params>?<query>#<frag> 这里参数为键值对,URL中可以包含多个参数字段,他们之间以及与路径的其余部分之间用分号;分隔 查询组件的内容没有通用格式,用字符?将其与URL的其余部分分隔开来.例如?key1=value1&key2=value2 片段制定了URL资源中的某个章节
参数例子
ftp://prep.ai.mit.edu/pub/gnu;type=d
查询字符串例子
http://www.joes-hardware.com/inventory-check.cgi?item=12345
片段例子
http://www.joes-hardware.com/tools.html#drills
3HTTP报文
3.1报文的组成
每个报文都由三个部分组成:
对报文进行描述的起始行(start line)
包含属性的首部行(header)
可选的,包含数据内容的主体部分(body)
3.2报文的语法
请求报文格式
<method> <request-URL> <version> <headers>
<entity-body>
响应报文格式
<version> <status> <reason-phrase> <headers>
<entity-body>
3.3方法说明
3.3.1GET
用于请求服务器发送某个资源,该方法为安全方法
GET /season1/index-fall.html HTTP/1.1Host: www.joes-hardware.comAccept: *
3.3.2HEAD
与GET方法类似,但服务器在响应中只返回首部,不会返回实体的主体部分. 该方法也是安全方法
HEAD /season1/index-fall.html HTTP/1.1Host: www.joes-hardware.comAccept: *
使用HEAD可以做到
在不获取资源的情况下了解资源的情况
通过查看响应中的状态码,看看某个对象是否存在
通过查看首部,测试资源是否被修改了.
3.3.3PUT
PUT方法往服务器写入文档,该方法的语义就是用让服务器用主体部分来创建或替代一个由所请求的URL命名的新文档.
PUT /product-list.txt HTTP/1.1Host: www.joes-hardware.comCotent-type: text/plainContent-length: 34Updated product list coming soon!
3.3.4POST
向服务器发送数据,常用于POST HTML的表单数据
3.3.5TRACE
由于客户端发起的请求在经过中间节点时,可能会进行修改. 服务器收到该请求时会返回一个TRACE响应,该响应主体中携带它收到的原始请求报文.
TRAC /season1/index-fall.html HTTP/1.1Host: www.joes-hardware.comAccept: *
3.3.6OPTIONS
询问服务器支持的各种功能
OPTIONS * HTTP/1.1Host: www.joes-hardware.comAccept: *
3.3.7DELETE
请求服务器删除指定文档
DELTE /season1/index-fall.html HTTP/1.1Host: www.joes-hardware.com
3.3.8LOCK
允许用户锁定资源,该方法为扩展方法
3.3.9MKCOL
允许用户创建资源,该方法为扩展方法
3.3.10COPY
便于在服务器上复制资源,该方法为扩展方法
3.3.11MOVE
在服务器上移动资源,该方法为扩展方法
3.4状态码说明
100~199 信息性状态码
200~199 成功状态码
300~399 重定向状态码
400~499 客户端错误状态码
500~599 服务器错误状态码
3.5首部说明
可以有零个或多个首部,每个首部都包含一个名字,后面跟着一个冒号(:),然后是一个可选的空格,接着是一个值,最后是一个CRLF. 首部是由一个空行(CRLF)结束,表示首部列表的结束和实体部分的开始.
3.5.1通用首部
通用首部提供了与报文相关的最基本的信息. 它们可以用于任何报文中
3.5.2请求首部
请求报文是指在请求报文中有意义的首部
3.5.3响应首部
响应首部是响应报文专有的首部
3.5.4实体首部
实体首部提供了有关实体及其内容的大量信息
3.5.5扩展首部
4连接管理
4.1拖慢HTTP的原因
4.1.1TCP连接的握手延迟
TCP连接的握手协议,决定了握手时的前两个报文(SYN与SYN+ACK报文)是无法携带有效信息的. 这是TCP建立连接的必然花费. ACK报文是可以携带有效信息的,因此不算入花费中
4.1.2延迟确认
TCP会对每个报文分段发送确认分组,由于确认报文很小,通常通过输出有效信息时捎带确认信息. 很多TCP会使用一种延迟确认的分组,即在一个特定的时间段内将分组报文缓存起来,以寻找能够携带它的有效信息分组. 当没有足够的有效信息报文时,对每个确认报文都会有一段缓冲时间,这降低了HTTP的效率
4.1.3TCP慢启动
TCP在刚开始时会限制连接的最大速度,如果数据成功传输才会随着时间的推移逐步提高传输的速度. 这种为了防止因特网的突然过载和拥塞的机制称为TCP的慢启动
4.1.4Nagle算法与TCPNODELAY
Nagle算法要求将几个小的TCP数据组到一个大报文中发送,以便提高网络使用率,然而可能HTTP的小数据包很难填满一个大数据包,这造成了延时. 此外nagle算法与延迟确认之间存在交互的影响–Nagle算法会阻止数据的发送,收到确认分组,但确认分组本身会被延迟算法延迟100-200毫秒. TCPNODELAY又可能因为发送大量的小TCP数据而降低网络使用效率.
4.1.5TIMEWAIT累计与端口耗尽
当TCP关闭连接后,会记录下所关闭连接的IP地址和端口,在一段时间内(一般是2分钟)不会再创建具有相同地址和端口的新连接. 由于可用源端口的数量有限,而且在这段时间内无法重用,因此连接率就被限制住了.
4.2解决方案
4.2.1并行连接
通过多条TCP连接发起并发HTTP请求
4.2.2持久连接
重用TCP连接,以消除连接及关闭时延
4.2.3管道化连接
通过共享的TCP连接发起并发的HTTP请求
4.2.4复用的连接
交替传送请求和响应报文(实验阶段)
- HTTP简介
- HTTP简介
- HTTP简介
- HTTP简介
- HTTP简介
- http简介
- HTTP简介
- http简介
- http简介
- http简介
- http简介
- Http简介
- HTTP简介
- HTTP简介
- HTTP简介
- HTTP简介
- HTTP简介
- HTTP简介
- windows版本的Emacs 无法显示图片的解决方法
- GNU Emacs 体系架构评论
- 如何设置让 Org Mode 在默认情况下,不转义 _ 字符呢?
- Awesome window manager使用初探
- DB2里面如何进行快速分页?就像mysql的limit之类的
- HTTP简介
- F5讲座简单笔记
- 《C陷阱与缺陷》读书笔记
- 如何分析复杂的C语言声明
- Emacs中使用SRecode生成Doxygen风格的注释
- Git教程笔记
- 使用ps查看用户进程下的线程运行情况(AIX)
- 当用fopen读写打开文件时,请使用r+,而不是rw
- Emacs中的shell--Eshell使用笔记