文章目录
互联网协议
协议:指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规则
HTTP协议
-
是互联网协议中的一种
-
HTTP协议:又称超文本传输协议,是一种通讯协议
-
作用:将 HTML 文档从 web 服务器传送到客户端的浏览器
web服务器、浏览器、代理服务器之间的关系
网站运行的原理
- 无代理服务器
- 在地址栏输入 URL 后浏览器会给 web 服务器发送一个 request 请求
- web 服务器接收到 request 请求后,进行处理,生成相应的 response 返回发送给浏览器
- 浏览器解析 response 中的 HTML 就看到了相应的网页
- 有代理服务器
- 在地址栏输入 URL 后浏览器会给代理服务器发送一个 request 请求
- 代理服务器再将 request 请求发送个 web 服务器
- web 服务器接收到后进行处理,生成相应的 response 放回给代理服务器
- 代理服务器再将 response 给浏览器
打开一个网页需要浏览器发送很多次Request
-
当你在浏览器输入 URL 的时候,浏览器发送一个Request去获取 URL 的html. 服务器把Response发送回给浏览器.
-
浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如图片,CSS文件,JS文件。
-
浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。
-
等所有的文件都下载成功后。 网页就被显示出来了。
代理服务器的作用
-
提高访问速度
-
隐藏身份
-
有时可以从代理服务器入手,修改数据包,达到绕过的效果(代理服务器如 burp suit接收数据包,修改数据包)
URL
URL定义:互联网上的一个网页的唯一的名称标识符
通俗:URL 就是web地址(网址)
作用
- 给出互联网上资源的位置
- 给出互联网上资源的访问方法
基本格式:
schema://hostname:port/path/...?query-string#anchor
协议://域名:端口/路径/子路径1/子路径2/......?查询参数1&查询参数2...#锚点 // 注意位置,位置不变
https://www.example.com:8080/sj/test/test.aspx?name=sviergn&x=true#stuff
- scheme:指定使用的传输协议(例如:http, https, ftp)
协议://:如 https://
- hostname:指存放资源的服务器的域名系统(DNS) 的主机名或 IP 地址
如:www.example.com 或者 192.168.2.15
- port:HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明
例如:http://www.cnblogs.com:8080/
- path:路径是资源在网站的位置,由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址
如:/path/dex.html这个路径,指向网站的/path子目录下面的网页文件dex.html
- query-string:
- 查询参数(parameter)是提供给服务器的额外信息
- 查询参数的位置是在路径后面,两者之间使用 ? 分隔
- 查询参数可以有一组或多组。每组参数都是键值对的形式,同时具有键名(key)和键值(value),它们之间使用 = 连接。比如,key1=value就是一个键值对,key1是键名,value1是键值。即值和名之间用 = 连接
- 多组参数之间使用 & 连接,比如key1=value1&key2=value2。
如:/path/dex.html?key1=value1&key2=value2
- anchor:锚点是网页内部的定位点,使用#加上锚点名称,放在网址的最后,比如#anchor。浏览器加载页面以后,会自动滚动到锚点所在的位置
如:key1=value1&key2=value2#anchor
Request 请求数据包格式 (一般形式)
格式(四种结构)
- 请求行: 请求类型 请求资源路径 协议的版本和类型
- 请求头
- 空行: 请求头与请求体之间用一个空行隔开
- 请求体: 要发送的数据
请求行
-
请求行由三个标记组成:请求方法、请求 URL 和 HTTP 版本,三者用空格分隔
-
例如: GET ww.index.html HTTP/1.1
-
请求方法总结(八种请求方法)
- GET:申请获得资源,而不对服务器产生任何其他影响
- HEAD:申请获得资源,不过仅要求服务器返回状态行和头标,而不需要传输任何实际内容, 而不对对服务器产生任何其他影响
- POST:客户端向服务器提交数据,这种方法会影响到服务器:服务器可能根据收到的数据创建新的 资源,也可能更新现有的资源
- PUT:上传某个资源
- DELETE:删除某个资源
- OPTIONS:查看服务器对某个特定 URL 支持哪些请求方法
- TRACE:要求目标服务器返回原始 HTTP 请求的内容,它可以用来查看中间服务器(如代理服务 器)对和 HTTP 请求的影响
- CONNECT :用于某些代理服务器,它能把请求的连接转为一个安全隧道
请求头
-
组成: 由关键字/值组成,每行一对,关键字和值用冒号分隔
-
If-Modified-Since:表示浏览器缓存记录中该文件最后在服务器修改的时间,有这个就说明有缓存在客户端里 一般与返回中的 Last-Modified 连用,前者与后者对比,如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中.
If-Modified-Since: Thu, 09 Feb 2012 09:07:57 GMT //GMT:格林威治标准时间。HTTP 日期总 是以GMT 表示,从不以本地时间表示
-
If-None-Match
-
Pragma:Pargma只有一个用法
Pragma: no-cache //与Cache-Control:no-cache作用一模一样
-
Cache-Control:用来指定Response-Request遵循的缓存机制
-
Cache-Control:Public //可以被任何缓存所缓存
-
Cache-Control:Private //内容只缓存到私有缓存中
-
Cache-Control:no-cache //所有内容都不会被缓存
-
-
-
Accept:指定浏览器端可以接受的媒体类型
- Accept: text/html //代表浏览器可以接受服务器回发的文件类型为 text/html
- Accept: * / * //通配符 * 代表任意类型,代表浏览器可以处理服务器回发的文件类型为任意
-
Accept-Encoding:指定浏览器传输时的压缩方式
-
Accept-Encoding: gzip //gzip:使用 Lempel-Ziv 编码( LZ77 )的压缩格式,带有32 位 CRC
-
Accept-Encoding: compress //compress:使用 Lempel-Ziv-Welch( LZW )算法的压缩格式
-
Accept-Encoding: deflate //deflate:使用 zlib结构的压缩格式,以及 deflate压缩算法
-
Accept-Encoding: br //br:使用 Brotli算法的压缩格式
-
Accept-Encoding: identity //identity:指示身份功能(即不压缩,也不修改)。即使不存在, 该值始终被认为是可以接受的
-
Accept-Encoding:* //*:未列出的任何内容编码。这并不意味着支持任何算法; 只是表示 没有偏好,或者默认值,是什么就不好说了
-
Accept-Encoding: gzip, compress //可以多个在一起
-
-
Accept-Langeuage:指出浏览器可以接受的语言种类,如 en 或 en-us,指英语
Accept-Language: en-us
- User-Agent:告诉HTTP服务器,客户端使用的操作系统和浏览器的名称、版本号、CPU类型、浏览器插件等等
- User-Agent:Mozilla/版本 (操作系统) 浏览器内核/版本 浏览器名/版本
- User-Agent:Mozilla/5.0(X11; Linux x86_64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
windows操作系统: Windows NT 5.0 // 如 Windows 2000 Windows NT 5.1 // 如 Windows XP Windows NT 6.0 // 如 Windows Vista Windows NT 6.1 // 如 Windows 7 Windows NT 6.2 // 如 Windows 8 Windows NT 6.3 // 如 Windows 8.1 Windows NT 10.0 // 如 Windows 10 Win64; x64 // Win64 on x64 WOW64 // Win32 on x64 Linux操作系统: X11; Linux i686; // Linux 桌面,i686 版本 X11; Linux x86_64; // Linux 桌面,x86_64 版本 X11; Linux i686 on x86_64 // Linux 桌面,运行在 x86_64 的 i686 版本 macOS操作系统: Macintosh; Intel Mac OS X 10_9_0 // Intel x86 或者 x86_64 Macintosh; PPC Mac OS X 10_9_0 // PowerPC Macintosh; Intel Mac OS X 10.12; // 不用下划线,用点 |
---|
-
Accept-Charset:指出浏览器可以接受的字符编码。即申明浏览器可以接收的字符集,假如这个字符集合没有某个字符,就会出现乱码
- Accept-charset:字符集的名字
- Accept-Charset: iso-8859-1 //用字符集iso-8859-1
-
Cookie
-
Content-Length:标明发送给服务器数据的长度
Content-Length:数字
-
Content-Type
-
Referer : 用来说明这个请求来自哪里,包括协议、域名、路径、参数等等
Referer:https://aiqicha.baidu.com/?from=allp
- Origin:用来说明请求从哪里发起的,包括,且仅仅包括协议和域名
Origin:https://www.baidu.com
-
HOST: 可以只是服务器域名,也可以是IP地址,或者Host字段域名/ip后可以跟端口号
-
Host: www.baidu.com
-
Host:196.2.3.4
-
Host:www.sina.com:8080
-
-
connection:用来标示 http 请求是长连接还是短连接
-
connection:keep-alive //长连接,当一个网页打开完成后,浏览器和服务器之间的连接就不会关闭,浏览器再次访问这
个服务器时,会继续用这条连接。但这条连接的存在是有一个时间的限制
-
connection:close //短连接,浏览器和服务器每进行一次请求,就建立一次连接,任务结束就中断连接,如有需
要多个资源,就需要多次建立连接
-
connection:Upgrade //建立 websocket 长连接
-
空行:用于分割请求头和请求体
请求体:网站设计的内容
Response返回数据包
格式(四种结构)
- 状态行:协议版本、数字形式的状态代码和状态描述,每个元素之间用空格分隔
- 响应头标
- 空行:响应头与响应体之间用空行隔开
- 响应数据:浏览器会将实体内容中的数据取出来,生成相应的页面
状态行中的状态码 (待解决)
- 组成:三个十进制数字
- 五类状态码
状态码 | 名称 | 作用 |
---|---|---|
1xx | 信息响应 | 表示请求已被成功接收,继续处理 |
2xx | 成功响应 | 表示请求已被成功接收,理解,接受 |
3xx | 重定向 | 要完成请求必须进行更进一步的处理 |
4xx | 客户端错误 | 由于客户端的错误,导致请求有语法错误或请求无法实现 |
5xx | 服务器错误 | 服务器在处理请求的过程中发生了错误 |
- 常用状态码
响应头标
- Date:生成消息的具体时间和日期
Date: Sat, 11 Feb 2012 11:35:14 GMT
- Expires:设置文档的过期时间
Expires: Tue, 08 Feb 2022 11:35:14 GMT
- ETag:和If-None-Match 配合使用
ETag: “03f2b33c0bfcc1:0”
- Last-Modified:用于指示资源的最后修改日期和时间
Last-Modified: Wed, 21 Dec 2011 09:09:10 GMT
- Content-Type:服务器告诉浏览器自己响应的对象的类型和字符集
Content-Type: text/html; charset=utf-8
- Content-Length:返回体的实际长度
Content-Length:18
- Content-Encoding:服务器表明自己使用了什么压缩方法
Content-Encoding:gzip
- Content-Language:服务器告诉浏览器自己响应的对象的语言
Content-Language:en-us
- Server:服务器的信息
Server: Microsoft-IIS/7.5
- Location:表示客户应当到哪里去提取文档
Location:地址
空行
响应数据:存在服务器的相关网页设计
本地 Host 文件
-
定义:其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统再会将网址提交DNS域名解析服务器进行IP地址的解析。
-
作用:修改 host 文件,达到修改域名对应到自己想要的地址去
超级ping
-
超级ping:解析域名对应的ip地址
web的组成架构模型
- 网站源码
- 操作系统:window、linux
- 中间件(搭建平台):apache、iis、tomcat、nginx等
- 数据库:access、mysql、mssql、oracle、sybase、db2、postsql等