1.http基本概述:
http全称为hyper text transfer protocol(超文本传输协议),原因是在于早期的http/0.9仅能传输html格式的文本。html叫做hyper text mark language(超文本标记语言),是一种通用的网页格式标记语言,里面可以含有超链接。
html的格式大概是这个样子:
<html> <head> <title>test</title> </head> <body> 身体内容 </body </html>
http有多个版本:http/0.9、http/1.0、http/1.1。由于http/0.9仅能传输html文本,不能满足人们的网页浏览需求,现在已经废弃。http/1.0在基于http/0.9版本的基础上引入了MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展)机制,使得http协议可以传输其他内容的数据,如图片、视频流等等。注:MIME可以对文件类型做标记,从而使得浏览器可以采取对应的操作实现对内容的处理。http/1.1则是http/1.0的进一步升级,使得协议处理能力更加完善。
http本身是一种无状态的协议,也就是不能标记请求是否来自同一个客户端,而一个web页面的资源数可能会有多个,也就是浏览器请求一个页面可能要发送N个请求,这样导致每个请求都需要建立一次TCP连接,大大降低了传输的效率。http/1.0引入了保持连接的机制,可以标识用户并实现当同一个用户在一定时间内请求数据(或者请求资源的数量在一定范围内)只需要建立一次TCP连接。不过http/1.0的一些功能并不完善(比如保持连接、缓存等),于是升级为http/1.1,http/1.1原生支持保持连接,以及对缓存做了更好的优化。http/1.1和http/1.0现在共存,除了个别功能的优化除外整体框架是一致的。
2.URL和URI:
URI:统一资源标识符,用来标识资源的唯一性。例如:
#标识www.baidu.com/index.html这个整个资源
URL:统一资源定位符,用来定位资源的所在服务器位置。例如:
#标记index.html在www.baidu.com这台主机的test目录下
URL是URI的子集,现在一般不区分URL和URI。
3.http的报文:
http是一个C/S架构的协议,也就是客户端请求,服务器响应。
客户端请求,服务器响应的过程,称为http的事物。http的报文类型有两种,请求报文,响应报文:
①请求报文由3部分组成:
起始行:标明使用的http协议版本,请求的资源(URL)以及对资源的操作
请求首部:标明请求的主机是谁,支持的格式,是否支持压缩、语言等等
空格:这里有个空格,标明请求首部结束
请求主体:请求的主体,例如表单密码等等
举例一个GET请求报文(GET没有请求主体):
GET HTTP/1.1 #起始行,下载(GET),HTTP/1.1协议,URL #下面的为请求首部: Host: #要请求的主机 Connection: keep-alive #采用保持连接 Accept: text/html,image/jpg,image/gif,image/png #接收的MIME内容 User-Agent: Mozilla/50(windows NT 10.0; WOW64) AppleWebkit/537.36 (KHTML, like Gecko) #客户端使用的代理软件 Accept-Encoding: gzip, deflate, sdch #支持的压缩格式 Accept-Language: zh-CN,zh;q=0.8 #允许使用的语言 空格 #GET没有主体,所以不响应主体
②响应报文由3部分组成:
起始行:使用的协议版本、响应的状态码、状态原因短语
响应首部:使用的压缩方式、内容长度、语言等等
空格:标明请求首部结束
响应主体:响应的内容
举例一个响应报文:
HTTP/1.1 200 OK Content-Type: text/html Transfer-Encoding: gzip Connection: keep-alive Server: Tengine 空格 资源主体
4.http的请求方法:
| GET | 获取资源 |
| HEAD | 获取响应首部 |
| POST | 提交表单 |
| PUT | 上传,写入 |
| DELETE | 删除URL指向的资源 |
| OPTIONS | 探测服务器端对某资源所支持的请求方法 |
| TRACE | 跟踪请求要经过的防火墙,代理或网关等 |
5.HTTP响应状态码:
| 1xx (临时响应):表示临时响应并需要请求者继续执行操作。 | ||
| 100 (继续):请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正则等待其余部分 | ||
| 101 (切换协议):请求者已要求服务器切换协议,服务器已确认并准备切换。 | ||
| 2xx (成功):表示成功处理了请求。 | ||
200 (成功):服务器已成功处理了请求。表示服务器提供了请求的资源。 | ||
| 201 (已创建):请求成功并且服务器创建了新的资源。 | ||
| 202 (已接受):服务器已接受请求,但尚未处理。 | ||
| 203 (非权威信息):服务器已成功处理了请求,但返回的信息可能来自另一来源。 | ||
| 204 (无内容):服务器成功处理了请求,但没有返回任何内容。 | ||
| 205 (重置内容):服务器成功处理了请求,但没有返回任何内容。 | ||
| 206 (部分内容):服务器成功处理了部分内容。 | ||
| 3xx (重定向):表示要完成请求,需要进一步操作。 | ||
| 300 (多种选择):针对请求,服务器可执行多种操作。服务器可根据请求者(user agent)选择一项操作,或提供操作列表供请求者选择。 | ||
| 301 (永久移动):请求的资源已经永久移动到新位置。服务器返回此状态码时,会自动将请求转到新的位置。 | ||
302 (临时移动):服务器目前从不同位置响应用户的请求,但请求者应继续使用原有位置来进行以后的请求。 | ||
| 303 (查看其他位置):请求者应当对不同的位置使用单独的GET请求来检索响应时,服务器返回此代码。 | ||
| 304 (未修改):自从上次请求后,请求的资源未发生变化。表示客户端可以使用上次的缓存内容。 | ||
| 305 (使用代理):请求者只能使用代理访问请求的资源。客户端需要使用代理。 | ||
| 4xx (客户端请求错误):表示客户端的请求可能有问题,妨碍了服务器的处理。 | ||
| 400 (请求出错):服务器不理解请求的语法。 | ||
| 401 (未授权):访问的资源需要授权。表示访问此资源需要登录。 | ||
| 403 (拒绝):服务器拒绝请求。可能是权限有误 | ||
| 404 (没找到):客户端请求的资源没有找到。 | ||
| 405 (方法禁用):不允许请求所使用的方法。 | ||
| 406 (不接受):无法使用客户端能接受的方式响应该资源。 | ||
| 407 (需要代理授权):需要登陆,但是要使用代理的方式。 | ||
| 408 (请求超时):客户端的请求超时。 | ||
| 409 (请求冲突):服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。 | ||
| 410 (已删除):客户请求的资源已经删除。 | ||
| 411 (需要有效长度):服务器不接受不含有效内容长度标头字段的请求。 | ||
| 412 (未满足前提条件):服务器未满足请求者在请求中设置的其中一个前提条件。 | ||
| 413 (请求实体过大):服务器无法处理请求,因为请求的资源实体过大,服务器无法处理。 | ||
| 414 (请求的URL过长):请求的URL太长,服务器无法处理。 | ||
| 415 (不支持的媒体类型):请求的格式不受请求页面的支持。 | ||
| 416 (请求范围不符合要求):如果页面无法提供请求的范围,则服务器会返回此状态码。 | ||
| 417 (未满足期望值):服务器未满足"期望"请求标头字段的要求 | ||
| 5xx (服务器内部错误):表示服务器在尝试处理请求时内部发生错误。 | ||
| 500 (内部错误):服务器遇到错误,无法完成请求。 | ||
| 501 (尚未实施):服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。 | ||
| 502 (网关错误):服务器作为网关或者代理,从上游服务器收到无效响应。 | ||
| 503 (服务不可用):服务器暂时无法使用(超载或停机维护)。通常,这是暂时状态。 | ||
| 504 (网关超时):服务器作为网关或代理,无法及时从上游服务器获得响应。 | ||
| 505 (HTTP版本不受支持):服务器不接受请求报文中的HTTP协议版本。 | ||
本文出自 “SystemCall社区” 博客,请务必保留此出处http://minux.blog.51cto.com/8994862/1719860
原文:http://minux.blog.51cto.com/8994862/1719860