Http

OSI 七层模型

OSI:Open System Interconnection Refer Model 开放式系统互联通信参考模型,是由国际标准化组织提出的一种概念模型,是一个试图让各种计算机在全世界范围内连成网络的标准框架;它将网络通信分成七个层面。从距离用户最近至最底层简述如下:

  • 应用层 Application:用户交互的对象,用户通过这一层进行信息交互。通俗点例如chrome浏览器、或者发邮件的outlook就是这一层。
  • 表示层 Presentation:这一层是操作系统所在的层,处理数据,转化加密等确保另一个系统能识别你的数据。
  • 会话层 Session:负责你的电脑与服务器的通信连接与维护,创建连接→请求→响应。
  • 传输层 Transport:把传输表头加至数据以形成数据包,控制调节数据的传输,决定类似一次发送多少数据的问题。
  • 网络层 Network:路由的工作层,它决定路径的选择和转寄。
  • 数据链路层 Data Link:交换机的工作层,负责网络寻址、错误侦测和改错。
  • 物理层 Physical:最底层的物理联网介质和数据传输实现,网线、连接器及比特流的传输等。

HTTP 的工作原理

HTTP 全称 Hyper Text Transfer Protocol 即超文本传输协议;它是一个客户端终端和服务器端请求和应答的标准。它的请求和响应步骤如下:

  • 建立连接:客户端与服务器端建立一个TCP连接。
  • 发起请求:客户端向服务器端发起Http请求,会发送请求报文,由请求行、消息报头和请求正文组成。
  • 返回响应:服务器端接收到请求并进行解析,定位请求资源,给客户端发送响应报文,由状态行、消息报头和响应正文组成。
  • 释放TCP连接:服务器关闭TCP连接。(如果连接模式是keepalive的话会保持一段时间可继续接受请求)

URI 的格式及常见的协议

URI 全称Uniform Resource Identifier 统一资源标志符,是一个用于标识一个互联网资源名称的字符串。由两个子集构成,通过描述资源位置确定资源的URL,以及通过名字来识别确定资源的URN。它的格式如下:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<hash>
http:// user:pass@www.example.com :80 /dir/index ?uid=1&nam=2 #ch1

  • <scheme> 协议方案名 常见的有http、https等。
  • <user>:<password> 用户的登录信息 现在一般不会把登录信息放在url中。
  • <host> 服务器地址 用户一般使用域名方便记忆,浏览器经DNS解析去访问对应IP地址。
  • <port> 端口号 服务器的进程接口,80是http协议默认的端口号,ftp协议默认21端口,https默认443端口。
  • <port> 路径 找到服务器后再去对应的路径下寻找资源。
  • <params> 在一些协议中需要参数来访问资源,参数用名值对用隔开。
  • <query> 查询字符串,常见的是get请求中data以此形式传给服务器。
  • <hash> 片段标识符-哈希,之前作为页面锚点的时候见过。

常见的协议有 Http、Https、FTP、SSH等。

HTTP 协议几种和服务器交互的方法

  • GET:得到,最常用的方法,向服务器发送请求要求获取某个资源。
  • HEAD:头,亦即不需要数据主体只想得到描述资源信息的头部,一般用于查看资源信息、查看状态码看下资源是否存在、查看首部看下资源有没有被修改。
  • POST:投递,好理解,就是向服务器发数据,一般是在html表单中用于向服务器提交表单信息的。
  • PUT:放,就是向服务器写入资源,修改某个内容。
  • TRACE:跟踪,这个方法会在最后发往服务器时,返回一个TRACE响应给客户端,告诉客户端最终服务器收到的请求报文是什么样的。
  • DELETE:删除,要求服务器删掉给定url下的资源,服务器可能不会支持。
  • OPTIONS:其他,用来查询服务器支持哪些功能。

状态码200,301, 304,403 , 404 , 500,503分别代表什么意思

  • 200 OK 请求已成功 根据请求方式的不同会有不同的反馈内容
  • 301 Moved Permanently 所请求的资源被永久性地移动到另一个地方 响应会返回新的url 下次客户端会按照新的url去访问
  • 304 Not Modified 客户端有缓存的文档 当再一次发起请求时 服务器经比对后发现文档内容并没有变化时就会返回此状态码 让客户端使用本地缓存
  • 403 Forbidden 服务器已经理解请求 但拒绝执行 一般是因为没有对应的权限
  • 404 Not Found 请求失败 在服务器上找不到你所请求的资源
  • 500 Internal Server Error服务器出错了 无法完成客户端的请求
  • 503 Service Unavailable服务器过载了 目前无法处理客户端的请求

报文由哪几部分组成

http报文有请求报文和响应报文,是一个简单的格式化数据块,它由以下3个部分组成:

  • start line:起始行 对报文进行简单描述
  • header:包含一些属性的首部块
  • body:数据的主题部分,有些请求不需要返回这部分

请求头的格式和作用

作用:为请求添加额外的信息,来告诉服务器客户端的信息和能力,服务器可以据此为客户端提供更好的响应。
格式:是名/值的形式;名字后面跟着冒号,加上可选的空格,再加上字段值,最后回车或换行。

0_1463029655966_upload-264bf520-20fb-459c-986e-9cbf5da71be7

范例

  • GET/HTTP/1.1 请求方法、协议、版本号 ←这是请求报文起始行
  • Host:服务器地址
  • Connection:连接方式 一般请求后就断开 图中是keep-alive,可以继续接收请求。
  • Accept:说明我这个客户端可以接受哪些类型的资源。
  • Upgrade-Insecure-Requests:自动升级请求,在https承载的页面上不允许出现http请求,出现就会报警,这个属性会自动替换https请求。
  • User-RefererAgent:用户代理也就是浏览器客户端自身的信息。
  • Referer:客户端是从哪里跳转过来的。例如我们从百度跳到饥人谷官网,这里就会是百度的网址。
  • Access-Encoding:客户端可以接受的编码类型。
  • Accept-Language:客户端可以解析接受的语言。
  • Cookie:服务器端为了辨识用户身份而留在客户端的数据,发送请求时客户端会把cookie一起发送给服务器。

首部的格式和作用

作用:HTTP的首部向请求或响应报文添加了一些附加信息,它是一些名/值对的列表。它分为通用首部、请求首部、响应首部、实体首部和拓展首部。
格式:名字后面跟着冒号,加上可选的空格,再加上字段值,最后回车或换行。

0_1463034116314_upload-858a3ce0-998c-4ae7-ad2f-44aab51e1cff

范例

  • HTTP/1.1 200 OK 协议/版本 状态码 释义 ←这是响应报文起始行 不属于首部
  • Server:属于响应信息性首部,服务器用的是哪一种及版本 图中用的是nginx 版本1.6.2
  • Data:属于通用信息性首部,提供日期和事件说明报文是什么时候创建的。
  • Content-Type:属于实体内容首部,告诉客户端主体的数据类型。
  • Transfer-Encoding:属于通用信息性首部,传输的编码方式,图中chunked是分块传输例如小说分一章一章传输。
  • Connection:属于通用信息性首部,可以指定请求/响应的连接选项,图中keep-alive在响应后连接依然可以存在一段时间。
  • X-Powered-By:显示此资源用什么技术开发及对应版本 感觉只有PHP
  • Expires:属于实体缓存首部,提示缓存过期的时间,超过这个时间就需要重新获取资源。
  • Pragma:属于通用缓存首部,另一种随报文传送的指示,并不专用于缓存。
  • Cache-Control:属于通用缓存首部,随报文传送缓存指示,图中private是指私人缓存每个人不一样。
  • Content-Encoding:属于实体内容首部,告诉客户端对主体执行的编码方式。
  • Vary:属于响应协商首部,是一个首部列表,服务器会根据这些首部的内容挑出最适合的资源版本发给客户端。

主体的作用

  • 实体的主体部分就是HTTP要传输的内容了,一般是图片、视频、HTML文档等。下面饥人谷首页的响应实体,也就是HTML文档了。


    0_1463037793472_upload-3892ad8a-24a1-4d3a-9bf2-23649fda8de5

浏览器缓存是如何控制

  • 是什么:浏览器缓存是web缓存中的一个类型,与公用缓存不同,浏览器一般都有内建的私有缓存,会缓存已经访问过的页面,也就是把资源复制了一份放在本地,缓存可以减少网络带宽的压力、降低服务器的压力、也能让我们更快地打开页面获得资源。
  • 缓存页面、过期时间:在我们首次请求资源或页面时,原始服务器利用HTTPcache-control首部expires首部给文档加上了过期时间,标明了保质期。在保质期内请求已缓存的资源时,浏览器就不会向服务器发送请求而是直接使用本地缓存。
  • 过期后的再验证:当过了保质期以后呢,这个时候浏览器就会向服务器发起请求同时附带过期时间。若文档与缓存的副本不一样服务器就响应新的文档给浏览器,同时浏览器会继续缓存新的文档;若服务器比对后发现文档没有变化,就会发个新的过期时间让浏览器继续使用本地缓存。对缓存再验证最有用的两个首部是If-Modified-Since和If-None-Match。最后引用博客园的一张图面解释,更加清晰。
    • If-Modified-Since:当资源过期时,再请求时若发现资源带有Last-Modified(最后修改日期)声明时,会带上If-Modified-Since:Last-Modified Data发给服务器,收到后服务器就会比对最后修改时间,若没被修改就返回304 Not Modified响应报文并且附带新的过期事件;若被修改了就返回新的文档和过期时间。
    • If-None-Match:如果在资源过期后再请求时发现资源带有Etage声明(资源在服务器的唯一标识,生成规则服务器自定),会带上If-None-Match:Etage值发给服务器,收到后服务器就会进行比对校验来决定返回200还是304,响应与If-Modified-Since相同。
      0_1463123874986_201211281402442505 (1).png

下图各个参数是什么意思


General:概述

  • Request URL:请求的资源的URL也就是位置
  • Request Method:客户端向服务端发出请求的方法,图中是用PUT方法
  • Status Code:状态码,图中是200 表示成功OK
  • Remote Address:资源所在的IP地址

Response Headers 响应头

  • Connection:连接方式;图中是keep-alive,在请求后的一段时间内还是相连的,可直接继续发送请求。
  • Content-Length:主体的长度或尺寸
  • Content-type:主体的类型
  • Date:报文创建的时间
  • Server:服务端软件及版本,图中是Nginx/1.6.2
  • X-Powered-By:开发资源的技术是Express

Request Headers 请求头

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

推荐阅读更多精彩内容