浅谈http协议

作者: Evan_zhan | 来源:发表于2018-01-14 16:14 被阅读51次

1.http基础概念

2.请求与响应过程

3.请求头响应头及请求方式简述

4.客户端缓存(cookie,session及其他缓存机制)

1.什么是http????

HTTP是一套计算机通过网络进行通信的规则。使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP是一种无状态的协议。

1.1无状态的协议

无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,

这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(response),连接就被关闭了

2. 一次完整的http请求

域名解析:

(1) 浏览器首次搜索自身的DNS缓存,检查自身的缓存(缓存时间大概为 几分钟)中有没有相应的域名IP地址。如果有,则检查是否过期,如果没有过期,那么将结果返回并结束域名解析的过程;否则,往下执行;

(2) 在浏览器自身没找到IP地址的话,浏览器就会在操作系统搜索DNS缓存。如果存在,同样需要检查是否过期;

(3) 如果操作系统中也没有找到,那么就读取本地的HOST文件(在C盘下:Windows\System32\drivers\etc),在本地文件里面查找;

(4) 如果在本地HOST文件下也没能找到,那么浏览器发起一个DNS的系统调用。过程如下:

  1. 宽带运营商服务器查看本地缓存,如果找到就结束该过程,否则继续执行;

  2. 宽带运营商服务器代替浏览器发起一个迭代DNS的请求:首先找到根域的DNS IP地址拿到顶级域COM域的IP地址;接着在COM域服务器的地址中寻找主域名(如:imooc.com)的DNS服务器的地址;最后在主域名DNS服务器中找到请求的域名的IP地址,主域名DNS服务器就将该地址发送给运营商服务器。这个时候运营商服务器将结果返回给操作系统内核,然后内核从操作系统DNS服务器上拿去IP地址并返回给浏览器,最后就是浏览器拿到了请求域名的IP地址。

( 1 ) 建立TCP连接

三次握手 建立连接

( 2 ) 浏览器向服务器发送请求命令

( 3 ) 服务器响应

( 4 ) Web服务器关闭TCP连接

请求方式:

GET

GET是http的默认请求方式,一般用来获取数据,传输的数据经过url编码后放在路径?之后,多个键值对通过&连接,另外get的传输长度一般不推荐超过255个字节。

GET方法一般被视为安全方法, 因为它仅用来获取数据而不会对服务器有其他改动。像HEAD、GET、OPTIONS 和 TRACE这几种http方法是被认为是“安全的”,它们只会进行获取数据而不会修改服务器的状态,可用于记录日志、创建缓存或者创建其他统计信息。相反,像POST、PUT、DELETE 和 PATCH 等方法是有可能产生副作用。网络爬虫等一般不会使用这些方式

POST

POST一般用来上传文件或者提交一个完整的web表单。浏览器中提交表单时,这里与get类似,每个键值对都是通过&分割, 其他非字母数字会进行url转码。

其他请求方式

  • HEAD获取某个URI响应头信息,基本与GET相同但是不返回响应主体。
  • PUT通过提供的URI获取到特定的内容主体,如果存在则修改内容,如果不存在则创建。
  • DELETE通过URI删除指定内容
  • TRACE返回接受到的请求,用来查看数据经过中间服务器时发生了哪些变动
  • OPTIONS返回给定URL支持的所有HTTP方法,这样可以用来检查web服务器的功能
  • CONNECT要求使用SSL和TLS进行TCP通信
  • PATCH请求修改局部数据

这些请求方法本质上没有区别,最终都是TCP请求,唯一的区别就是每个请求方法,使用的时候,规范规定的使用格式不同,原则上必须按照规范规定的格式使用,其实也可以违反规范使用,比如你可以使用GET方法请求数据,也可以使用GET方法提交数据,当然你可以用POST方法提交数据,也可以用POST方法获取数据。

下面是Chrome发起的http请求报文头部信息:

clipboard3.png
  • Accept 就是告诉服务器端,我接受那些MIME类型
  • Accept-Encoding 接受哪些压缩方式的文件
  • Accept-Lanague 告诉服务器能够发送哪些语言
  • Connection 告诉服务器支持keep-alive特性
  • Cookie 每次请求时都会携带上Cookie以方便服务器端识别是否是同一个客户端
  • Host 用来标识请求服务器上的那个虚拟主机,比如Nginx里面可以定义很多个虚拟主机.那这里就是用来标识要访问那个虚拟主机。
  • User-Agent 用户代理,一般情况是浏览器,也有其他类型,如:wget curl 搜索引擎的蜘蛛等
  • 安全请求首部:
  • Authorization: 客户端提供给服务器的认证信息;
  • accessToken: 一般作为请求操作时的访问令牌,比如你让用户用QQ登陆后要去拿用户的QQ头像,这时候向腾讯API发送请求时就需要带上access_token。

响应头:


clipboard4.png
  • Access-Control-Allow-Credentials: 允许跨域
  • Access-Control-Allow-Headers: 允许访问的请求头
  • Access-Control-Allow-Methods: 请求方式
  • Access-Control-Allow-Origin: 域名
  • Access-Control-Expose-Headers:
  • Transfer-Encoding:chunked 分块传输编码 是http中的一种数据传输机制,允许HTTP由网页服务器发送给客户端应用(通常是网页浏览器)的数据可以分成多个部分

拓展:(WebSocket) 有状态

需要通过浏览器发出websocket连线请求,然后服务器发出回应,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

特点:持久的连接

互相沟通的Header是很小的-大概只有 2 Bytes

服务器不再被动的接收到浏览器的请求之后才返回数据,而是在有新数据时就主动推送给浏览器。

webSocket api

  1. 创建webSocket对象

var Socket = new WebSocket(url, [protocol] );//第一个参数 url, 指定连接的 URL。第二个参数 protocol 是可选的,指定了可接受的子协议。

  1. 方法:


    QQ截图20180114160210.png

详细了解 参考资料(https://www.zhihu.com/question/20215561


浏览器存储机制

cookie、localstorage、sessionStorage

clipboard.png

cookie的内容主要包括:名字、值、过期时间、路径和域

Secure – 安全

指定cookie的值通过网络如何在用户和WEB服务器之间传递。

这个属性的值或者是“secure”,或者为空。缺省情况下,该属性为空,也就是使用不安全的HTTP连接传递数据。如果一个 cookie 标记为secure,那么,它与WEB服务器之间就通过HTTPS或者其它安全协议传递数据。不过,设置了secure属性不代表其他人不能看到你机器本地保存的cookie。换句话说,把cookie设置为secure,只保证cookie与WEB服务器之间的数据传输过程加密,而保存在本地的 cookie文件并不加密。如果想让本地cookie也加密,得自己加密数据。

Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用。

除此之外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装setCookie,getCookie。

最主要的区别:

  • localStorage生命周期是永久,这意味着除非用户显示在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在。
  • sessionStorage生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭了,那么所有通过sessionStorage存储的数据也就被清空了。

Cache

1.Application Cache

html5提供的一种应用缓存机制,使得基于web的应用程序可以离线运行。优点有如下几点:

离线浏览: 用户可以在离线状态下浏览网站内容。

更快的速度: 因为数据被存储在本地,所以速度会更快。

减轻服务器的负载: 浏览器只会下载在服务器上发生改变的资源。

使用:

1.开启应用缓存:在html标签制定manifest,manifest特性与 缓存清单(cache manifest) 文件关联,这个文件包含了浏览器需要为你的应用缓存的资源(文件)列表

clipboard1.png

2.编写缓存清单文件

clipboard2.png

CACHE:

这是缓存文件中记录所属的默认段落。在 CACHE: 段落标题后(或直接跟在 CACHE MANIFEST 行后)列出的文件会在它们第一次下载完毕后缓存起来。

NETWORK:

在 NETWORK: 需要与服务器连接的白名单资源。所有类似资源的请求都会绕过缓存,即使用户处于离线状态。可以使用通配符“*”代表除以上指定之外全部需要从服务器拉取。

FALLBACK:

FALLBACK: 段指定了一个后备页面,当资源无法访问时,浏览器会使用该页面。该段落的每条记录都列出两个 URI—第一个表示资源,第二个表示后备页面。两个 URI 都必须使用相对路径并且与清单文件同源。可以使用通配符,类似404.html。

CACHE, NETWORK, 和 FALLBACK 段落可以以任意顺序出现在缓存清单文件中,并且每个段落可以在同一清单文件中出现多次。

相关文章

  • 浅谈HTTP协议

    一、HTTP简述 1.Http协议概述 超文本传输协议(HyperText Transfer Tansfer Pr...

  • HTTP协议浅谈

    在鸡年的最后一天完成了这篇文章。表示愉悦的同时,更要祝福大家狗年大吉吧....下方是一根不正经的分割线... 重新...

  • 浅谈http协议

    1.http基础概念 2.请求与响应过程 3.请求头响应头及请求方式简述 4.客户端缓存(cookie,sessi...

  • 浅谈 HTTP 协议

    本文为原创作品。欢迎转载,转载请注明出处:林东洲的博客 | Lindz Blog。 作为一个 Weber,掌握必要...

  • 浅谈URL与HTTP协议

    什么是URL(统一资源定位符)? 它是一个全球性的地址,用于定位网上的资源,包括HTML页、音频、视频、以及其他形...

  • iOS 网络数据安全(防止抓包)

    A.首先 浅谈http、https与数据加密 ip、端口、http协议 下面用一个例子来介绍客户端与服务器在应用层...

  • 浅谈http、https与数据加密

    浅谈http、https与数据加密 ip、端口、http协议 下面用一个例子来介绍客户端与服务器在应用层的通讯流程...

  • 第六个模块 HTTP协议、Restful

    HTTP协议 · HTTP协议 · 工作原理 HTTP协议请求 HTTP协议响应 HTTP协议消息报头 1、普通报...

  • HTTP请求简单总结

    HTTP协议 HTTP协议:超文本传输协议(Hypertext Transfer Protocol) http协议...

  • Java----使用nioSocket获取和返回http报文

    参考博客:HTTP协议(一)之HTTP协议详解 HTTP协议 HTTP(HyperText Transfer Pr...

网友评论

    本文标题:浅谈http协议

    本文链接:https://www.haomeiwen.com/subject/cygkoxtx.html