http协议基础

来源:互联网 发布:python发送邮件 编辑:程序博客网 时间:2024/04/29 17:35

一 基本概念

http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。


二 HTTP请求

  http请求由三部分组成,分别是:请求行、消息报头、请求正文


1 请求行

<method> <uri> <version>


method(请求方法):

GET:请求获取Request-URI所标识的资源

POST:在Request-URI所标识的资源后附加新的数据

HEAD    请求获取由Request-URI所标识的资源的响应消息报头

PUT     请求服务器存储一个资源,并用Request-URI作为其标识

DELETE  请求服务器删除Request-URI所标识的资源

URI和URL

URI: 统一资源标识符。以某种统一的(标准化的)方式标识资源的简单字符串。

URL:统一资源定位符。可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

通用的格式是:http://host[":"port][abs_path]

例如:http://www.google.com:80/index.html

URI和URL的区别:URI定义资源,而URL不单定义这个资源,还定义了如何找到这个资源。比如说,一个服务器上,到一个文件夹/网页的绝对地址(absolute path)就是URI。

<version>:http 1.0 和 http 1.1

版本区别:

建立连接方面:

HTTP/1.0 每次请求都需要建立新的TCP连接,连接不能复用。HTTP/1.1 新的请求可以在上次请求建立的TCP连接之上发送,连接可以复用。

优点是减少重复进行TCP三次握手的开销,提高效率。

注意:在同一个TCP连接中,新的请求需要等上次请求收到响应后,才能发送。

其他的一些区别,稍后会补充。


2 请求报头


<header name>:  <header data>

目前唯一关注的是Host报头,在1.1版本中需要而在1.0版本中不需要。

用一个空的文本行来终止报头列表。


三 HTTP响应

HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文

1 状态行


<version> <status code> <status message>

状态码:

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

常见状态代码、状态描述、说明:

200 OK      //客户端请求成功

400 Bad Request  //客户端请求有语法错误,不能被服务器所理解

401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 

403 Forbidden  //服务器收到请求,但是拒绝提供服务

404 Not Found  //请求资源不存在,eg:输入了错误的URL

500 Internal Server Error //服务器发生不可预期的错误

503 Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后,可能恢复正常

例如: HTTP/1.1 200 OK

2 消息报头


主要关注两个比较重要的

Content-Type :告诉客户端响应主题中内容的MIME类型。

Content-Length:用来指响应主体的字节大小。

使用文本空行来终止响应报头,其后跟随响应主体,响应主体中包含被请求的内容。


0 0