http协议详解

 

 

 

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议。html

HTTP 协议是以 ASCII 码传输,创建在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。相似于下面这样:python

<method> <request-URL> <version>
<headers>
<entity-body>

HTTP定义了与服务器交互的不一样方法,最基本的方法有4种,分别是GETPOSTPUTDELETEURL全称是资源描述符,咱们能够这样认为:一个URL地址,它用于描述一个网络上的资源,而 HTTP 中的GETPOSTPUTDELETE就对应着对这个资源的查,增,改,删4个操做。浏览器

 

1. GET:安全

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

 sex=man&name=Professional
  • GET 可提交的数据量受到URL长度的限制,HTTP 协议规范没有对 URL 长度进行限制。这个限制是特定的浏览器及服务器对它的限制
  • 理论上讲,POST 是没有大小限制的,HTTP 协议规范也没有进行大小限制,出于安全考虑,服务器软件在实现时会作必定限制
  • 参考上面的报文示例,能够发现 GET 和 POST 数据内容是如出一辙的,只是位置不一样,一个在URL里,一个在 HTTP 包的包体里

咱们知道 HTTP 协议采用“请求-应答”模式,当使用普通模式,即非 Keep-Alive 模式时,每一个请求/应答客户和服务器都要新建一个链接,完成以后当即断开链接(HTTP协议为无链接的协议);当使用 Keep-Alive 模式(又称持久链接、链接重用)时,Keep-Alive 功能使客户端到服务器端的链接持续有效,当出现对服务器的后继请求时,Keep-Alive 功能避免了创建或者从新创建链接。app

 

  • HTTP Keep-Alive 简单说就是保持当前的TCP链接,避免了从新创建链接。编码

  • HTTP 长链接不可能一直保持,例如 Keep-Alive: timeout=5, max=100,表示这个TCP通道能够保持5秒,max=100,表示这个长链接最多接收100次请求就断开。url

  • HTTP是一个无状态协议,这意味着每一个请求都是独立的,Keep-Alive没能改变这个结果。另外,Keep-Alive也不能保证客户端和服务器之间的链接必定是活跃的,在HTTP1.1版本中也如此。惟一能保证的就是当链接被关闭时你能获得一个通知,因此不该该让程序依赖于Keep-Alive的保持链接特性,不然会有意想不到的后果。code

  • 使用长链接以后,客户端、服务端怎么知道本次传输结束呢?两部分:1. 判断传输数据是否达到了Content-Length 指示的大小;2. 动态生成的文件没有 Content-Length ,它是分块传输(chunked),这时候就要根据 chunked 编码来判断,chunked 编码的数据在最后有一个空 chunked 块,代表本次传输数据结束,详见这里。什么是 chunked 分块传输呢?下面咱们就来介绍

 


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  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

 

urllib 和urllib2之间的区别是:

在python2中,urllib和urllib2都是接受URL请求的相关模块,可是提供了不一样的功能。两个最显著的不一样以下:

一、urllib2能够接受一个Request类的实例来设置URL请求的headers

2urllib仅能够接受URL。这意味着,你不能够假装你的User Agent字符串等。

可是urllib提供urlencode方法用来GET查询字符串的产生,而urllib2没有。这是就是为什么urllib常和urllib2一块儿使用的缘由。

python urllib2直接open和经过request再open有什么区别。

 

 

 

 

 

 

http://zhuoqiang.me/python-urllib2-usage.html

 

 

 

 

 

 

 

HTTP容许传输任意类型的数据对象

相关文章
相关标签/搜索