http 请求报文
参考文章
三部分组成: 状态行
、请求头
、消息主体
头信息
- [method]:GET/POST
- Content-Type : 提交的数据编码方式 (详情见后)
- If-Modified-Since:告诉浏览器是否需要返回新的资源,不返回,使用本地,响应 304 Not Modified
- Connection:【Keep-Alive】,默认是不设置,设置了,不用重新建立(TCP连接), 请求头里有该信息,响应头里也会有该信息
- Content-Length : 数据长度 (动态生成的文件没有该属性,是以 Transfer-Encoding[chunked] 分块传输)
- Transfer-Encoding :chunked (数据的传输格式)
表头信息解释
Content-Type
Content-Type
(POST 方式的):
application/x-www-form-urlencoded
表单方式 【浏览器 默认是该种方式】multipart/form-data
使用表单上传文件时,必须让 表单的 enctype 等于 multipart/form-data
Content-Type
(其他方式)
前提是服务器端能解析Content-Type
和 Content-Encoding
的以下几种方式
application/json
text/xml
xml 格式application/x-protobuf
二进制格式multipart
消息主体 Content-Type
POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
Connection
是否与服务器端保持连接
如何知道 服务器 与 客户端(浏览器) 断开连接
- Keep-Alive: timeout=5, max=100
表示tcp保持连接5s,最多100次请求后就断开
GET
仅仅用于信息获取
例如
GET /books/?sex=man&name=Professional HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive
POST
用于提交资源修改
POST / HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive
// 请求body
sex=man&name=Professional
GET 与 POST 对比
1.http URL
GET
http URL 的长度有限制; POST
http URL 的长度没有限制;
2.请求信息
GET
请求信息在 URL
里 POST
请求信息在 请求body
里
http 响应报文
三部分组成: 状态行
、响应头
(Response Header)、响应正文
状态行
状态行由协议版本、数字形式的状态代码、及相应的状态描述,各元素之间以空格分隔。
常见状态信息解释
- 200 OK 客户端请求成功
- 301 Moved Permanently 请求永久重定向
- 302 Moved Temporarily 请求临时重定向
- 304 Not Modified 文件未修改,可以直接使用缓存的文件。
- 400 Bad Request 由于客户端请求有语法错误,不能被服务器所理解。
- 401 Unauthorized 请求未经授权。这个状态代码必须和WWW-Authenticate报头域一起使用
- 403 Forbidden 服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因
- 404 Not Found 请求的资源不存在,例如,输入了错误的URL
- 500 Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求。
- 503 Service Unavailable 服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。
HTTP Pipelining(HTTP 管线化)
非 Pipelining
方式:请求1 -> 响应1 -> 请求2 -> 响应2 -> 请求3 -> 响应3。 Pipelining
方式:请求1 -> 请求2 -> 请求3 -> 响应1 -> 响应2 -> 响应3;[仅 HTTP/1.1 支持此技术]
特点:
- 管线化机制通过持久连接(persistent connection)完成,仅 HTTP/1.1 支持此技术(HTTP/1.0不支持)
- 只有 GET 和 HEAD 请求可以进行管线化,而 POST 则有所限制
- 初次创建连接时不应启动管线机制,因为对方(服务器)不一定支持 HTTP/1.1 版本的协议
- 管线化不会影响响应到来的顺序,如上面的例子所示,响应返回的顺序并未改变
- HTTP /1.1 要求服务器端支持管线化,但并不要求服务器端也对响应进行管线化处理,只是要求对于管线化的请求不失败即可
- 由于上面提到的服务器端问题,开启管线化很可能并不会带来大幅度的性能提升,而且很多服务器端和代理程序对管线化的支持并不好,因此现代浏览器如 Chrome 和 Firefox 默认并未开启管线化支持