作为一名前端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知识的更多相关文章

  1. 你必须知道的EF知识和经验

    注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式. 推荐MiniProfiler插件 工欲善其事,必先利其器. 我们使用EF和在很大程度提高了开发速度,不过随之带来的 ...

  2. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  3. 学点HTTP知识

    不学无术 又一次感觉到不学无术,被人一问Http知识尽然一点也没答上来,丢人丢到家了啊.平时也看许多的技术文章,为什么到了关键时刻就答不上来呢? 确实发现一个问题,光看是没有用的,需要实践.看别人说的 ...

  4. java中的字符串相关知识整理

    字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...

  5. [C#] C# 知识回顾 - 你真的懂异常(Exception)吗?

    你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ...

  6. [C#] C# 知识回顾 - 学会处理异常

    学会处理异常 你可以使用 try 块来对你觉得可能会出现异常的代码进行分区. 其中,与之关联的 catch 块可用于处理任何异常情况. 一个包含代码的 finally 块,无论 try 块中是否在运行 ...

  7. [C#] C# 知识回顾 - 学会使用异常

    学会使用异常 在 C# 中,程序中在运行时出现的错误,会不断在程序中进行传播,这种机制称为“异常”. 异常通常由错误的代码引发,并由能够更正错误的代码进行 catch. 异常可由 .NET 的 CLR ...

  8. [C#] C# 知识回顾 - 异常介绍

    异常介绍 我们平时在写程序时,无意中(或技术不够),而导致程序运行时出现意外(或异常),对于这个问题, C# 有专门的异常处理程序. 异常处理所涉及到的关键字有 try.catch 和 finally ...

  9. [.NET] C# 知识回顾 - Event 事件

    C# 知识回顾 - Event 事件 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6060297.html 序 昨天,通过<C# 知识回顾 - ...

  10. [.NET] C# 知识回顾 - 事件入门

    C# 知识回顾 - 事件入门 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6057301.html 序 之前通过<C# 知识回顾 - 委托 de ...

随机推荐

  1. BZOJ2431:[HAOI2009]逆序对数列(DP,差分)

    Description 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的 数列,可以很容易求出有多少个逆序对数.那么逆 ...

  2. 3springboot:springboot配置文件(配置文件、YAML、属性文件值注入<@Value、@ConfigurationProperties、@PropertySource,@ImportResource、@Bean>)

    1.配置文件: springboot默认使用一个全局配置文件 配置文件名是固定的   配置文件有两种(开头均是application,主要是文件的后缀): ->application.prope ...

  3. 记录 iOS 各种跳转到系统应用

    MARK ----拨打电话 NSString* phoneVersion = [[UIDevice currentDevice] systemVersion]; if (phoneVersion.fl ...

  4. java中数据类型的范围

    前言:最近:本菜鸡在准备pat,可以每次遇到数据类型的时候都得去查找范围,因此本着学习的目的,来总结一下java中的数据类型. 因此我用mindManager做了一个思维图

  5. Grunt中批量无损压缩图片插件--Grunt-contrib-imagemin

    Photoshop 切出的图片,无论是 PNG 还是 JPEG/JPG 格式,都含有许多相关信息,又或多余的颜色值,这些信息和颜色值,对网页前端并没有用处,反而增加图片大小,所以 Google Pag ...

  6. 【题解】洛谷P2679 [NOIP2015TG] 子串(DP+滚动数组)

    次元传送门:洛谷P2679 思路 蒟蒻一开始并没有思路而去看了题解 我们发现对于两个字串的位置 我们只需要管他们匹配成功或者匹配失败即可 f[i][j][k] 记录当前 a[i]不论等不等于b[j] ...

  7. 【题解】洛谷P3952 [NOIP2017TG] 时间复杂度(模拟)

    题目来源:洛谷P3952 思路 纯模拟没啥可说的了 果然好复杂 参考了你谷一个40行代码 代码 #include<iostream> #include<cstdio> #inc ...

  8. jFinal 2.2入门学习之二:使用sqlserver数据库学习搭建jfinal-demo框架(MySQL的话就不需要看这个了)

    1.去官网下载最新的jfinal_Demo(我这是JFinal-2.2) 2.解压demo源码,eclipse导入项目 3.本地创建数据库,修改信息,(注意:如果sqlserver端口号冲突,需要配置 ...

  9. ES6中常用新特性讲解

    1.不一样的变量声明:const和let ES6推荐使用let声明局部变量,相比之前的var(无论声明在何处,都会被视为声明在函数的最顶部) let和var声明的区别: var x = '全局变量'; ...

  10. 使用py2exe将python程序打包成exe程序

    近日帮朋友写了个python小程序,从互联网上抓取一些需要的文章到本地.为了运行方便,希望能转换成exe程序在windows下定期执行.从百度上找了些文章,发现py2exe的应用比较多,遂使用之. 1 ...