http请求模型;(客户端和服务端、请求和响应), 无状态的协议
client-serve.jpg
访问页面处理流程:

  1. 输入网址
  2. 解析域名(DNS服务器)
  3. 浏览器发送http请求 -> 透明设备(防火墙、代理、网关、路由器<路由表>)
  4. 服务器处理请求 -> 反向代理
  5. 服务器返回html响应
  6. 浏览器处理html页面

防火墙代主要是借助硬件和软件的作用于内部和外部网络的环境间产生一种保护的屏障,从而实现对计算机不安全网络因素的阻断。
网关(Gateway)又称网间连接器、协议转换器, 就是一个网络连接到另一个网络的“关口”。也就是网络关卡

什么是HTTP协议?

  • HTTP是超文本传输协议,从www浏览器传输到本地浏览器的一种传输协议,网站是基于HTTP协议的,例如网站的图片、CSS、JS等都是基于HTTP协议进行传输的。
  • HTTP协议是由从客户机到服务器的请求(Request)和从服务器到客户机的响应(response)进行约束和规范。

WX20200417-103024@2x.png

TCP/IP协议栈

应用层 应用层 为用户提供所需要的各种服务,例如:HTTP、FTP、DNS、SMTP等
表示层
会话层
传输层 传输层 为应用层实体提供端到端的通信功能,保证数据包的顺序传送及数
据的完整性。
该层定义了两个主要的协议:传输控制协议(TCP)和用户数据报协
议(UDP)
网络层 网络层 主要解决主机到主机的通信问题。IP协议是网际互联层最重要的协
议。
数据链路层 网络接口层 负责监视数据在主机和网络之间的交换
物理层

WX20200417-104020@2x.png

HTTP的工作过程

一次HTTP操作称为一个事务,其工作过程可分为四步:
1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了

请求和响应

HTTP协议(上) - 图4

请求

1461379-e27e2159621a6020.webp
请求行组成:以一个方法符号开头,后面跟着请求的URI和协议的版本。
①是请求方法,HTTP/1.1 定义的请求方法有8种:GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE
CONNECT。最常的两种GET和POST,如果是RESTful接口的话一般会用到GET、POST、DELETE、PUT。
②为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL
③是协议名称及版本号。
④是HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。
⑤是报文体,它将一个页面表单中的组件值通过param1=value1&param2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1&param2=value2”的方式传递请求参数。

对照上面的请求报文,我们把它进一步分解,你可以看到一幅更详细的结构图:
3985563-cd59a3899ef546e1 (1).webp
RFC,协议标准解释,http://www.rfc-editor.org/info/rfc2616
1、OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
2、HEAD
向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
3、GET
向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。Loadrunner中对应get请求函数:web_link和web_url
4、POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
5、PUT
向指定资源位置上传其最新内容
6、DELETE
请求服务器删除Request-URL所标识的资源
7、TRACE
回显服务器收到的请求,主要用于测试或诊断
8、CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
注意:
1)方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Mothod Not Allowed);当服务器不认识或者不支持对应的请求方法时,应返回状态码501(Not Implemented)。
2)HTTP服务器至少应该实现GET和HEAD/POST方法,其他方法都是可选的,此外除上述方法,特定的HTTP服务器支持扩展自定义的方法。

请求地址URL

URL:统一资源定位符,是一种自愿位置的抽象唯一识别方法。
组成:<协议>://<主机>:<端口>/<路径>
通常浏览器地址栏http的端口和路径有时可以省略(HTTP默认端口号是80), https则不会被省略。
HTTP协议(上) - 图7

响应

1461379-96c60fde2c3fc19c.webp

状态码(https://www.php.cn/web/web-http500.html)三位数字组成,第一位表示响应的类型别

  • 1xx: 指示信息, 请求已接受, 继续处理。用于上传大文件前的预请求。
  • 2xx:成功,表示请求已被成功接收、理解、接受
  • 3xx:重定向,( 1. 远程重定向 2. 本地重定向) (临时重定向、永久重定向, 主要用于搜索引擎)
  • 4xx: 客户端错误, 请求有语法错误或请求无法实现
  • 5xx: 服务器端错误, 服务器未能实现合法的请求

301, Permanently Moved 永久重定向
302, Temporarily Moved 临时重定向
305, Use Proxy 被请求的资源必须通过指定的代理才能被访问
306, Switch Proxy(废弃)
307, Temporary Redirect 临时重定向
400, Bad Request 错误请求
402, Payment Required 为了将来可能的需求而预留
403, Forbidden 服务器已经理解请求,但服务器拒绝
404,Not Found 请求失败,请求所希望得到的资源未被在服务器上发现
406, Not Acceptable 请求方法不能被用于请求相应的资源
408, Request Timeout 请求超时
409, Conflict 请求冲突
410, Gone 被请求的资源在服务器上已经不再可用,而且没有任何已知的转发地址
413,Request Entity Too Large 响应实体过大
417,Expectation Failed 被请求的资源在服务器上已经不再可用,而且没有任何已知的转发地址
418, ~~
420~~
422, Unprocessable Entity 请求格式正确
500,Internal Server Error 服务器内部错误。

请求报头

  1. Accept请求报头域用于指定客户端接受哪些类型的信息。

eg:Accept:/,Accept:image/gif,Accept:text/html 告诉服务器浏览可接受的数据类型。
Accept-Charset请求报头域用于指定客户端接受的字符集。
Accept-Encoding:gzip, deflate, br, 接受的数据报是否可压缩,
Accept-Language:zh-CN,zh;q=0.9,en;q=0.8, 接受的语言, Zh-cn

  1. Authorization请求报头域主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。
  2. Host:www.baidu.com 请求的主机名。请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的,发送请求时,该报头域是必需的。
  3. User-Agent:Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Mobile Safari/537.36, 标明浏览器身份, pc、移动端、微信/支付宝等平台。请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。
  4. Connection:keep-alive, 长链接、短链接。复用应用层的TCP链接,断开链接, 减少握手。http1.0之后出现长链接。
  5. Cache-Control: max-age=315360000/private
  6. Cookie:
  7. Referer: https://zhidao.baidu.com/question/384659218.html, 检查盗链
  8. server:Tengine/Aserver, 服务器相关信息

响应报头

Location响应报头域用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。
Server响应报头域包含了服务器用来处理请求的软件信息。与UserAgent请求报头域是相对应的。
WWW-Authenticate响应报头域必须被包含在401(未授权的)响应消息中,客户端收到401响应消息时候,并发送Authorization报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域
136000max-age=315360000max-age=315360000

  1. access-control-allow-credentials:true
  2. access-control-allow-headers:content-type,QTOKEN,QKEY_NAME,QKEY_VALUE
  3. access-control-allow-origin:https://www.aliyun.com
  4. date:Tue, 14 Apr 2020 14:25:18 GMT
  5. eagleeye-traceid:0b0b818015868743186374707e555f
  6. server:Tengine/Aserver
  7. status:200
  8. strict-transport-security:max-age=31536000
  9. strict-transport-security:max-age=0
  10. timing-allow-origin:*
  11. x-content-type-options:nosniff
  12. x-download-options:noopen
  13. x-readtime:41
  14. x-server-id:a316432eb8dfd267824daff47ab2131676cd6c1da6dee3ca7e117ba461
  15. x-xss-protection:1; mode=block

实体报头

请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文(eg:有无实体正文)和请求所标识的资源的元信息。

  1. Content-Encoding实体报头域被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。
  2. Content-Language实体报头域描述了资源所用的自然语言。
  3. Content-Length:3316 。实体报头域用于指明实体正文的长度,以字节方式存储的十进制数字来表示。
  4. Content-Type:text/plain;charset=UTF-8 实体报头域用语指明发送给接收者的实体正文的媒体类型。
  5. Last-Modified实体报头域用于指示资源的最后修改日期和时间。
  6. Expires实体报头域给出响应过期的日期和时间

cookie与session/token

Cookies是保存在客户端的小段文本,随客户端点每一个请求发送该url下的所有cookies到服务器端。
Session则保存在服务器端,通过唯一的值sessionID来区别每一个用户。SessionID随每个连接请求发送到服务器,服务器根据sessionID来识别客户端,再通过session 的key获取session值。

与Cookie相关的HTTP扩展头
1)Cookie:客户端将服务器设置的Cookie返回到服务器;
2)Set-Cookie:服务器向客户端设置Cookie;
服务器在响应消息中用Set-Cookie头将Cookie的内容回送给客户端,客户端在新的请求中将相同的内容携带在Cookie头中发送给服务器。从而实现会话的保持。

浏览器缓存机制

缓存会根据请求保存输出内容的副本,例如html页面,图片,文件,当下一个请求来到的时候:如果是相同的URL,缓存直接使用副本响应访问请求,而不是向源服务器再次发送请求。
缓存的优点:减少相应延迟 、减少网络带宽消耗(相比硬盘代价大)

1717c60dc551869a (1).png
缓存策略:

  • 强制缓存,服务器通知浏览器一个缓存时间,在缓存时间内,下次请求,直接用缓存,不在时间内,执行比较缓存策略。
  • 比较缓存,将缓存信息中的Etag和Last-Modified通过请求发送给服务器,由服务器校验,返回304状态码时,浏览器直接使用缓存。

Etag/If-None-Match策略
Last-Modified/If-Modified-Since策略

其他相关概念

(文本)编码

ASCII((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。
ASCII-1.jpg

二进制编码

UTF-8编码