大话http_
1.了解http协议:
http:超文本传输协议,允许将超文本标记语言从web服务器传送到客户端浏览器,是属于应用层的面向对象协议。
TCP3次握手:
DNS域名解析:
当我们在浏览器键入一个网址的时候,浏览器会在本地hosts文件找有没有,该域名和网址的映射,没有就在DNS服务器寻找,也没有就在上级的DNS服务器,直达根服务器
hosts文件:host查询到的ip和域名的映射关系高于dns;
http协议结构和通信原理:
http协议特点:深入理解HTTP协议
1.简单快速:
客户向服务器发送请求时,只需要传输路径和方法;请求方法有get,head,post,每种方法规定了客户与服务器联系的类型不同;http协议简单,服务器程序规模小,通信速度快。
2.灵活:http允许传递任意类型的数据对象,正在传输的类型用,Content-Type标志
3.无连接:无连接的含义是限制每次连接只处理一个请求,服务器处理完客户的请求并收到应答后就断开连接,节省传输时间
4.无状态:是指对于事务的处理能力没有记忆能力,如果后面的内容需要前面的内容,则必须重新传送
http报文结构:HTTP报文(面试会问开发时常用的报文头格式) - 每天都要学进去一些 - 博客园
http报文头:HTTP报文头部字段大全 | Go 技术论坛
可分为4类,通用(请求响应报文都适用),请求,响应,实体。
accept:浏览器可以接收的媒体类型;Accept - HTTP | MDN
Accept:text/html 代表浏览器可以接收服务器回发的html文档,如果服务器无法返回html文档就返回一个406错误。
Accept:*/*代表浏览器可以处理任意数据的媒体类型;
如果想要给显示的媒体类型增加优先级,则使用q,q的范围是0~1,1最大,没有默认为1.0,当服务器提供多种内容的时候,返回最高的媒体类型最高的媒体类型。
Accept-Language:浏览器声明自己接收的语言。
Accept-Language:zh-cn,zh;q=0.7,en-us,en;q=0.3 客户端在服务器有中文版的资源下,会优先返回中文版的响应,没有就返回英文版的。
Connection:keep-alive 当一个网页打开完全后,客户端和服务端之间用于传输HTTP数据的TCP连接不会断开,如果客户端再次访问这个服务器的网页,就会继续使用一条已经建立的连接。
Connection:close 一个Request完成后,客户端和服务端之间用于传输HTTP数据的TCP连接会关闭,当客户端再次发送Request,需要重新建立TCP连接
Host: Referer:
User-Agent:
Content-Type:
http响应报文:Http请求报文格式和响应报文格式 - 腾讯云开发者社区-腾讯云
http请求方法:
HTTP request methods - HTTP | MDN
get提交的请求作为url的一部分,这就表示它提交的请求不能过大(浏览器的url有长度限制)
上面链接后面的?是参数,用来给web服务器进行某些处理的
What is a URL? - Learn web development | MDN
url区分大小写吗?
根据网络搜索结果,URL的大小写敏感性取决于URL的不同部分和服务器的操作系统。一般来说,域名和协议(如https://)是不区分大小写的,但路径(如/en-US/docs/Learn)和参数(如?key1=value1)可能是区分大小写的123。如果您使用Linux或Unix系统的服务器,那么您的URL路径可能是区分大小写的2。如果您使用Windows系统的服务器,那么您的URL路径可能是不区分大小写的1。
为了避免重复内容或链接错误的问题,建议您在创建和分享URL时使用统一的大小写规则,并且尽量避免使用大写字母34。如果您想让您的网站自动将不同大小写的URL重定向到一个标准版本,您可以使用.htaccess文件或其他方法来实现5。
希望这些信息对您有所帮助。
post:
get请求数据放在url里面(没安全性),大小有限制,post请求数据放在 请求头里面,大小无限制。
put:
从客户端向服务器传送的数据指定文档的内容,和post最大的区别是:put是幂等(一个HTTP方法是幂等的,指的是同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的123。换句话说就是,幂等方法不应该具有副作用(统计用途除外)3。在正确实现的条件下,GET,HEAD,PUT和DELETE等方法都是幂等的,而POST方法不是3)的,而post是不幂等的,我们更多时候用put传送资源
head/delete:
HTTP HEAD方法请求资源的头部信息,并且这些头部与HTTP GET方法请求时返回的一致12。HEAD方法不会返回实体主体,只用于获取资源的元信息,比如修改日期,内容类型等23。HEAD方法是幂等的,也就是说多次请求同一个资源不会改变服务器的状态3。
delete:请求服务器删除指定的资源
options:用来查询针对请求url指定资源支持的方法
状态码:
是用来表示网页服务器超文本传输协议响应状态的3为数字代码,
HTTP状态码206表示该服务器已经成功处理了部分GET请求123。这种响应通常用于实现断点续传或者将一个大文档分解为多个下载段同时下载12。响应中会包含一个Content-Range头部,指明返回的数据范围和资源的总大小
HTTP状态码301表示永久重定向,即请求的资源已经被永久地移动到了另一个URL,客户端应该使用新的URL来访问资源123。这种响应通常用于网站域名变更或者页面合并等情况13。使用301重定向可以使得搜索引擎在抓取新内容的同时将旧的网址替换为重定向后的网址23。
HTTP状态码302表示临时重定向,即请求的资源暂时地移动到了另一个URL,客户端应该继续使用原有的URL来访问资源123。这种响应通常用于临时性的跳转或者负载均衡等情况14。使用302重定向可以使得搜索引擎会抓取新的内容却保留旧的网址23。http状态码301和302详解及区别_302状态码_幽雨雨幽的博客-CSDN博客
Cookie和Session:
查看cookie的方法:f12打开开发者模式,在Console 输入javascript:alert(document.cookie)然后回车。
HTTP协议结构和通讯原理:
字符集和编码:
字符表,字符集,编码方式:
- 字符集是一些自然语言中的字符组成的集合,例如ASCII字符集包括了英文字母、数字、标点符号等。
- 字符表是字符集中的每个字符对应的一个唯一编号,例如ASCII字符表中A对应65,B对应66等。
- 编码方式是将字符表中的编号转换为二进制或其他形式的数据,以便在计算机中存储和传输。例如ASCII编码方式是将每个编号用一个字节(8位)来表示,UTF-8编码方式是将每个编号用不同长度的字节序列来表示。
简单地说,字符集是定义了哪些字符存在,字符表是给每个字符分配了一个编号,编码方式是给每个编号分配了一个数据表示。
编码方式:
编码方式的编码规范是指在使用某种字符集时,如何将字符转换为二进制数据的规则。不同的编码方式可能对应不同的字符集,也可能对应同一种字符集。例如,ASCII、ISO-8859-1、GB2312、GBK等都是既表示了字符集又表示了对应的编码方式,但Unicode字符集是特例,它对应的编码方式有UTF-8、UTF-16、UTF-32等12。
遵循编码方式的编码规范可以帮助程序员保证数据的正确传输和存储,避免出现乱码或数据丢失的问题。
ISO-8859-1是一种字符编码方式,它对应的字符集是ISO/IEC 8859的第一部,也称为“拉丁字母第1部”。它包含了191个拉丁字母,可以用于表示美洲、西欧、大洋洲和非洲的多种语言。它也是一些流行的8位字符集和Unicode字符集的前两个区块的基础12。
ISO-8859-1在1999年被更新为ISO-8859-15,它增加了一些法语和芬兰语所需的字符和欧元符号€,这些在ISO-8859-1中缺失。为了腾出空间,它删除了一些不常用的字符,如¤、¦、¨、´、¸、¼、½和¾等2
URL的编码和解码:
编码:
URL编码是一种将URL中的字符转换为可通过因特网传输的格式的方法。URL只能使用ASCII字符集通过因特网进行发送,但URL通常包含ASCII集之外的字符,例如中文、空格、符号等。因此,必须将这些字符替换为以%开头后跟十六进制数字的编码12。
例如,URL https://www.bing.com/search?q=编码方式 的编码方式是 https%3A%2F%2Fwww.bing.com%2Fsearch%3Fq%3D%E7%BC%96%E7%A0%81%E6%96%B9%E5%BC%8F 。可以看到,冒号、斜杠、等号和中文都被转换为了编码3
%编码规范:
%编码规范是一种将URL中的特殊字符转换为以%开头后跟十六进制数字的编码的方法。这样可以避免URL中的字符被误解或损坏,同时也可以支持多种语言和字符集1。
%编码规范遵循以下原则:
- 保留字符:有些字符在URL中有特殊含义,例如冒号、斜杠、问号等。这些字符不应该被编码,除非它们作为数据出现在URL中。保留字符的编码方式是将它们的ASCII值转换为十六进制,并在前面加上%。
- 非保留字符:有些字符在URL中没有特殊含义,例如字母、数字、下划线等。这些字符不需要被编码,但如果要编码,也可以使用和保留字符相同的方法。
- 不安全字符:有些字符在URL中可能会引起歧义或错误,例如空格、引号、加号等。这些字符必须被编码,使用和保留字符相同的方法。
- 国际化字符:有些语言使用非ASCII的字符集,例如中文、日文等。这些字符不能直接出现在URL中,必须先转换为UTF-8格式,并按照每个字节进行%编码2
http身份认证:
HTTP身份认证是一种HTTP协议提供的身份验证机制,用于保护服务器上的资源,只允许合法的客户端访问。HTTP身份认证有四种类型:
- 基本认证(Basic Authentication):客户端向服务器发送用户名和密码,经过Base64编码后放在Authorization头中。这种方式简单易用,但不安全,因为用户名和密码容易被截获或破解。
- 摘要认证(Digest Authentication):客户端向服务器发送用户名和一个加密后的摘要(digest),包含了请求方法、URL、随机数等信息。这种方式比基本认证更安全,因为不需要传输明文密码,但仍然存在一些缺陷,如重放攻击等。
- NTLM认证(NT LAN Manager Authentication):客户端和服务器之间进行三次握手,交换随机数、散列值等信息,以验证彼此的身份。这种方式是微软开发的一种专有协议,主要用于Windows系统中,具有较高的安全性和效率。
- OAuth认证(Open Authorization):客户端通过第三方授权服务(如Google、Facebook等)获取一个令牌(token),然后将令牌发送给服务器,以表明自己拥有访问资源的权限。这种方式是目前最流行的一种认证方式,可以实现跨平台、跨域的授权访问1234。
Basic认证:
Basic认证是一种较为简单的HTTP认证方式,客户端通过明文(Base64编码格式)传输用户名和密码到服务端进行认证,通常需要配合HTTPS来保证信息传输的安全123。Basic认证的过程如下:
- 客户端发送HTTP请求给服务器,请求受保护的资源。
- 服务器返回401状态码,要求客户端提供用户名和密码进行认证,并在WWW-Authenticate头中指定认证类型为Basic。
- 客户端将用户名和密码用冒号连接,然后用Base64编码,放在Authorization头中,再次发送请求给服务器。
- 服务器验证Authorization头中的用户名和密码是否正确,如果正确则返回200状态码和请求的资源,否则返回401状态码并拒绝访问245。
DIGEST认证:
http digest认证是一种HTTP协议的认证方式,它是为了修复基本认证的缺陷而设计的,不会通过明文发送密码,而是通过密码摘要进行认证123。它的认证过程大致如下124:
- 客户端发送请求到服务器
- 服务器返回401状态码,并在WWW-Authenticate头中包含一个随机数nonce,一个域realm和一个算法列表
- 客户端根据算法列表和nonce计算出密码摘要,并在Authorization头中发送给服务器
- 服务器根据相同的算法和nonce验证密码摘要是否正确,如果正确则返回200状态码和请求的资源
httpdigest认证相比基本认证更安全,但仍然有一些局限性,例如不能保护其他内容,容易受到重放攻击等。
SSL客户端认证:
SSL客户端认证是一种SSL协议的认证方式,它是在服务器认证的基础上,增加了客户端的身份验证,实现了双向认证123。它的认证过程大致如下12:
- 客户端发送请求到服务器
- 服务器返回自己的服务器证书给客户端,并要求客户端提供客户端证书
- 客户端验证服务器证书是否有效,如果有效则选择一个密码算法和随机数,并用服务器公钥加密发送给服务器
- 客户端从本地或浏览器中选择一个合适的客户端证书,并用私钥签名发送给服务器
- 服务器验证客户端证书是否有效,如果有效则用私钥解密得到密码算法和随机数,并用这些信息生成对称密钥
- 服务器和客户端使用对称密钥进行加密通信
SSL客户端认证相比单向认证更安全,但也更复杂,需要为每个客户端颁发和管理数字证书
基于表单的验证方法:
基于表单的验证方法是一种常见的Web应用程序的身份验证方式,它是通过用户在表单中输入用户名和密码等信息,然后提交给服务器进行验证,如果验证通过则允许用户访问受保护的资源123。它的验证过程大致如下1:
- 用户访问需要身份验证的页面
- 服务器返回一个包含表单的页面,要求用户输入用户名和密码等信息
- 用户在表单中填写信息,并点击提交按钮
- 服务器接收到表单数据,并与数据库或其他存储方式进行比对,如果匹配则返回成功页面,否则返回失败页面
基于表单的验证方法相比其他方法更灵活和易用,但也需要注意一些安全问题,例如防止跨站脚本攻击、跨站请求伪造攻击、暴力破解攻击等。
长连接和短链接:
长连接:
HTTP长连接是一种HTTP协议的连接方式,它是指在一次TCP连接中可以完成多个HTTP请求和响应,而不需要每次都重新建立和断开连接123。它的优点是可以减少网络延迟和资源消耗,提高效率和性能123。它的缺点是可能会占用过多的服务器资源,导致其他客户端无法访问3。
在HTTP/1.1版本中,默认的连接都是长连接,我们可以通过Connection: keep-alive字段进行指定425。如果要关闭长连接,可以通过Connection: close字段进行指定2。长连接不会永久保持,它有一个保持时间,可以在不同的服务器软件中设定这个时间2.
HTTP中介代理:
代理是什么:
HTTP中介代理是一种在客户端和服务器之间传递HTTP请求和响应的中间人123。HTTP代理可以用于实现缓存、过滤、负载均衡等功能3。
代理的作用:抓包,FQ,匿名访问,过滤器:
- 突破自身IP访问限制,访问一些平时无法访问的网站或资源。
- 缓存常用的网页,提高访问速度和效率。
- 过滤不安全或不合适的网页内容,保护用户隐私和安全。
- 负载均衡,分担服务器压力,提高响应能力。
- 隐藏用户真实IP地址,保护用户身份和信息。
HTTP网关:
网关连接的是使用多个不同协议。
HTTP网关是一种HTTP中介,它可以将HTTP请求转换为其他协议,并将响应转换回HTTP1。HTTP网关可以用于连接不同的网络或系统,例如Web服务器和数据库服务器2。
常见的网关:
HTTP缓存:
HTTP缓存是一种保存资源副本并在下次请求时直接使用该副本的技术。当Web缓存发现请求的资源已经被存储,它会拦截请求,返回该资源的拷贝,而不会去源服务器重新下载。这样做可以优化浏览器性能,避免重复请求12。
HTTP缓存主要是通过请求和响应报文头中的对应Header信息来控制缓存策略1
缓存头部字段:
Cache-Control:
Expires:
Expires是一个HTTP响应头,它包含日期/时间,即在此时候之后,响应过期。无效的日期,比如0,代表着过去的日期,即该资源已经过期。如果在Cache-Control响应头设置了max-age或者s-max-age指令,那么Expires头会被忽略
Last-Modified:
ETag(或称为实体标签)是HTTP响应头中的一个字段,它是资源特定版本的标识符。当内容未更改时,Web服务器不需要重新发送整个响应,因此缓存更加高效,可以节省通信带宽1。
缓存工作方式:
HTTP缓存根据工作方式分为强缓存和协商缓存。浏览器首先会判断强缓存是否命中,命中失败才会尝试进行协商缓存1
缓存改进:
浏览器操作对缓存的影响:
内容协商机制:
HTTP内容协商机制是指通过为相同URI指向的资源提供不同的展现形式,可以使用户代理选择与用户需求相适应的最佳匹配(例如:文档使用的自然语言、图片的格式或者内容编码形式)1。这种机制用于为同一URI提供资源不同的表示形式,以帮助用户代理指定最适合用户的表示形式2
HTTP断点续传和多线程下载:
多线程下载:
HTTP多线程下载是一种使用多个线程同时从服务器下载文件的技术。这种方法可以提高下载速度,因为它允许客户端同时从服务器请求多个数据块。
有几种方法可以实现HTTP多线程下载。一种方法是使用支持多线程下载的浏览器扩展程序,如Chrome的Download Tools1或Firefox的Multithreaded Download Manager2。另一种方法是使用支持多线程下载的命令行工具,如aria21