作为一名前端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. PHP使用in_array函数检查数组中是否存在某个值

    PHP使用 in_array() 函数检查数组中是否存在某个值,如果存在则返回 TRUE ,否则返回 FALSE. bool in_array( mixed needle, array array [ ...

  2. scp出现ssh port 22: Connection refused 问题解决具体步骤

    [root(0)@sys11 09:20:29 /home/work/Code_release/bj]# scp ./release.sh  root@192.168.161.151:/Users/a ...

  3. PAT——1064. 朋友数(set用法)

    如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”.例如123和51就是朋友数,因为1+2+3 = 5+1 = 6,而6就是它们的朋友证号.给定一些整数,要求 ...

  4. CToolBarCtrl工具栏设置总结(转)

    (一)工具条控制的主要功能 所谓工具条就是具有位图和分隔符组成的一组命令按钮,位图按钮部分可以是下推按钮.检查盒按钮.无线按 钮等.工具条对象类派生于主窗口架框类CframeWnd或CMDIFrame ...

  5. HDU 1045 Fire Net(DFS 与8皇后问题类似)

    Fire Net Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  6. 修改office文档修改日期

    修改“创建日期”可采用如下方法: 首先把系统日期调整到您所希望的时间,然后到MS-DOS方式下,对该文件输入如下命令:COPY /B filename +,, (一个加号.两个逗号),当询问您是否确认 ...

  7. 关于session序列化和session钝化和活化

    在第一次启动服务器后,在session中放入一个对象.在页面可以获得,当重启服务器,但是没有关闭浏览器的情况下刷新页面仍然能够获得这个对象,前提是这个对象必须实现了java.io.Serializab ...

  8. 轻量ORM-SqlRepoEx (九)与Dapper共舞

    Dapper就另一个轻量ORM,Dapper及其扩展解决了数据访问端的大部门问题,提供了如数据事务管理.缓存等支持.SqlRepoEx的重点解决了Lambda转换成SQL语句,使SQL使用强类型编写, ...

  9. string::size_type类型

    string::size_type类型 对于string中的size函数,size函数返回的是string对象的字符个数(长度),我们知道,对size()来说,返回一个int或者是一个unsigned ...

  10. 谷歌浏览器添加flash白名单

    69以前的版本: 打开 chrome://settings/content/flash 上图中应该有一个"添加"选项 , 依次输入: *.]com [*.]net [*.]org ...