http协议

[TOC]

Http Definition

HTTP(Hypertext Transfer Protocol)就是超文本传输协议,它是现代互联网最重要也是最基本的协议。Http协议是无状态的、应用层协议,它是web开发的基础。

URL

  • URL(Uniform Resource Locator) 地址用于描述一个网络上的资源。基本格式如下:
schema://login@host[:port#]/path/..../[?query-string][#anchor]

    /*
    scheme: 协议名(如http,https,ftp)
    login: 登陆信息
    host: 服务器IP/域名
    port#:HTTP服务的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如http://www.cnblogs.com:8080
    path: 资源路径
    query-string: 发送给web服务器的数据
    anchor: 锚
    */
  • 举个例子:
http://www.mywebsite.com/sj/test/test.aspx?name=sivergn&x=true#stuff

    /*
     schema: http
     host: www.mywebsite.com
     path: /sj/test/test.aspx
     Query String: name=sviergn&x=true
     Anchor: stuff
     */

URL的请求过程

  1. 当你在浏览器输入URLhttp://www.website.com的时候,浏览器发送一个Request去获取http://www.website.com的html。
  2. 服务器把Response发送回给浏览器。浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如图片,CSS文件,JS文件。
  3. 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。当所有的文件都下载成功后, 网页就被显示出来了。

Request Method

我们通过URL访问服务端获得资源,具体的操作由 http 协议的 request method 来定义。http/1.1 一共有八种操作:

  • GET:向服务端发起获得资源的请求。GET 也是可以传递参数给服务端的,是将参数放在URL中携带到服务端,暴露在整篇网络环境中,很不安全。
  • POST:向指定的主机资源提交数据。一般都是向服务端提交表单数据进行处理。POST 提交的数据保存在http协议的body中。
  • PUT:向指定的主机资源上传最新的内容
  • DELETE:请求服务端删除Request-URL标识的资源

上面四种是用的最多的四种Method,有时候,我们将 PUT 和 DELETE 看作是POST的特殊实现。

  • HEAD:与GET方法类似,区别是只请求头部。用于测试和获得头部中的元数据
  • TRACE:回显请求
  • CONNECT:HTTP/1.1预留给一些代理服务器用,用于改变连接方式。
  • OPTIONS:测试服务端能支持的HTTP Method

对于Method常见的错误码:

  • 405(Method Not Allowed) 是客户端的错误
  • 501(Not Implemented) 是服务端的错误

GET实例:

GET /test/?id=11101&name=Professional HTTP/1.1
Host: www.test.com
User-Agent: Mozilla/5.0 (Windows; U;) Firefox/1.0.1
Connection: Keep-Alive

POST实例:

POST / HTTP/1.1
Host: www.test.com 
User-Agent: Mozilla/5.0 (Windows; U) Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive

name=Professional&id=11101

状态码

通过URL和Method,客户端就可以发送一个完整的请求给服务端。当然服务端也会做出响应。状态码就是非常重要的一种响应,客户端通过状态码就可以了解服务端做出何种响应。HTTP/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别:

  • 1XX 提示信息; 表示请求已被成功接收,告诉客户端可以继续发送下一个请求了,若如果已发送完毕可以忽略它。
  • 2XX 成功
  • 3XX 重定向; 要完成请求必须进行更进一步的处理
  • 4XX 客户端错误;请求有语法错误或请求无法实现
  • 5XX 服务器端错误;服务器未能实现合法的请求

常见的状态码

1xx:Informational Messages

这是 http/1.1 才支持的状态码,服务端可以发送一个 100-continue 告诉客户端继续发送消息,客户端如果已发送可以忽略。

2xx:成功

告诉 client 接收到 Request 并成功处理,最常见的是 200 OK

  • 202 Accepted: the request was accepted but may not include the resource in the response. This is useful for async processing on the server side. The server may choose to send information for monitoring.
  • 204 No Content: there is no message body in the response.
  • 205 Reset Content: indicates to the client to reset its document view.
  • 206 Partial Content: indicates that the response only contains partial content. Additional headers indicate the exact range and content expiration information.

3xx:Redirection

这个状态代表客户端需要重定向到其他URL获取资源,新的URL在Response中,浏览器会自动向新的URL发起Request

  • 301 请永久到新的URL获取资源
  • 303 资源暂时位于新的URL,新的URL记在 Location Response Header
  • 304 告诉client请求的资源没有更新,可以直接使用client缓存中的备份。(当然有没有更新是靠头部中的标识进行hash计算的)

4xx:Client Error

当客户端发出一个 bad request 或者请求无效资源时,server端会认为时client出错了。最常见的是 404 Not Found404 表示资源无效,在服务端上不存在。

  • 400 Bad Request:请求语法错误
  • 401 Unauthorized: 未经授权。可以通过带有 Unauthorized 的头部再次发起请求。还是401错误应该可以推断是没有证书。
  • 403 Forbidden:服务器收到请求,但是拒绝提供服务
  • 405 Method Not Allowed:request line中的method不合法
  • 409 Conflict:冲突了。通常出现在多人协作时。

5xx:Server Error

用于来表示server端出现了故障。最常见的是 500 Internal Server Error 服务器发生不可预期的错误。

  • 501 Not Implemented:服务器不支持此方法
  • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常

Http消息结构

消息格式

http协议对 RequestResponse 两种消息定义了下面的格式:

message = <start-line>
      *(<message-header>)
      CRLF
      [<message-body>]

<start-line> = Request-Line | Status-Line
<message-header> = Field-Name ':' Field-Value

从上面定义我们可以看到,Http的Request和Response消息都是由三部分组成:

1. start-line 开始行 
2. header 消息头 
3. body 消息体

对于start-line,又分为:

1. Request-Line : 'METHOD/path-to-resource http-version'
2. Response-Line : 'http-version status-code message'

对于Headers则有如下几种:

1. general headers
2. entity headers
3. request or response headers
    a. request specific headers.
    b. response specific headers.

Request

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

用表格来表示:

Request Line METHOD/path-to-resource HTTP/version-number
Request Header Field1 : Value
Request Header Field2 : Value
空行 空行
Request Body data(optional)
  • Request Line/请求行
    • Method :请求方法,如GET/POST
    • path-to-resource :所请求的资源在web服务器上的位置
    • HTTP/version-number:HTTP协议版本号。
  • Request Header,记录请求行以外的重要信息。
  • Request Body,携带提交给web服务器的数据。使用GET方法时,为空。
  • 注意,Body和Header之间空一行。

Response

Response Line HTTP/version-number status-code message
Response Header Field1 : Value
Response Header Field2 : Value
空行 空行
Response Body data(optional)
  • Response Line/响应行
    • HTTP/version-number :HTTP协议版本号
    • status-code :状态码,反应服务器处理是否正常,告知出现的错误
    • message :状态消息,同状态码对应。
  • Response Header / 响应头 :记录响应体数据的相关信息。
  • Response Body / 响应体 :携带需要向web服务器发送的数据。使用GET方法时,为空。

TIPs

  • 对于GET方法,例如Http://localhost/login.php?username=aa&password=1234 ,很明显能辩认出 ? 后就是 query-string ,易被网络爬虫爬取信息。
  • 对于POST ,则会将提交的数据保存到HTTP的BODY中,比如上面的 username=aa&password=1234

Reference

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,644评论 18 139
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,339评论 6 152
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 5,215评论 3 82
  • 前言:最近发现自己在网络相关这一块基础很是欠缺,所以准备花时间了解一下,本文主要是讲http协议的一些基础,和一些...
    justCode_阅读 2,094评论 0 23
  • 深入浅出HTTP协议(WEB开发和面试必备) 1.基础概念篇 a.简介 HTTP是Hyper Text Trans...
    半世韶华忆阑珊阅读 1,218评论 0 7