HTTP介绍

以下将简要介绍HTTP产生及作用,Session示意,请求与响应详解
最后会利用浏览器的Network选项具体看下实际HTTP是如何工作的。

参考自RFC2616及RFC7231文档。

1. HTTP简介:

HTTP,全称为Hypertext Transfer Protocol,是一种应用层协议,适用于协作分布式和超媒体信息系统,也即今天的万维网。

HTTP主要功能是指导万维网上的客户端与服务器如何进行数据的交互。其与URL, HTML等一起构成WWW的基石。

该协议最初是由英国Tim Berners Lee于欧洲原子核研究中心工作时研发出的,其看到不同电脑,不同软件之间信息交互的困难,没有一个统一的标准,故Lee制定了万维网(WWW)的规范,同时还写了世界上第一个服务器,浏览器,网页,目前还可以从info.cern.ch进行访问。

HTTP协议标准可参考<RFC2616 (HTTP/1.1)>
HTTP语义及文档可参考 <RFC7231(HTTP/1.1: Semantics and Content)>

2. HTTP Session介绍:

HTTP通常作为Request-Response的协议,其通常建立在传输层TCP的基础上。

HTTP描述了客户端如何发起不同方式的请求,以及服务端如何对不同的请求进行回应, 一对Request, Response称为一个Session。


HTTP

客户端通常是浏览器或网络爬虫,手机应用等,而服务端通常是远程的Web服务器。客户端通过用URLs向服务器发起请求来获取相关的HTML页面,服务器通常则在80端口监听请求并负责返回响应内容,客户端浏览器则下载内容并将其渲染到显示器上。

*URLs: Uniform Resource Locators,用于定位HTTP资源在网络中的位置,其通常由http/https协议、域名、端口、路径、查询参数、锚点等组成。

3-1. 请求

Request请求包括首行信息Request-Line(由method,资源鉴别符合,协议版本组成)以及可选的header字段,message-body(视不同method而定)

具体的格式如下:

Request = Request-Line
*(( general-header
| request-header
| entity-header ) CRLF)
CRLF
[ message-body ]

其中Request-Line = Method SP Request-URI SP HTTP-Version CRLF

(上述SP,CRLF分别表示空格以及换行),CRLF用于分开不同的内容,如header与message

Request-Line中的Method有以下几种:

Method = "OPTIONS"
| "GET"
| "HEAD"
| "POST"
| "PUT"
| "DELETE"
| "TRACE"
| "CONNECT"
| extension-method extension-method = token

以下是例子:
GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1
GET /pub/WWW/TheProject.html HTTP/1.1 Host: www.w3.org
利用GET method从www.w3.org主机获取相应查询参数的页面,协议是HTTP/1.1
注意这里查询参数的后缀不一定是文件,具体的资源信息是由Headers里的content-type指定的。

这里简要介绍下GET及POST及其区别.
首先介绍一个概念,Idempotence--幂等性,简单来说若S*S=S 或 f(f(x)) = f(x),则称S或f(x)是幂等的,在计算机中则是若任意多次操作产生的结果与一次操作的结果均相同,则成该操作是幂等的,幂等操作通常比非幂等操作有更高的安全性。

GET:
GET是指通过Request-URI及查询参数检索任意的信息,例如GET请求一个数据处理程序,则该数据处理程序的结果数据将会被作为Response的实体返回给GET。GET也可以通过条件request-header字段(conditional header field)来指定要检索的信息,结合已有的缓存实体刷新,以便节省网络使用和多次重复检索。

POST:
POST是被用于希望服务器将Request包含的需要提交的数据实体作为Request-URI所定义资源下的下级数据(subordinate)。
POST通常用于以下的场景:

  • Annotation of existing resources;
  • Posting a message to a bulletin board, newsgroup, mailing list,
    or similar group of articles;
  • Providing a block of data, such as the result of submitting a
    form, to a data-handling process;
  • Extending a database through an append operation.

即在已有的各种分组里添加新的信息,如邮件列表中添加新的邮件地址,新闻列表里添加新的新闻信息等;作为表单的提交,提供块数据给数据处理进程;在已有的数据库中新增新的记录。

所采取哪种POST是由server和Request-URI决定的。由于POST的结果可能并不能通过被某个URI指定的资源来作为Response,故通常server会返回200(OK)或者204(No content)作为状态码,若POST要求建立的实体是已经存在的话,则会返回201(created)要提交的数据是已经被建立的。

另外,对POST请求的Response是不可被缓存的,除非响应包含合适的缓存控制,但303(see others)响应可定向客户端去相应的cacheable resource中检索。

GET与POST区别:

  1. GET用来从服务器检索相应URL的信息,报文传输的是检索所需的参数
    响应返回的是所需的信息。

    POST用来向服务器提交数据,报文传输的是所要提交的数据。
    响应返回的是操作的结果。

  2. GET 将不改变服务器资源的状态,而POST通常会改变服务器资源的状态。

  3. GET是幂等的,POST是非幂等的,即GET多次请求,结果返回都是一致的。

  4. GET可缓存,POST一般不可缓存

最后简要提下HEAD请求,其要求服务端返回与GET请求返回一致的信息,但不需要返回资源即Response中无需包含Body部分,通常用于仅获取响应headers中的(meta-information)。

3-2. 响应

当服务器收到一个请求信息后,它将返回一个Response信息。
具体格式如下:

Response = Status-Line
*(( general-header
| response-header
| entity-header ) CRLF)
CRLF
message-body

可见Response信息格式与Request很像,不同的是Request-Line被替换为Status-Line了,以下对Status-Line和Status code进行详细介绍:

Status-Line = HTTP-Version SP Status Code SP Reason-Phrase CRLF

Status-Code可分为以下几类:

-1xx: Informational - 请求收到,继续处理
-2xx: Success - 动作成功收到,并被理解即接受
-3xx: Redirection - 需进一步的动作来完成请求
-4xx: Client Error - 请求错误,其包含错误语法或者不完全的信息
-5xx: Server Error - 服务器错误,对请求响应失败

具体如下:

100: Continue
101: Switching Protocols
200: OK
201: Created
202: Accepted
203: Non-Authoritative Information
204: No Content
205: Reset Content
206: Partial Content
300: Multiple Choices
301: Moved Permanently
302: Found
303: See other
304: Not Modified
305: Use Proxy
307: Temporary Redirect
400: Bad Request
401: Unauthorized
402: Payment Required
403: Forbidden
404: Not Found
405: Method Not Allowed
406: Not Acceptable
407: Proxy Authentication Required
408: Request Time-out
409: Conflict
410: Gone
411: Length Required
412: Precondition Failed
413: Request Entity Too Large
414: Request-URI Too Large
415: Unsupported Media Type
416: Requested Range not satisfiable
417: Expectation Failed
500: Internal Server Failed
501: Not Implemented
502: Bad Gateway
503: Service Unavailable
504: Gateway Time-out
505: HTTP Version not supported

4. 浏览器Network功能

通常IE或Chrome内核等的浏览器可以通过F12来显示Network选项,能对HTTP请求及相应有一个直观的理解:


GET

F12后选择Network选项,将显示请求的详细信息,可多次刷新,发现结果不变。(若你的没有Method,Status, Protocol字段,可以点击Name,选择相应的字段)。


General

接下来,让我们来看下GET请求的详细信息,直接点击rfc2616则可看到右侧显示了该请求的Header信息(General Header, Response Headers及Request Header)以及Response返回的HTML页面信息。若要查看Header信息源码可点击view source(*Chrome)

Request

Request包含

  1. 首行Request-Line - 其描述了请求方法是GET,从/html/rfc2616资源位置获取信息, 协议是HTTP/1.1, 主机位置是tools.ietf.org;
  2. Request Header 信息,描述UA(user-agent)是谷歌浏览器,以及相应的条件header,这些信息都是以Key:Value的形式显示;
  3. 一个换行符,用于分割Header与Message Body。
  4. Message Body, 由于此处是GET方法,没有Message,若是POST方法,则Message body将携带相应的信息,如账户名和密码等, 在浏览器中可以从FormData或Payload里查看, 若是使用的是HTTP,则所有数据在网络上的传输是明文的,即使是密码,而使用HTTPS,POST的数据将会被加密。
Response

Response包含:

  1. 首行Status-Line - 其描述协议版本,状态码以及其意义。
  2. Response-Header及Entity-Header信息,也是Key:Vaule 键值对,包括对内容的描述信息,如Content-Type,表示返回的是text/html
  3. Message body,相应的html网页,可从message选项看


    Message

    浏览器收到Response的HTML内容后则将其渲染到显示器上。

除了使用浏览器查看,还可以用curl -v URLs 来查看相应的HTTP请求与响应的过程,关于curl的用法,可以参考这里

小结

以上则是对HTTP的简要介绍,Request-Response 的格式介绍,Method中的GET与POST的详细介绍及区别,Status code的含义。
最后通过Chrome实际看了Request(GET)及相应的Response内容

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容