HTTP快速一览

本文是Scrat自己在学习中对相关教程的提炼总结,满满干货,闲话少叙,进入正题~

一. 什么是HTTP?

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

HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

简单提一下TCP/IP协议族:
        计算机与网络设备之间的通信,双方必须基于相同的方法,如怎么探测通信目标,哪一方先发送,使用什么语言,怎么结束通信等都需要事先确定。不同硬件,操作系统之间的通信,所有的一切都需要一个规则。该规则称之为协议。
TCP/IP协议族就是把互联网相关协议集合起来的总称。

HTTP协议的主要特点:

  • 简单快速:UII固定,统一资源符。
  • 灵活:HTTP可以对任何类型的数据进行交互服务。
  • 无连接:HTTP帮你建立连接,进行传输数据。
  • 无状态:HTTP不记录连接身份信息,单从HTTP无法知道。

 

二.工作原理

HTTP协议工作于客户端-服务端架构(C/S)为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。

Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。

Web服务器根据接收到的请求后,向客户端发送响应信息。

HTTP默认端口号为80,但是你也可以改为8080或者其他端口。

HTTP三点特性:

  • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。(采用这种方式可以节省传输时间。)
  • 媒体独立:即只要是客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
  • 无状态:无状态是指协议对于事务处理没有记忆能力。意味着如果后续处理需要前面的信息,则它必须重传,(可能导致每次连接传送的数据量增大)。优点是在服务器不需要先前信息时它的应答就较快。(所以有了cookie,session)

 

三.消息结构(重点)

HTTP通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。

一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。

一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。

HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。

一旦建立连接后,数据消息就通过类似Internet邮件所使用的格式[RFC5322]和多用途Internet邮件扩展(MIME)[RFC2045]来传送。

客户端请求消息

请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据(请求体)四个部分组成,下图给出了请求报文的一般格式。

2012072810301161

服务器响应消息

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

这里写图片描述

下面栗子是一典型的使用GET来传递数据的实例:

客户端请求:

GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi

服务端响应:

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

输出结果:

Hello World! My payload includes a trailing CRLF.

四 . HTTP请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五种请求方法:OPTIONS(询问支持的方法), PUT, DELETE, TRACE 和 CONNECT 方法。

常见的请求方法有五种:GET(获取资源) , POST(传输资源) 及 HEAD(获得报文首部), PUT(更新资源) , DELETE(删除资源),
常用的有两种:GET POST.

GET POST区别:

  • GET在浏览器回退时是无害的。POST会再次提交请求。
  • GET产生的URL地址可以被隐藏。POST不可以。
  • GET请求会被浏览器主动缓存,POST不会,除非手动设置。
  • GET请求只能进行URL编码,POST支持多种编码方式。
  • GET请求参数会被完整保留在浏览器历史记录里。POST中的数据不会保留。
  • GET请求在URL传输的参数有长度限制,POST没有限制。
  • 对参数的数据类型,GET只接受ASCII字符,POST没有限制。
  • GET比POST更不安全,参数直接暴露在URL上,不能用来传递敏感信息。
  • GET参数通过URL传递,POST放在Request body中。

HTTP状态码
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。

HTTP状态码的英文为HTTP Status Code。

下面是常见的HTTP状态码:

  • 1xx- 提示信息-表示请求已接收,继续处理。
  • 2xx - 请求成功
  • 200:客户端请求成功 206:客户发送了有Range头的GET请求,服务器完成了它。
  • 3xx - 重定向-资源(网页等)被永久转移到其它URL
  • 301:重定向 302:临时重定向
  • 304:客户端有缓冲的文档并发出一个条件性请求,服务器告诉客户,原来缓冲的文档仍可用。
  • 4xx - 客户端错误-请求有语法错误或请求的资源(网页等)不存在
  • 400:请求语法错误。 401:请求未经授权。
  • 403:请求页面的访问被静止。
  • 404:请求的资源不存在。
  • 5xx - 内部服务器错误
  • 500:服务器发生不可预期的错误,原来缓冲文档还可用。
  • 503:请求未完成,服务器临时过载或当机,一段时间后可能恢复正常。

五 . HTTP content-type

Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载到的一个文件或一张图片的原因。

六. HTTP持久连接

HTTP采用请求-应答模式,当适用普通模式,即非Keep-Alive模式时,每个请求应答客户和服务器都要重新建立一个连接,完成后立即断开连接。
但是,由于TCP建立连接的时候需要三握四挥,在发送含有多张图片的HTML页面时,每次请求都会造成tcp的连接断开。
使用Keep-Alive模式(持久连接\连接重用)时候,Keep-Alive功能使客户端到服务器端的连接持续有效,出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。
HTTP1.1版本支持持久连接。

HTTP管线化

在使用持久连接的情况下,某个连接上消息的传递类似于:

  • 请求1->响应1->请求2->响应2->请求3->响应3
  • 请求1->请求2->请求3->响应1->响应2->响应3(管线化)

管线化通过持久连接完成,HTTP1.1支持

管线化特性

  • 持久连接使管线化成为可能。
  • 从前发送请求后需要等待并受到响应,才能发送下一个请求。管线化技术出现后,不用等待响应就可以发送下一个请求。

注意:只有GET、 HEAD请求可以管线化,POST则有所限制。
初次建立连接时不应该启用管线化,对方不一定支持HTTP1.1版本。
管线化不会影响响应到来的顺序,响应返回的顺序并未改变。
HTTP1.1.要求服务器端支持管线化,但并不要求服务器端也对响应进行管线化处理,只是要求对管线化请求不失败即可。

开启管线化很可能并不会带来大幅度的性能提升,而且很多服务器和代理程序对管线化的支持并不好,Chrome,Firfox默认并未开启管线化支持。

更多:Python目录

猜你喜欢

转载自blog.csdn.net/Scrat_Kong/article/details/94297516
今日推荐