HTTP协议

什么是Http协议?

Http协议是基于TCP/IP协议的应用层协议,它不包含数据包的传输,主要规定了客户端和服务器端之间的通信格式,默认端口为80端口。

Http协议的工作流程:
Http协议的工作流程

如上图:

  • 客户端向服务器端发送request请求
  • 服务器端监听端口,接收到客户端的请求
  • 服务器发送response响应给客户端
  • 客户端接收到服务器端的响应
客户端如何向服务器端发送request请求?

客户端主要是通过发送请求报文来向客户端发送request请求的。

请求报文的格式:
  • 状态行
  • 请求头
  • 空行(个人认为是为了区分请求头与消息体的作用)
  • 其他消息体
<method> <request-URL> <version>
<headers>

<entity-body>

1. 状态行包含请求方法,请求的URL和http版本。

a.请求方法:GET,POST,PUT,DELETE分别对应着对资源的查,增,改,删。这里主要介绍GET和POST方法。

b. 请求的URL

schema://host[:port#]/path/.../[?query-string][#anchor]

scheme               指定低层使用的协议(例如:http, https, ftp)
host                   HTTP服务器的IP地址或者域名
port#                 HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 http://www.cnblogs.com:8080/
path                   访问资源的路径
query-string       发送给http服务器的数据
anchor-             锚

URL的一个例子:

http://www.mywebsite.com/sj/test/test.aspx?name=sviergn&x=true#stuff

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

c. Http版本:常用的版本有:0.9 / 1.0 / 1.1 / 2

状态行的例子:

GET /books/?sex=man&name=Professional HTTP/1.1

表示请求方法为GET,请求的URL为/books/?sex=man&name=Professional,所用的Http协议为1.1版本。

2. 请求头:
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

这里要注意的是Content-Type和Content-Length是在POST方式 下才有的,而对于GET方式是不存在的。

  • Host:表示主机域名

  • User-Age:表示用户代理,用来表明浏览用户的身份,让网页开发者可以得知访问终端的信息

  • Connection : 表示连接状态,一般设置为keep-Alive或close,分别表示连接状态和关闭状态

  • Content-Type:表示数据类型
    常见的类型有如下:这些类型总称为MIME type

text/plain
text/html
text/css
image/jpeg
image/png
image/svg+xml
audio/mp4
video/mp4
application/javascript
application/pdf
application/zip
application/atom+xml
  • Content-Length:表示数据长度
3. 其他消息体:

对于GET来说是不存在,因为它是将数据添加到URL的形式来传递数据的。

对于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  
响应报文:
  • 状态行
  • 响应头
  • 响应正文

a. 状态行:

<HTTP-Version> <Status-Code> <Reason-Phrase CRLF>

HTTP-Version:表示服务器HTTP协议的版本
Status-Code:表示服务器发回的响应状态码
Reason-Phrase CRLF:表示状态码的文本描述

如下例子:

HTTP/1.1 200 OK
表示版本为1.1,状态码为200,描述为OK

常用的状态码:

- 200 OK 客户端请求成功
- 301 Moved Permanently 请求永久重定向
- 302 Moved Temporarily 请求临时重定向
- 304 Not Modified 文件未修改,可以直接使用缓存的文件。
- 400 Bad Request 由于客户端请求有语法错误,不能被服务器所理解。
- 401 Unauthorized 请求未经授权。这个状态代码必须和WWW-Authenticate报头域一起使用
- 403 Forbidden 服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因
- 404 Not Found 请求的资源不存在,例如,输入了错误的URL
- 500 Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求。
- 503 Service Unavailable 服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。

b. 响应头:显示一些信息,如下

Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:23:42 GMT
Content-Length:112

c. 响应正文:表示服务器返回的资源。

一个完整的响应示例:

HTTP/1.1 200 OK

Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:23:42 GMT
Content-Length:112

<html>....</html>

Http连接模式的发展

我们知道HTTP协议采用的是“请求-应答”模式。HTTP 1.0版本采用的是“非Keep-Alive模式",我们暂且称它为普通模式。

a. 普通模式

对于每一个请求/应答,客户端和服务器端都需要新建一个TCP连接,完成之后立即断开连接。

然而,我们知道TCP连接的新建成本是很高的,因为需要客户和服务三次握手,并且开始时发送速率慢。为了解决这个问题,某些浏览器提供在请求头添加一个Connection: Keep-Alive字段。通过这样的方法来保持HTTP连接。

b. 持久连接(Keep-Alive):

在HTTP /1.1版本中,默认所有连接都被保持,如果加入”Connection: close"才关闭。

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

推荐阅读更多精彩内容