http的简单学习

今天中午学习了下http,之前没有系统性的学过,只知道它是超文本传输协议,但对其的一些基本知识还是感觉还是很陌生的。当我中午看见http这个词的时候,首先就想到的一个问题的就是,这是个协议是用来做什么的?
带着这个问题,我们查找了资料,http设计之初是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。现在http的作用已不局限于HTML的传输,图片文件,查询结果等数据也是可以传输的。它的通信过程是这样的:

http协议通信图

那么,问题来了,我在web 浏览器中输入了网址之后到底发生了什么?它是如何到server的?server又是如何响应浏览器的请求的?我们来探究下这个过程。

一.http的请求响应流程

我们先输入网址以www.google.com为例,浏览器将显示google的首页。在这个过程中,通过Network的记录,我们就可以知道。在Network中,定位到第一条记录,点击,右侧将显示Request Headers,我们就可以看到浏览器发给google服务器的请求:

http发送图

scheme:指定低层使用的协议(例如:http, https, ftp)
host:HTTP服务器的IP地址或者域名
port#:HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如http://www.mywebsite.com:8080/
path:访问资源的路径
Accept:我能接受这些类型的文件
User-Agent: 我使用的是何种操作系统上的哪个类型那个版本的浏览器
Accept-Encoding:承认接受何种方式的压缩文件
Cookie:发送存储在本机的cookies信息给服务器

服务器又返回给浏览器了什么内容?

服务器返回的头部信息

200:表示一个响应的状态码
Content-Type:指示响应的内容,这里是text/html,表示HTML网页。

_ 请注意_:浏览器就是依靠Content-Type来判断响应的内容是网页还是图片,是视频还是音乐。浏览器并不靠URL来判断响应的内容,所以,即使URL是这样的,如: http://example.com/abc.jpg, 它也不一定就是图片。

服务器响应的内容信息

所以,我们总结http的请求流程如下:

1.浏览器首先向服务器发送HTTP请求,请求包括:
  • 方法:GET还是POST,GET仅请求资源,POST会附带用户数据;
  • 路径:/full/url/path;
  • 域名:由Host头指定:Host: www.google.com.cn
    以及其他相关的Header;

如果是POST,那么请求还包括一个Body,包含用户数据。

2.服务器向浏览器返回HTTP响应,
  • 响应代码:如200。
  • 响应类型:由Content-Type指定;
  • 以及其他相关的Header;

通常服务器的HTTP响应会携带内容,也就是有一个Body,包含响应的内容,网页的HTML源码就在Body中。

3.如果浏览器还需要继续向服务器请求其他资源,比如图片,就再次发出HTTP请求,重复步骤1、2。

搞清楚了http数据传输的相关流程,接下来我们看下和http相关的基本概念:

二.http的特点:

1.无连接

无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间

2.媒体独立

这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型

3.无状态

指的是协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

换而言之:无状态也就是说在同一个连接中,两个成功执行的请求之间是没有关系的。这就带来了一个问题,用户没办法在一个网站进行连续的交互,比如在一个电商网站里,用户把某个商品加入了购物车中,换了一个页面后再次添加商品,两次添加商品的请求没有联系,浏览器无法知道最终用户都选择了哪些商品。两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。

三.http的消息结构

1.客户端请求消息:三部分

第一部分叫Request line(请求行), 第二部分叫http header,第三部分是body。
(1)请求行:包括http请求的种类,请求资源的路径,http协议版本;
(2)http header:http头部信息;
(3)body:发送给服务器的query信息 当使用的是"GET" 方法的时候,body是为空的(GET只能读取服务器上的信息,post能写入)

请求报文格式

在上图中,我们看见了URL ,那么问题问题来了,URL 该如何理解?
URL:
(1) 概念:URL—Uniform Resource Location统一资源定位符,说白了就是我们常说的“网址”
(2) 组成:Protocol(协议)+Host(主机)+Port(端口)+Query

示例URL:
http://www.mywebsite.com/sj/test;id=8079?name=sviergn&x=true#stuff

Schema: http
host: www.mywebsite.com
path: /sj/test
URL params: id=8079
Query String: name=sviergn&x=true
Anchor: stuff
2.服务端响应消息

也分为三部分,第一部分叫request line, 第二部分叫request header,第三部分是body。
(1)request line:协议版本、状态码、message
(2)request header:request头信息
(3)body:返回的请求资源主体


http响应结构图

四.HTTP请求方法

在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST,上面我们探究的过程中method告诉我们用到的是GET方法。

 GET - 从指定的资源请求数据。
 POST - 向指定的资源提交要被处理的数据

其他的方法如下图:

http的部分方法

既然说道了get和post,那么常见的问题就来了,get和post 的区别是什么?在这里,我总结了一下它们的区别:

GET一般用于获取/查询资源信息,而POST一般用于更新资源信息.

1. GET 提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456。POST方法是把提交的数据放在HTTP包的Body中。
2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
3. GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
4. GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.

接下来是什么问题呢?在上面我们看见如浏览器若请求后,则返回了一个状态码200,那么200有何含义,还有其他的状态码?

五.状态码

状态码由三位数字组成,第一个数字定义了响应的类别

1XX     提示信息 - 表示请求已被成功接收,继续处理
2XX     成功 - 表示请求已被成功接收,理解,接受
3XX     重定向 - 要完成请求必须进行更进一步的处理
4XX     客户端错误 - 请求有语法错误或请求无法实现
5XX     服务器端错误 - 服务器未能实现合法的请求

常见的状态码,如下:

  • 200 OK 请求被成功地完成,所请求的资源发送回客户端
  • 302 Found 重定向,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的Request
  • 304 Not Modified 文档已经被缓存,直接从缓存调用
  • 400 Bad Request 客户端请求与语法错误,不能被服务器所理解
  • 403 Forbidden 服务器收到请求,但是拒绝提供服务
  • 404 Not Found 请求资源不存在
  • 500 Internal Server Error 服务器发生了不可预期的错误
  • 503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常

最后一个问题就是,就是网页中存在的Content-Type了。

六.Content-Type

内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载到的一个文件或一张图片的原因。

若想了解详细的HTTP content-type ,请戳这个菜鸟网址

参考网址:
1.https://www.zybuluo.com/yangfch3/note/167490
2.https://www.zybuluo.com/yangfch3/note/113028
3.http://www.runoob.com/http/http-tutorial.html
4.http://www.w3school.com.cn/tags/html_ref_httpmethods.asp

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,596评论 18 139
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,328评论 6 152
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 5,201评论 3 82
  • http协议有http0.9,http1.0,http1.1和http2三个版本,但是现在浏览器使用的是htt...
    一现_阅读 1,855评论 0 3
  • 每一次我们都会发现,放弃抵抗是一种选择,而且并非不可避免。了解我们是如何给自己许可的,能让我们学会如何不离正轨。 ...
    易秒阅读 145评论 0 0