1. HTTP报文基本格式
HTTP请求报文组成:请求行+请求头+请求体
- 请求行:包含用于请求的方法(HEAD/GET/POST),请求 URI 和 HTTP 版本。
- 请求头:客户端的Cookie和User-Agent就放在这里.
- 请求体: 比如客户端POST的数据就放在这里(对比:GET的数据放在请求行的URL里).
HTTP响应报文组成:响应行+响应头+响应体
- 响应行/状态行:包含表明响应结果的状态码,状态码描述和 HTTP 版本。
- 响应头: 服务器的Set-Cookie和Server信息就放在这里.
- 响应体: 比如服务器返回的HTML和JSON数据就放在这里
请求头有哪些内容?
•Accept:浏览器可接受的MIME类型
•Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
•Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip
•Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。可以在浏览器中进行设置。
•Host:初始URL中的主机和端口
•Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面
•Content-Type:内容类型
•If-Modified-Since: Wed, 02 Feb 201112:04:56 GMT利用这个头与服务器的文件进行比对,如果一致,则从缓存中直接读取文件。
•User-Agent:浏览器类型.
•Content-Length:表示请求消息正文的长度
•Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接
•Cookie:这是最重要的请求头信息之一
•Date:Date: Mon, 22 Aug 2011 01:55:39 GMT请求时间GMT
一个完整的HTTP请求如下:
GET /sample.jsp HTTP/1.1 //请求行
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0) //请求头
Accept:image/gif.image/jpeg,*/* //请求头:指定客户端能够接收的内容格式类型
Accept-Language:zh-cn //请求头:指定客户端能够接受的语言类型
Connection:Keep-Alive //请求头:是否开启持久连接(keepalive)
Host:localhost //请求头:服务器域名
Accept-Encoding:gzip,deflate //请求头:指定客户端能够接受的编码类型
//注意这里有空的换行
username=jinqiao&password=1234 //请求体
HTTP请求
HTTP响应
2. 请求方式
现在一共8种
HTTP1.0只有三种:Get、Post、Head
- Get 向特定资源发出请求(请求指定页面信息,并返回实体主体)
- Post 向指定资源提交数据进行处理请求(提交表单、上传文件),又可能导致新的资源的建立或原有资源的修改
- Head 与服务器索与get请求一致的相应,响应体不会返回,获取包含在小消息头中的原信息(与get请求类似,返回的响应中没有具体内容,用于获取报头)
HTTP1.1新增了5种:
- Put 向指定资源位置上上传其最新内容(从客户端向服务器传送的数据取代指定文档的内容)
- Delete 请求服务器删除request-URL所标示的资源*(请求服务器删除页面)
- Trace 回显服务器收到的请求,用于测试和诊断
- opions 返回服务器针对特定资源所支持的HTML请求方法 或web服务器发送*测试服务器功能(允许客户端查看服务器性能)
- Connect HTTP/1.1协议中能够将连接改为管道方式的代理服务器
3. 常见请求状态码
2开头(请求成功)标识成功处理了请求的状态代码
- 200(成功)服务器已经处理了请求。通常,这表示服务器提供了请求的网页
3开头(请求被重定向)表示要完成请求,需进一步操作。通常,这些状态代码用来重定向
- 301 Moved Permanently(永久重定向)请求的网页已永久移动新位置。服务器返回响应(对get或head请求的响应)时,会自动将请求转动新位置
- 302 Found(临时重定向)该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。
4开头(客户端请求错误)请求有语法错误或请求无法实现
- 400 Bad Request 客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
- 403 Forbidden 服务器收到请求,但是拒绝提供服务
- 404 Not Found 请求资源不存在,eg:输入了错误的URL
5开头(服务器错误)这些状态码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错
- 500 (服务器内部错误)服务器遇到错误,无法完成请求
- 501(尚未实施)服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码
- 502(错误网关)服务器做为网关或代理,从上游服务器收到无效响应
- 503(服务不可用)服务器当前不能处理客户端的请求(由于超载汇总停机维护),一段时间后可能恢复正常
- 504(网关超时)服务器做为网关或代理,但是没有及时从上游服务器收到请求
- 505(HTTP版本不受支持)服务器不支持请求中所有的HTTP协议版本