网上笔记参考:

https://juejin.im/post/5b34e6ba51882574d20bbdd4#heading-8

http://dy.163.com/v2/article/detail/DJU2L7E50516W1GE.html

https://blog.csdn.net/zhanghuali0210/article/details/82080096

https://www.cnblogs.com/ycxqdkf/articles/10397122.html

缓存(cache-control):

可缓存性(哪里可以缓存):public/任何地方,private/浏览器,no-cache/(可以缓存但是每次都要验证,验证后告诉你用缓存还是重新请求)

到期(缓存可用多久): max-age,s-maxage(代理服务器使用),max-stale(在该值的时间内可以使用过期缓存)

重新验证:must-revalidate,proxy-revalidate

No-store:(本地和服务器都不能存缓存)

No-transform: 不能对缓存进行改动(如: 压缩,转换)

查看资源是走缓存还是重新请求:

走缓存的条件: 1.响应头设置了cache-control 2.缓存在有效期max-age以内 3. 如果超过max-age有效期或者设置了no-cache时,就要通过last-modified和Etag验证才可用缓存。4.没有设置no-store

缓存验证:1.Last-modified(响应头设置Last-modified即上次修改时间,请求头会带上if-modified-since供服务端与最新修改时间比对是否相等。)2.Etag(数据签名: 内容一旦修改就会修改签名)

同源

跨域实现: 1.jsonP(原理:script和img的src可以跨域,前端定义回调函数,后端拼接,并把数据作为参数传入回调函数一起返回给前端调用), 2.access-origin.. ,3. Proxy ...

跨域是浏览器的限制!(有请求和返回,只是浏览器会根据响应头中设置判断是否允许跨域!)

CORS预请求验证: 它的Request Method是OPTIONS。通过OPTIONS请求获得服务端的允许,然后再发送实际的请求。

限制:

默认允许方法: Get,post,head。 其他方法(put,delete等)浏览器需要预请求(method:option)验证。

默认允许的Content-Type:

text/plain、multipart/form-data,applicaton/x-www-form-urlencoded。 其他type需要浏览器预请求。。。

默认允许请求头:https://fetch.spec.whatwg.org里面有介绍允许的头部。 其他请求头需要浏览器预请求。。。

XMLHttpRequestUpload对象均没有注册任何事件监听器

请求中没有使用ReadableStream对象

解决办法:根据CORS标准定义,服务端需要在浏览器的跨域请求响应中包含指定消息头,浏览器根据响应消息头知道是否可以访问跨域资源。如下:

http客户端: 浏览器,curl等(安装curl,并curl -v www.baidu.com)

启动一个node服务: 1.安装node 2.node server.js

URI URL URN

URI(统一资源标识符)包含URL和URN

URN永久统一资源定位符,目的是让资源移动后还能被找到,目前还没有成熟的使用方案。

HTTP发展历史

  HTTP/0.9

  该版本只有一个命令GET;没有HEADER等描述数据的信息; 服务器发送完毕,就关闭TCP连接。

  HTTP/1.0

  该版本增加了很多命令;增加status code 和header;多字符集支持、多部分发送、权限、缓存等。

  HTTP/1.1

  该版本增加了持久连接、Pipeline,增加host和其他一些命令。持久连接会在HTTP特性中介绍;如果没有pipeline,那么Web服务器就需要串行处理请求,而有了pipeline,Web服务器就并行处理请求;而增加host实现了一台物理设备可以运行多个web服务。

  HTTP/2.0

  所有数据以二进制传输,之前版本使用字符串进行传输;同一个连接 里面发送多个请求不再需要按照顺序来;头信息压缩以及推送等提高效率的功能。

http发展历史: http/0.9   http/1.0  http/1.1   http/2.0未来(二进制数据传输,并行请求,服务端推送)

Tcp connection(一次tcp连接中可有多次http请求。三次握手)

wireshark抓包工具,学习并使用一下

三次握手分析!

web开发只需要学习应用层和传输层(顶多接触TCP),其他三层了解即可:

从输入URL到http传输完成流程图:

根据上图知道哪个阶段用时多,针对该阶段(比如是缓存阶段)进行优化。

http报文:请求(请求首行,请求header, 请求body),响应(响应)

请求报文和响应报文分为起始行、首部(header)和主体(body),请求报文的首部包括三部分,分别是HTTP方法、资源目录和协议,而响应报文的首部包括协议版本、状态码和状态码对应的意思,比如200状态的意思是ok。需要注意的是:HTTP header和HTTP body之间以一行分隔。

请求首行: (1.http方法Get,post(新增),put(修改),delete 2.path 3.http version)

响应首行: (1.http version 2.http code 3.http code的含义)

http code:用于定义服务器对请求的处理结果,各个区间的code有不用的语义。1xx 表示信息响应类,表示接收到请求并且继续处理;2xx 表示成功;3xx 表示重定向;4xx 表示客户端出错;5xx 表示服务器出错。

Cookie

定义:cookie是由服务端响应头的set-cookie设置的,返回给客户端后,此后浏览器每次请求都会带上

过期时间:默认是浏览器关闭后,也能通过max-age和expires设置

secure只在https的时候发送

设置httpOnly后,js便无法通过document.cookie访问cookie(常用安全策略)

cookie不能跨域设置。

a.test.com和 b.test.com属于不同域名,但都是test.com的子域,因此能通过在顶级域名设置domain来实现cookie共享。

HostAdmin App: 类似于DNS的域名:IP映射工具(chrome插件):

 TCP长链接:

 长连接

  我们知道一个HTTP需要创建一个TCP连接,完成之后就关闭TCP连接,这个成本比较高(因为创建一个TCP连接需要通过三次握手),所以在HTTP/1.1开始支持长连接,请求头标识是Connection:keep-alive。如下图所示,同一个Connection ID表示同一个连接。需要注意的是同一个连接只能是同域请求。

长连接就是一个tcp链接中可以发多个http请求,

即一个connection id代表一个tcp链接。长连接设置: 响应头设置为'Connection': 'keep-alive'

短连接设置:'Connection': 'close'

设置长连接后,一个tcp连接中可以同时发多个http请求,即可以并行。

tcp连接个数的限制: 如谷歌是限制为最多6个,即6个connection id(就是tcp 链接id),6个用完后不会创建新的tcp连接,只能等哪个tcp连接完了再进入哪个老的tcp连接。

 
 

http笔记汇总的更多相关文章

  1. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  2. MySQL笔记汇总

    [目录] MySQL笔记汇总 一.mysql简介 数据简介 结构化查询语言 二.mysql命令行操作 三.数据库(表)更改 表相关 字段相关 索引相关 表引擎操作 四.数据库类型 数字型 字符串型 日 ...

  3. NGUI学习笔记汇总

    NGUI学习笔记汇总,适用于NGUI2.x,NGUI3.x 一.NGUI的直接用法 1. Attach a Collider:表示为NGUI的某些物体添加碰撞器,如果界面是用NGUI做的,只能这样添加 ...

  4. 读书笔记汇总 --- 用Python写网络爬虫

    本系列记录并分享:学习利用Python写网络爬虫的过程. 书目信息 Link 书名: 用Python写网络爬虫 作者: [澳]理查德 劳森(Richard Lawson) 原版名称: web scra ...

  5. ST官方翻译的中文应用笔记汇总

    ST官方翻译的中文应用笔记汇总 http://www.51hei.com/stm32/3382.html 官方中文AN:AN3116:STM32? 的 ADC 模式及其应用AN1015:用于提高微控制 ...

  6. Spring研磨分析、Quartz任务调度、Hibernate深入浅出系列文章笔记汇总

    Spring研磨分析.Quartz任务调度.Hibernate深入浅出系列文章笔记汇总 置顶2017年04月27日 10:46:45 阅读数:1213 这系列文章主要是对Spring.Quartz.H ...

  7. ES6 笔记汇总

    ES6 笔记汇总 二.ES6基础-let和const命令 三.变量的解构赋值 四.字符串的拓展 五.正则表达式的拓展 ...将会持续更新,敬请期待

  8. 【笔记目录2】【jessetalk 】ASP.NET Core快速入门_学习笔记汇总

    当前标签: ASP.NET Core快速入门 共2页: 上一页 1 2  任务27:Middleware管道介绍 GASA 2019-02-12 20:07 阅读:15 评论:0 任务26:dotne ...

  9. SpringBoot+MyBatis练手项目笔记汇总

    以下是我在练习SpringBoot+MyBatis训练时候个人一些笔记汇总(可以点击跳转),献丑了,网上很多大佬的文章都比我写的详细,一些好的文章,我会将贴到各个内容中. 1. 插入数据返回id和内部 ...

  10. JQuery笔记汇总

    jQuery相关资料 官网: jQuery官网 在线API: jQuery在线API W3School:W3School-jQuery教程(中文版哦) 下载jQuery:jQuery各版本下载 jQu ...

随机推荐

  1. python23的区别-日常记录

    1. xrange:python3 中取消了range函数,把python2中的xrange重新命名为range,所以在python3中直接用range就行. 2. print:python3中pri ...

  2. Domination(概率DP)

    Domination 题目链接:https://odzkskevi.qnssl.com/9713ae1d3ff2cc043442f25e9a86814c?v=1531624384 Edward is ...

  3. Linux文件系统命令 touch/rm

    命令:touch 功能:创建文件,后接相对路径或者绝对路径 eg: touch ./ren/jin/gui.txt 命令:rm 功能:删除文件,当删除的是目录的时候要加-R参数进行递归删除. eg: ...

  4. redis 五大数据类型之hash篇

    1.hset/hget/hmset/hmget/hgetall/hdel --hgetall 是以截图中 key-value 分别一一显示出来,k1对应v1 ,k2对应v2 2.hlen 3.hexi ...

  5. ueditor 设置高度height. ue.setHeight(400); 设置宽度 width

    1.引入的文件: <script type="text/javascript" src="../../dist/ueditor1_4_3-utf8-php/uedi ...

  6. 解决At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs

    在写spring security小程序时遇到  At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug l ...

  7. kbmMW随机数与强密码

    kbmMW随机数生成器 为了使基于kbmMW开发的项目更安全,其又提供了随机数及强密码生成实现类,拿来即用,让人感觉真是站到巨人的肩膀上好干活! 随机数方面,kbmMW分别提供32及64位的随机数生成 ...

  8. Vue数组操作不刷新视图问题的解决

    最近使用Vue2.0开发项目,有一个列表使用v-for绑定到数组,按照Vue的推荐方案,使用push.splice.this.$set三个变异方法操作数组.发现在添加页面,三个方法都能及时刷新视图:但 ...

  9. ubantu 安装git

    1.安装git并配置 sudo add-apt-repository ppa:git-core/ppa sudo apt-get update sudo apt-get install git 可以使 ...

  10. 爬虫框架存储pymysql方式

    爬虫框架存储pymysql方式# -*- coding: utf-8 -*-import pymysql# Define your item pipelines here## Don't forget ...