Http协议

前言

首先了解一下什么是Http协议,首先看一下百度百科上面对于Http协议的定义:

[超文本传输协议](HTTP,HyperText Transfer Protocol)是[互联网]上应用最为广泛的一种[网络协议].所有的[WWW]文件都必须遵守这个标准。

平时访问网站我都会在地址栏上面填写一些网址www.google.com.hk,就可以访问相关的网页了,但是究竟如何因为我输入的那一长串的东西就能看到网页呢?我们来一起探究一下。

网页的显示原理:浏览器根据提供的URL给Web服务器发送一个request,Web服务器接收request进行处理生成一个response,发送给浏览器,浏览器解析response中的html,这样网页就显示了。

接触互联网时间长,但是没有深入,我之前的认识就是觉得Http协议就是访问网页,但是不然,因为是一个协议,只要双方都遵守这个协议我们就可以进行操作,比如我们常用的QQ和迅雷,也遵循这个协议。

URL

URL(Uniform Resource Locator) 地址用于描述一个网络上的资源, 基本格式如下

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

1.schema:底层使用的协议(https,http,ftp)
2.host: HTTP服务器的IP地址或者域名
3.port#:HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 http://www.jianshu.com:8080/
4.path:访问资源的地址
5.url-params: 参数列表(有一些需要传递的数据可以通过参数列表的方式)
6.query-string:发送给http服务器的数据
7.anchor- 锚

说了这么多,我们找个网址来解析一下就会更加清晰明了。

E.G:http://www.mywebsite.com/sj/test/test.aspx?name=sviergn&x=true#stuff
schema:http
host:www.mywebsite.com
path:sj/test
query-string:name=sviergn&x=true
Anchor: stuff

疑问:什么是Anchor?他的作用是什么?为什么要使用?

Request

请求分为三部分:请求行、消息报头、请求正文

1.请求行:以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本

格式:Method Request-URI HTTP-Version CRLF
      Method:请求方法
      Request-URI:一个统一资源标识符
      HTTP-Version:请求的HTTP协议版本
      CRLF:表示回车和换行。注:不允许出现单独的CR或LF字符

1.1 请求的方法

  GET:请求获取Request-URI所标识的资源
  POST:在Request-URI所标识的资源后附加新的数据
  HEAD:请求获取由Request-URI所标识的资源的响应消息报头
  PUT:请求服务器存储一个资源,并用Request-URI作为其标识
  DELETE:请求服务器删除Request-URI所标识的资源
  TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断
  CONNECT:保留将来使用
  OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求  

举个栗子:
1.浏览器上的地址栏输入网址,浏览器采用GET方法向服务器获取资源
eg:GET/form.html HTTP/1.1(CRLF)

2.POST方法要求被请求服务器接受附在请求后面的数据,常用于提交表单
eg:POST /reg.jsp HTTP/ (CRLF)
Accept:image/gif,image/x-xbit,... (CRLF)
...
HOST:www.guet.edu.cn (CRLF)
Content-Length:22 (CRLF)
Connection:Keep-Alive (CRLF)
Cache-Control:no-cache (CRLF)
(CRLF) //该CRLF表示消息报头已经结束,在此之前为消息报头
user=jeffrey&pwd=1234 //此行以下为提交的数据

2 消息报头

2.1消息报头包括普通报头、请求报头、响应报头、实体报头
2.2每个报头域都是由名字+":"+空格+值 组成 大小写无关
2.3普通报头
      普通的报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息
      举个栗子:
      Cache-Control 用于指定缓存指令,缓存指令时单向的(响应中出现的缓存指令在请求中未必会出现),独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制),HTTP1.0使用的类似的报头域为Pragma.
      请求时的缓存指令包括:no-cache(用于指示请求或响应消息不能缓存)、no-store、max-age、max-stale、min-fresh、only-if-cached
      响应时的缓存指令包括:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage
      Date普通报头域表示消息产生的日期和时间
      Connection普通报头域允许发送指定连接的选项。
2.4请求报头
   请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。
   常用的请求报头:
      Accept:接受哪些类型的信息.Accept:image/gif 希望接受GIF图像格式的资源
      Accept-Charset:接受的字符集.Accept-Charset:iso-8859-1,gb2312 若没设置,任何字符集都能接受.
      Accept-Encoding:类似于Accept,用于接受内容编码.
      Accept-Language:类似于Accept,指定一种自然语言.
      Authorization:用于证明客户端有权查看某个资源.
      Host:发送请求时,该报头域是必需的
      User-Agent:服务器应用程序就是从User-Agent获取操作系统、浏览器和其他属性

  GET /form.html HTTP/1.1 (CRLF)
  Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF)
  Accept-Language:zh-cn (CRLF)
  Accept-Encoding:gzip,deflate (CRLF)
  If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
  If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
  User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
  Host:www.guet.edu.cn (CRLF)
  Connection:Keep-Alive (CRLF)
  (CRLF)

2.5响应报头
      响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息
Location:重定向接受者到一个新的位置(常用于更换域名的时候)
Server:服务器用来处理请求的软件信息(与User-Agent请求相对应)
WWW-Authenticate:必须包含在401(未授权的)响应消息中.
2.6实体报头
      请求和响应消息都可以传送一个实体.一个实体由实体报头域和实体正文组成,发送的话可以只发送实体报头域
      Content-Encoding:媒体类型的修饰符
      Content-Language:资源所用的自然语言
      Content-Length:实体征文的长度,以字节方式存储的十进制数字表示
      Content-Type:发送给接收者的实体正文的媒体类型
      Last-Modified:指示资源的最后修改日期和时间
      Expires:响应过期的日期和时间

response

HTTP响应分为三部分:状态行、消息报头、响应正文
1.状态行格式如下:HTTP-Version Status-Code Reason-Phrase CRLF
      HTTP-Version:服务器HTTP协议的版本
      Status-Code:服务器发回的响应状态代码
      Reason-Phrase:状态代码的文本描述
2.状态代码由三位数字组成,第一个数字定义了响应的类别,
      1XX:指示信息 表示请求已接收,继续处理
      2XX:成功 表示请求已被成功接收,继续处理
      3XX:重定向 要完成请求必须进行更进一步的操作
      4XX:客户端错误 请求由语法的错误或请求无法实现
      5XX:服务器错误 服务器未能实现合法的请求
3.常见状态代码、状态描述、说明:
      200 OK //客户端请求成功
      400 Bad Request //客户端请求有语法错误,不能被服务器所理解
      401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
      403 Forbidden //服务器收到请求,但是拒绝提供服务
      404 Not Found //请求资源不存在,eg:输入了错误的URL
      500 Internal Server Error //服务器发生不可预期的错误
      503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

说了一大圈的理论,把我自己都快搞睡着了,那我们来玩点好玩的,在电脑上面显示这些信息

利用talnet观察http协议的通讯过程

因为Mac没有搞清楚telnet,只能借用人家的文字了。
1.打开telnet
      在Mac终端上直接敲击 telnet指令
1.2 打开telnet回显功能set localecho
2、连接服务器并发送请求
2.1 openwww.guet.edu.cn 80 //注意端口号不能省略
      HEAD /index.asp HTTP/1.0 Host:www.guet.edu.cn
2.2 open www.sina.com.cn 80 //在命令提示符号下直接输入telnet www.sina.com.cn 80
      HEAD /index.asp HTTP/1.0 Host:www.sina.com.cn
3 实验结果:
3.1 请求信息2.1得到的响应是:
      HTTP/1.1 200 OK //请求成功
      Server: Microsoft-IIS/5.0 //web服务器
      Date: Thu,08 Mar 200707:17:51          
      GMTConnection: Keep-Alive
      Content-Length: 23330
      Content-Type: text/html
      Expries: Thu,08 Mar 2007 07:16:51 GMT
      Set-Cookie: ASPSESSIONIDQAQBQQQB=BEJCDGKADEDJKLKKAJEOIMMH; path=/
      Cache-control: private
//资源内容省略
3.2 请求信息2.2得到的响应是:
      HTTP/1.0 404 Not Found //请求失败
      Date: Thu, 08 Mar 2007 07:50:50 GMT
      Server: Apache/2.0.54 <Unix>
      Last-Modified: Thu, 30 Nov 2006 11:35:41 GMT
      ETag: "6277a-415-e7c76980"
      Accept-Ranges: bytes
 X-Powered-By:mod_xlayout_jh/0.0.1vhs.markII.remix
      Vary: Accept-Encoding
    Content-Type: text/html
      X-Cache: MISS from zjm152-78.sina.com.cn
      Via: 1.0 zjm152-78.sina.com.cn:80<squid/2.6.STABLES-20061207>
      X-Cache: MISS from th-143.sina.com.cn
      Connection: close
失去了跟主机的连接
按任意键继续...
4 .注意事项:1、出现输入错误,则请求不会成功。
2、报头域不分大小写。
3、更深一步了解HTTP协议,可以查看RFC2616,在http://www.letf.org/rfc上找到该文件。
4、开发后台程序必须掌握http协议

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

推荐阅读更多精彩内容

  • HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,...
    lilinjianshu阅读 519评论 0 1
  • Author :Jeffrey由于原文找不到,特意找了一个转载的: 转载地址 引言 HTTP是一个属于应用层的面向...
    夜殇丶夜逝阅读 870评论 1 10
  • 引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年...
    _烩面_阅读 1,324评论 0 9
  • 我看见过漫天星斗,也看见过寥寥无几, 我总是在黑夜的路上,昂着头看它们, 然后可能被脚下任何东西绊到, 于是我开始...
    野派阅读 416评论 0 0
  • 《只为等你》 文/白传英 我只是一枚定海神针铁 没有人走进我的视野 我一个人在东海 不知经历了多少年代 ...
    白清风阅读 206评论 0 0