URI是下面的这样的形式
各部分标示的意思如下
字符串 | 用途 |
---|---|
http | 协议类型 |
user:pass | 登录服务器的用户名和密码 |
www.example.jp | 服务器地址,还可以用ipv6的标示的表示形式[0:0:0:0:0:0:0:1] |
80 | 端口号 |
index.html | 带层次的文件路径 |
uid=1 | 查询字符串 |
ch1 | 片段标示符,锚 |
请求方法
方法类型 | 说明 | 支持的协议版本 |
---|---|---|
GET | 请求http服务器上的某一个页面资源, 如果请求的是文本资源,保持原样返回;如果是CGI一样的程序,则返回执行后的输出结果,主要目的是想访问资源 | 1.0,1.1 |
POST | post的主要目的是把消息传递给服务器 | 1.0,1.1 |
PUT | 传输文件,但是HTTP/1.1的PUT方法不带验证机制,任何人都可以上传文件, 需要配合web应用程序的验证机制,或REST程序使用。 | 1.0,1.1 |
HEAD | 和GET方法一样,但是不返回报文主体,用于确认URI的有效性和资源更新的日期等 | 1.0,1.1 |
DELETE | 删除文件,但是HTTP/1.1的DELETE方法不带验证机制,任何人都可以删除文件, 需要配合web应用程序的验证机制,或REST程序使用。 | 1.0,1.1 |
OPTIONS | 询问服务器只会哪些请求方法 | 1.1 |
TRACE | 该方法需要配合请求头中的Max-Forwards字段使用,并指定一个初始值, 如果使用了 代理服务器,没经过一个代理服务器,该字段值就会减1, 直到为0,服务器就返回请求内容。可能会引起跨站追踪 | 1.1 |
CONNECT | 要求在于代理服务器通信时候,建立隧道 | 1.1 |
LINK | 建立与资源之间的联系 | 1.0 |
UNLINK | 断开连接关系 | 1.0 |
持久连接
没有持久连接之前,如果一个页面包含多个图片等请求,则每一服务图片的请求,都需要与服务器端建立TPC/IP连接,大大浪费了时间,有了持久连接之后,只需要建立一次TCP/IP连接,就能在其中保持多个HTTP请求和响应。HTTP1.1所有的连接,默认都是持久连接,主要的做法是在请求头中增加了,keep-alive选项
管线化
持久化连接虽然能够,在一次TCP/IP连接内,进行多次HTTP请求,但是这些请求是串行的,只有一个请求结束了之后,才能继续第二个请求。管线化使得在一个TCP/IP连接内,多个请求可以并发执行
使用Cookie做状态管理
HTTP是无状态的协议,它不对之前发生过的请求和响应的状态进行管理,无法根据之前的状态尽心Benin的处理。但是通过服务端向客户端指定一个cookie信息,每次客户端请求的使用,使用这个cookie信息请求服务端,服务端就知道客户端的情况了。
状态码
状态码 | 字段值 | 原因 |
---|---|---|
200 | OK | 成功 |
204 | No Content | 请求已经正确处理,不需要返回任何实体内容 |
206 | Partial Contex | 客户端进行了范围请求,服务器成功执行了这部分范围请求,可用于断点续传 |
301 | Move Permanently | 标示被请求的资源已经被分配了新的URI |
302 | Found | 临时性重定向,访问的URI临时的迁移到另外的地方了,以后还可能会变化, 禁止POST转化为GET |
303 | See Other | 指示客户端以Get形式重定向到另一个URI上去 |
304 | Not Modified | 附带条件的请求时,但是没有找到合适的资源,不包含任何响应的主体部分 |
307 | Temporary Redirect | 禁止POST变为GET |
400 | Bas Request | 请求报文中存在语法错误 |
401 | Unauthorized | 发送的请求需要通过HTTP认证(BASIC,DIGEST) |
403 | Forbidden | 对请求资源的访问被服务器拒绝了 |
404 | Not Found | 服务器没有请求的资源 |
500 | Internal Server Error | 服务器端在执行请求时候发生了错误 |
503 | Service Unavailable | 服务器处于超负载状态,一段时候后再访问 |
通信数据转发程序
代理
转发功能的应用程序
网关
转发其他服务器通信数据的服务器,除了具备代理服务器的相关功能之外,还能够使通信线路上的服务器提供非HTTP协议服务
隧道
建立一条与其他服务器的通信线路,到时候使用SSL等加密手段进行通信。目的是为了确保客户端与服务器进行安全的通信
http的瓶颈
- 一条链接只可发送一个请求
- 请求只能从客户端开始。客户端不可以接受除了响应意外的指令
- 请求/响应首部未经过压缩就发送,首部信息越大延迟越大
- 发送冗长的首部。每次互相发送相同的首部造成浪费较多
- 可选择任意数据的压缩格式。非强制压缩发送
Ajax解决方法
只用于更新一部分页面,使得响应中传输的数据因此减少,缺点:但是会导师大量请求产生。
Comet解决方法
一旦服务器有内容更新,Comet不会让请求等待,而是直接给客户端访问响应,如果服务端没有内容更新,Comet挂起请求,当服务器有更新的时候,再返回响应。缺点:挂起了去请求,消耗服务端资源。
SPDY的解决方法
在协议解决消除HTTP的瓶颈
要求在应用程和传输层之间如下会话层SPDY,并在表示层使用SSL,带来的改变如下:
多路复用流
单一的TCP连接,可以无限制处理多个HTTP请求
赋予请求优先级
这样主要是为了在发送多个请求时候,解决因为带宽低而导致的响应变慢的问题(TODO)
压缩HTTP首部
通信的数据量少了
推送功能
支持服务端主动向客户端发送数据
全双工通信的WebSocket
WebSocket协议的特点
推送功能
支持服务端向客户端推送数据
减少通信量
只要建立了WebSocket连接,就希望一直保持连接状态
为了实现WebSocket通信,在HTTP连接之后,需要完成一次“握手“步骤
握手*请求
设置HTTP hearder
Upgrade: wbsocket
Connection: Upgrade
Sec-WebSocket-Key: XXXXXXXXXXXX
Sec-WebSocket-Protocol : chat, superchat
Sec-WebSocket-Version : 13
握手*响应
对应之前的请求,返回状态码101 Switching Protocols响应
成功确立WebSocket连接之后,通行时不再使用HTTP数据帧,而采用WebSocket独立的数据帧
http不具备必要的安全功能,
因输出值转义不完全而应发的安全漏洞
一般是用户点击了某一个别人写好的 有各种陷阱的链接