HTTP协议
HTTP协议的组成
请求
请求行:请求方式 请求地址(url) 请求协议
请求头:key:value
/r/n(空行)
请求主体:xxxxx(也可以没有)
请求示例
POST \hello HTTP\1.1
Host: localhost
Content-type: application/x-www-form-urlencoded
Content-length: 5
age=5
请求方式
GET POST HEAD PUT
HEAD 和GET基本一致,只是不返回内容
TRACE DELETE OPTIONS
TRACE 用了代理,可查看代理是否篡改了你的HTTP请求,服务器会把他接收到的HTTP请求返回给你
OPTIONS 可以返回服务器支持的请求方式
注意:这些请求方式虽然HTTP里面规定了,但服务器未必允许或支持这些方式
响应
响应行:协议 状态码 状态文字
响应头:key:value
/r/n(空行)
响应主体:xxxxx(也可能没有)
响应示例
HTTP/1.1 200 OK
Content-type:text/html
Content-length:5
hello
状态码和状态文字
状态码 | 定义 | 说明 |
---|---|---|
1XX | 信息 | 接收到请求,继续处理 |
2XX | 成功 | 操作成功地收到,理解和接受 |
3XX | 重定向 | 为了完成请求,必须采取进一步措施 |
4XX | 客户端错误 | 请求的语法有错误或不能完全被满足 |
5XX | 服务端错误 | 服务器无法完成明显有效的请求 |
200 OK 请求成功
301/302 永久/临时重定向
304 Not Modified 未修改(客户端可用缓存)
307 请求保持
404 网页不存在
503 服务器暂不可用
500 服务器内部错误
HTTP缓存
服务器发送etag modified等信息,对不经常变更的资源做一个标记(如图片),浏览器下次带着这些头信息发给服务器进行校验,如果发生改变,则重新响应,否则不响应内容,浏览器直接从缓存中读取,可以降低服务器请求压力。
有些服务器之间可以用Cache_control头信息进行缓存控制
头信息: Referer
这个头部信息可以携带获取资源的主站信息,以判断我们的服务器资源被谁访问了,可以以此来制作防盗链
头信息:Content-Encoding
为了提高网页传输速率,服务器会对内容进行压缩。
常见的有:gzip压缩、deflate压缩、compress压缩、sdch压缩(Google Chrome曾推)
服务器如何知道我们是否支持gzip等压缩方式呢?
答:客户端可以发送一个Accept-Encoding:xxxx,xxxx,…
与服务器协商
HTTP协议与持久链接+分块传输–>反向ajax
反向ajax又叫comet, server push,服务器推技术.
应用范围:网页聊天服务器.
原理:一般而言, HTTP协议的特点连接<->断开.
具体什么时间断开?
答:服务器响应content-length,收到到指定length长度的内容时,也就断开了
在HTTP1.1协议中,允许你不写content-length,比如要发送的内容长度确实不知道时.
这时需要一个特殊的头信息 Content-type:chunked
分块传输的原理是这样的:
123H\r\n
123H个长度的内容传输给给客户端
…
41H\r\n
浏览器继续接收41H长度的内容
…
0\r\n (服务器说内容发完了)