HTTP 协议简介

国外媒体Venturebeat最近报道,谷歌 Chrome 将于今年七月份将所有的 HTTP 网站标记为“不安全” (原文链接)google又要带一波节奏了…..HTTP 协议是客户端浏览器或其他程序与 Web 服务器之间的应用层通信协议;HTTPS 协议可以理解为 HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。现在互联网安全越来越重要,如果大家都使用 HTTPS 协议的话会也会更加安全。

下面是对 HTTP 协议的一些总结:

协议概念

  • 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上广泛应用的一种网络协议,是万维网的数据通信的基础,HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。应答的服务器上存储着一些资源,比如HTML文件和图像。
  • 通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如”HTTP/1.1 200 OK”,以及返回的内容,如请求的文件、错误消息、或者其它信息。
  • 设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。

主要特点

  • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  • 灵活:HTTP是媒体独立的,这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
  • 无状态:HTTP是一个基于请求/响应模式的无状态的协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
  • HTTP属于应用层协议,网页的浏览实际上是浏览器和服务器之间通过HTTP在Internet上进行数据的发送和接收。
  • 绝大多数的Web开发都是构建在HTTP协议之上的Web应用。
  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

浏览器与服务器通信的过程

  1. 客户端发起连接
  2. 客户端发送请求
  3. 服务器响应请求
  4. 服务器关闭连接

请求消息结构

一个请求消息是由请求行、请求头字段、一个空行和消息主体构成。如

GET / HTTP/1.1
Host: www.google.com

请求行

请求消息的第一行就是请求行。它指明使用的请求方法、资源标示符、和 HTTP 版本。如
GET / HTTP/1.1

请求方法

请求方法用来定义操作资源的方式,HTTP/1.1 协议中定义了八种请求方法:

  • GET:读取资源数据
  • POST:新建资源数据
  • PUT:更新资源数据
  • DELETE:删除资源数据
  • HEAD:读取资源的元数据
  • OPTIONS:读取该资源所支持的所有请求方法
  • TRACE:回显服务器收到的请求,主要用于测试或诊断
  • CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)

此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。

资源标识符

URI、URL和URN是用来识别、定位和命名互联网上的资源。

因为要通过多样的方式识别资源(人的名字可能相同,然而计算机文件只能通过唯一的路径名称组合访问),所以需要标准的识别WWW资源的途径。为了满足这种需要,Tim Berners-Lee 引入了标准的识别、定位和命名的途径:URI、URL和URN。

  • URI:Uniform Resource Identifier,统一资源标识符
  • URL:Uniform Resource Locator,统一资源定位符
  • URN:Uniform Resource Name,统一资源名称

URL 和 URN 都属于 URI,URI 和 URL 的区别是:URL 更具体。URI 和 URL 都定义了什么是资源。但 URL 还定义了如何获得资源。

请求头字段

请求头用来传递客户端的更多信息,以及传递解析消息主体的必要信息。如

User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: example.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate

常见请求头字段有

  • Accept: 客户端接受哪些 Mine 类型。如 Accept: text/html
  • Accept-Encoding: 支持的编码类型。如 gzip, deflate, sdch
  • Accept-Language: 可接受的语言。如 en-US,en;q=0.8
  • User-Agent:一个标识客户端的字符串。如 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/38.0.2125.101 Safari/537.36
  • Cookie: Cookie。如 sessionid=c8422b97-98e2-4bc6-aa31-9b667d6ca4a5; theme=4;
  • Referer: 从那个页面到的该页面。

空行

表示头字段区完成,消息主体开始(如果有消息主体的话)。

消息主体

消息主体是可选的,消息主体是请求消息的承载数据。比如在提交POST表单,并且表单方法不是GET时,表单数据就是打包在消息主体内的。

响应消息结构

响应消息由一个状态行、响应头字段、一个空行、消息主体构成。如

HTTP/1.0 200 OK
MIME-Version: 1.0
Date: Mon, 8 Jan 2010 4:59:42 GMT
Server: Apcha-Coyote/1.1
Content-Type: text/html
Content-Length: 42092

<html>
...
</html>

状态行

由 http 版本、状态码、状态描述文字构成。如
HTTP/1.1 200 OK

状态码

HTTP 状态码(HTTP Status Code)是用以表示网页服务器 HTTP 响应状态的3位数字代码。

所有的状态码的第一个数字代表了响应的五种状态之一:

  • 1xx:代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行 结束。
  • 2xx:代表请求接收、理解并且接受。
  • 3xx:代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目 标)在本次响应的Location域中指明。当且仅当后续的请求所使用的方法是GET或者HEAD时,用户浏览器才可以 在没有用户介入的情况下自动提交所需要的后续请求。
  • 4xx:代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个HEAD请求,否则服务器就应 该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。
  • 5xx:代表了服务器在处理请求的过程中有错误或者异常状态发生,,也有可能是服务器意识到以当前的软硬件资源 无法完成对请求的处理。

常见状态码有:

  • 200: 请求已经成功,请求所希望的响应头或者数据体将随着此响应返回
  • 202: 服务器已接受请求,但尚未处理。正如它可能被拒绝一样,最终该请求可能会也可能不会被执行。在异步操作的场合下,没有比发送这个状态码更方便的做法了
  • 204: 服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息
  • 304: 被请求的资源内容没有发生更改
  • 400: 包含语法错误,无法被服务器解析
  • 403: 服务器已经接收请求,但是拒绝执行
  • 404: 请求失败,请求所希望得到的资源未在服务器上发现
  • 408: 请求超时。客户端可以再次提交这一请求而无需任何修改
  • 500: 服务器内部错误,无法处理请求
  • 502: 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效响应
  • 504: 作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应

响应头字段

和请求消息类似,首部字段会包括服务器本身的一些信息指示、以及响应消息本身的元数据。如

MIME-Version: 1.0
Date: Mon, 8 Jan 2010 4:59:42 GMT
Server: Apcha-Coyote/1.1
Content-Type: text/html
Content-Length: 42092

常见响应头有:

  • Content-Encoding: 数据的编码类型。如 Content-Encoding: gzip
  • Server: 服务器的名称。如 Server:thin 1.5.0 codename Knife
  • Location: 通知客户端新的资源位置。如 Location: http://www.github.com/login
  • Content-Type: 响应数据的类型。如 Content-Type:text/html; charset=UTF-8
  • Content-Encoding: 响应数据的编码格式。如 gzip。客户端会根据该值对响应内容解码。

消息主体

消息主体是响应消息的承载数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值