http协议原理基本概述
2015-12-05 15:12
381 查看
1.http基本概述:
http全称为hyper text transfer protocol(超文本传输协议),原因是在于早期的http/0.9仅能传输html格式的文本。html叫做hyper text mark language(超文本标记语言),是一种通用的网页格式标记语言,里面可以含有超链接。
html的格式大概是这个样子:
http本身是一种无状态的协议,也就是不能标记请求是否来自同一个客户端,而一个web页面的资源数可能会有多个,也就是浏览器请求一个页面可能要发送N个请求,这样导致每个请求都需要建立一次TCP连接,大大降低了传输的效率。http/0.9和http/1.0都不支持保持连接,而http/1.1引入了保持连接的机制,可以实现当同一个用户在一定时间内请求数据(或者请求资源的数量在一定范围内)只需要建立一次TCP连接,http/1.1也对缓存做了更好的优化。现在主流是http/1.1协议,http/1.0可能也有的在用。我们只讨论http1.1。
2.URL和URI:
URI:统一资源标识符,用来标识资源的唯一性。例如:
3.http的报文:
http是一个C/S架构的协议,也就是客户端请求,服务器响应。
客户端请求,服务器响应的过程,称为http的事物。http的报文类型有两种,请求报文,响应报文:
①请求报文由3部分组成:
起始行:标明使用的http协议版本,请求的资源(URL)以及对资源的操作
请求首部:标明请求的主机是谁,支持的格式,是否支持压缩、语言等等
空格:这里有个空格,标明请求首部结束
请求主体:请求的主体,例如表单密码等等
举例一个GET请求报文(GET没有请求主体):
②响应报文由3部分组成:
起始行:使用的协议版本、响应的状态码、状态原因短语
响应首部:使用的压缩方式、内容长度、语言等等
空格:标明请求首部结束
响应主体:响应的内容
举例一个响应报文:
5.HTTP响应状态码:
6.HTTP首部类型:
7.各首部常用的关键字:
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/0.9和http/1.0都不支持保持连接,而http/1.1引入了保持连接的机制,可以实现当同一个用户在一定时间内请求数据(或者请求资源的数量在一定范围内)只需要建立一次TCP连接,http/1.1也对缓存做了更好的优化。现在主流是http/1.1协议,http/1.0可能也有的在用。我们只讨论http1.1。
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 | 跟踪请求要经过的防火墙,代理或网关等 |
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协议版本。 | |
请求首部 | 用于请求报文 |
响应首部 | 用于响应报文 |
通用首部 | 请求报文和响应报文都可以使用 |
扩展首部 | 非标准首部,由开发者构造 |
请求首部 | Client-IP:客户端IP。 |
Host:请求的主机名和端口号(比如虚拟主机环境下标识不同主机) | |
Referer:标明上级页面是什么,防盗链 | |
User-Agent:用户代理工具是什么。 | |
Accept:指明服务器能发送的媒体类型。协商 | |
Accept-Charset:支持使用的字符集。协商 | |
Accept-Encoding:支持使用的压缩方式。协商 | |
Accept-Language:支持使用的语言。协商 | |
Expect:期望的行为。条件请求 | |
If-Modified-Since:资源是否在指定的时间内是否被修改。条件请求 | |
Authorication:客户端提交给服务器端的认证数据,如账号和密码 | |
Cookie/Cookie2:客户端发送给服务器端用于认证身份 | |
响应首部 | Age:响应持续的时间 |
Server:向客户端标明服务器程序名称和版本 | |
Accept-Ranges:对当前资源来讲,服务器所能接受的范围类型。用于协商。 | |
Vary:首部列表,服务器根据列表中的内容挑选挑选出最合适的版本发送给客户端。这个应该是和Accept-Ranges一起的,用于协商。 | |
Set-Cookie/Set-Cookie2:服务器端在某客户端第一次请求时发给的令牌,就是第一次发送Cookie。认证 | |
WWW-Authentication:质询,要求客户端提供账号和密码。认证 | |
Location:资源的新位置 | |
Allow:允许对此资源使用的请求方法 | |
Contern-Encoding: | |
Contern-Language: | |
Contern-type: | |
Contern-Range: | |
Contern-Location | |
ETag:实体标签。缓存 | |
Expires:过期标签。缓存 | |
LastModified:上一次的修改时间。缓存 |
相关文章推荐
- IE:获取完整的网页
- IE:脱机浏览网页
- 网页恶意代码的预防
- C#通用邮件发送类分享
- C#、ASP.NET通用扩展工具类之TypeParse
- 对于技术人员的出现了运行时间错误,是否要进行调试的解决方法
- 针对网页制作者的网页打开速度慢的解决方法集合第1/2页
- C#获取网页源代码的方法
- C#、ASP.NET通用扩展工具类之LogicSugar
- C#实现将网页保存成图片的网页拍照功能
- IE中用VBScript不提示直接打印的代码
- firefox的超链接点击去除扩大的难看虚线的解决方法
- 网页绿色系配色应用实例图文第1/2页
- 提高CSS网页渲染效率的11点注意事项
- C#下载网页并在控制台输出的方法
- node.js抓取并分析网页内容有无特殊内容的js文件
- php查看网页源代码的方法
- Winform实现将网页生成图片的方法
- asp.net 抓取网页源码三种实现方法