你需要掌握的http知识
作为一名前端er,http是我们必须要掌握的,那么我们到底需要掌握哪些东西呢
一、基础知识
这里我们介绍与http相关的TCP、IP、DNS、url、uri
1.IP
IP地址是我们很熟悉的东西,最常见的的就是127.0.0.1。我们都知道连接网络后,每个人都会有不同的IP地址,而每台计算机也有自己的mac地址(这个地址是硬件写死的),那么我们传输信息的时候只要知道对方的IP地址,然后再和mac地址配对就基本可以确定接受信息方;而传输过程中我们肯定是希望信息高效传递过去,那么传输方式以及传输路径就要找到最好的方式。IP协议就是做这些事情的,IP是指IP协议而不是我们常常说的IP地址,它位于网络层,所要做的事情主要是以下三点:
1)寻址和路由;
2)传递服务;
3)数据包的分片和重组;
2.TCP
首先按照分层,TCP位于传输层,提供字节流服务。那么什么是字节流呢?网络传输数据就像汽车运输货物一样,比如我们运输的是信号塔,这么大不可能一下子运到目的地,这时候就需要一部分一部分运过去,再组装起来。而TCP确保数据能到达目的地。运输货物我们打个就可以通知是否送到了,TCP要用什么方式呢?看图说话
3.DNS
我们要访问一台服务器的东西,需要知道它的地址,IP地址可以作为一个标识,但是四个数字是很不好记的,因此诞生了域名这个东西,比如www.qq.com,我们可以访问到腾讯主页,但这个是怎么找到对应到腾讯的服务器呢?DNS服务就是干这个的,它处于应用层,当然它也可以通过IP来查找对应的域名。
4.URL和URI
URL: 统一资源定位符
URI: 统计资源标识符
URI用来标识某个互联网资源,而URL是资源的位置,所以URL是URI的子集。这里知道简单区别即可。
二、http报文
http报文分为请求报文和响应报文,HTTP请求报文:一个HTTP请求报文由请求行、请求头部、空行和请求数据4部分组成。HTTP响应报文:由三部分组成:状态行、消息报头、响应正文。综合两种报文,我们把报文分为一下结构
1.请求行
主要呈现请求的基本信息,包括请求的目标,协议版本,以及请求方法。目标就是一个url,比如我们要请求的网址或者跟后端协定好的接口地址。协议版本指http1.0、http1.1等。请求方法最常见的GET、POST,在http1.1总共有八种,这里不再一一阐述,最常见的GET、POST区别可以参考这篇文章
2.状态行
状态行就主要表示请求结果了,这里主要涉及状态码后面第三部分会说到
3.首部字段
这里首部字段就有通用首部字段、请求首部字段以及响应首部字段三种。
常用的首部字段比如Date(日期),Pragma、cache-control(缓存相关),Upgrade(协议升级,比如使用websocket)等。
请求首部字段比如Accept-*系列(表示优先级的,Charset字符集,Encoding编码,Language语言等),缓存类的(Etag和modified相关),referer(请求方)等。
相应首部字段比如缓存相关(Etag和modified相关),服务器信息(Server),重定向(Location)等。
4.其他
http中未定义的一些字段,比如cookie
5.报文主体
请求报文主要是请求信息,query、body参数等。响应报文主要是服务器返回的信息。
三、状态码
##### 1xx:
信息类型,表示在处理了。
2xx:
成功类型。比如常见的200,服务器处理成功但是不返回实体信息的204等。
3xx:
需要附加操作的,比如重定向(301永久重定向,302临时重定向)和使用缓存(304,这里结合几个首部字段使用,具体可以参考http缓存)
4xx:
客户端错误,比如参数错误(400),认证失败(401),没有访问权限(403),资源不存在(404)等
5xx:
服务器错误,比如服务端执行错误或者故障(500),服务器暂时无法处理(503),超时(504),协议有问题(505)等
三、身份认证
身份认证主要有以下五种方式
1.承载用户身份信息的HTTP首部(比如referer)
2.客户端IP地址跟踪,通过用户的IP地址对其进行识别
3.用户登录,用认证方式来识别用户(这里需要了解token机制)
4.胖URL,一种在URL中嵌入识别信息的技术
5.cookie,一种功能强大且高效的持久身份识别技术
四、安全
1.请求头中的安全机制
CSP策略
可以采用请求头设置方式
Content-Security-Policy: policy
Content-Security-Policy: default-src 'self'(自定义)
当然也可以在meta标签中设置,比如(来自mdn)。
X-Frame-Options
防止点击劫持
X-XSS-Protection
控制浏览器XSS防止的开关
2.cookie安全
比如cookie加密,设置HttpOnly和secure
五、其他
https:四次握手,ssl/tls协议,加密等。
http2:优势,多路复用、头部压缩、流的优先级等。
六、总结
这里只针对http我们需要掌握的基本信息做一个大概的总结,具体的某方面知识建议查看数据去了解,虽然我们在编写代码(写bug中)过程中几乎不会用到http,但是我们的项目运行却是离不开它,因此掌握基本的http对性能优化,安全等都是很有帮助的。有书写错误或者解释错误的欢迎指出!
你需要掌握的http知识的更多相关文章
- 你必须知道的EF知识和经验
注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式. 推荐MiniProfiler插件 工欲善其事,必先利其器. 我们使用EF和在很大程度提高了开发速度,不过随之带来的 ...
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- 学点HTTP知识
不学无术 又一次感觉到不学无术,被人一问Http知识尽然一点也没答上来,丢人丢到家了啊.平时也看许多的技术文章,为什么到了关键时刻就答不上来呢? 确实发现一个问题,光看是没有用的,需要实践.看别人说的 ...
- java中的字符串相关知识整理
字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...
- [C#] C# 知识回顾 - 你真的懂异常(Exception)吗?
你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ...
- [C#] C# 知识回顾 - 学会处理异常
学会处理异常 你可以使用 try 块来对你觉得可能会出现异常的代码进行分区. 其中,与之关联的 catch 块可用于处理任何异常情况. 一个包含代码的 finally 块,无论 try 块中是否在运行 ...
- [C#] C# 知识回顾 - 学会使用异常
学会使用异常 在 C# 中,程序中在运行时出现的错误,会不断在程序中进行传播,这种机制称为“异常”. 异常通常由错误的代码引发,并由能够更正错误的代码进行 catch. 异常可由 .NET 的 CLR ...
- [C#] C# 知识回顾 - 异常介绍
异常介绍 我们平时在写程序时,无意中(或技术不够),而导致程序运行时出现意外(或异常),对于这个问题, C# 有专门的异常处理程序. 异常处理所涉及到的关键字有 try.catch 和 finally ...
- [.NET] C# 知识回顾 - Event 事件
C# 知识回顾 - Event 事件 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6060297.html 序 昨天,通过<C# 知识回顾 - ...
- [.NET] C# 知识回顾 - 事件入门
C# 知识回顾 - 事件入门 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6057301.html 序 之前通过<C# 知识回顾 - 委托 de ...
随机推荐
- php 中输出字符串时怎么换行?
<?php //php 不同系统的换行 //不同系统之间换行的实现是不一样的 //linux 与unix中用 /n //MAC 用 /r //window 为了体现与linux不同 则是 /r/ ...
- Linux学习总结(十四) 文件的打包和压缩
文件的压缩和打包,在windos下我们很熟悉.rar和.zip文件,这是两种压缩文件,他们支持单个文件和多个文件的压缩.windos下我们不提及打包的概念,虽然多个文件的压缩肯定存在打包过程.打包和压 ...
- Stack栈 Heap堆
Stack(栈) 栈(stack) 又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈 ...
- 如何在.Net Core 2.0 App中读取appsettings.json
This is something that strangely doesn’t seem to be that well documented and took me a while to figu ...
- js 中 函数的返回值问题
var result=''; function searchByStationName( address ) { // map.clearOverlays();//清空原来的标注 var keywor ...
- iOS:绘图(18-01-25更)
目录 1.UIBezierPath(贝塞尔曲线) 1).在重写 drawRect: 方法里使用 2).在普通方法里使用,需要画布. 3). 切圆角.指定位置圆角.任意形状. 4).彩色的动画加载圆圈. ...
- 通过 openURL 方法跳转至设置 - iOS
iOS 10 以下系统版本可以通过 openURL 的方式跳转至指定的设置界面,code 如下: NSURL *url = [NSURL URLWithString:@"prefs:root ...
- UIPanGestureRecognizer 拖动TableView改变其高度
需求:项目中要求tableView的高度随着手拖动的位置而改变如下图: 关键代码如下: - (void)viewDidLoad{ panGestureRecognizer = [[UIPanGestu ...
- 学习笔记(2)centos7 下安装mysql
centos7安装mysql 本文通过yum方式安装mysql 1.添加mysql yum 仓库 去mysql开发者中心(http://dev.mysql.com/downloads/repo/yum ...
- SpringBoot整合Swagger2以及生产环境的安全问题处理
1.创建springboot项目 https://www.cnblogs.com/i-tao/p/8878562.html 这里我们使用多环境配置: application-dev.yml(开发环境) ...