ec5d27e825f7373c2bda30a7bf88b8bf

HTTP

诞生背景

  • 初衷是为知识共享,提供一种能让远隔两地的研究者们共享知识的途径。
  • 基本理念是借助多文档之间相互关联形成的超文本HyperText,连成可相互参阅的WWW(World Wide Web,万维网),WWW是Web浏览器当年用来浏览超文本的客户端应用程序的名称,现在用来表示这一系列的集合,简称为web,web应用层协议是超文本传输协议,是web的核心。
  • 构建技术:1.把SGML(标准通用标记语言)作为页面的文本标记语言的HTML(超文本标记语言) 2.作为文档传递协议的HTTP 3.指定文档所在地址的URL(Uniform Resource Locator 统一资源定位符)
  • HTTP/1.0
  • HTTP/1.1

dns服务

dns(Domain Name System)提供域名到IP地址之间的解析服务。用户通常使用主机名或域名来访问对方的计算机,而不是直接通过IP地址访问。

浏览器输入Url

175db0636bfbe2fcbf7980adab58508c a7bdf04d5e088603d1c9de25cf07efa5

URL和URI

  • URL统一资源定位符,使用浏览器等访问web服务器输入的地址,如http://qq.com/
  • URI(Uniform Resource Identifier)统一资源标识符。 URI格式: 83433a81568243c6b3752de05c7eb910

1.协议方案名。某个协议方案(http,ftp等)表示的资源定位标识符。协议方案包括ftp,telnet,file,http等。 URI举例: 5ca1dc86463e70fc1d134eddd0fd5bfe 2.登录信息。指定用户名和密码作为从服务器获取资源时必要的登录信息,此项是可选项。
3.服务器地址。可以是域名或是IP地址。
4.服务器端口号。可选项,默认是80. 5.文件路径。指定服务器上的文件路径来定位特指的资源。
6.查询字符串。可选项,可通过查询字符串传入任意参数。
7.片段标识符。可选项。

  • URI用字符串标识某一互联网资源,而URL标识资源的地点。

http格式

  • 请求报文由请求方法,请求URI,协议版本,可选的请求首部字段和内容实体构成。 dcc777e56f2cfe3621354aab5e2e73d3
  • 响应报文由协议版本,状态码,解释状态码的原因短语,可选的响应首部字段以及实体主体构成。 56dbc3367335d500a1e696d541c0a6da
请求方法
  • GET方法用来请求访问已被URI标识的资源,方法名区分大小写。
  • POST方法用来传输实体的主体。虽然用GET方法也可以传输实体的主题,但一般不用GET方法进行传输,而是用POST方法。

  • PUT方法用来传输文件。自身不带验证机制,任何人都可以上传文件,存在安全性问题,一般Web网站不适用该方法。

  • HEAD方法和GET方法一样,只是不返回报文主体部分。用于确认URI的有效性以及资源更新的日期时间等。

  • DELETE方法用来删除文件。

  • OPTIONS方法用来查询针对请求URI指定的资源支持的方法。

  • TRACE方法是让Web服务器端将之前的请求通信环回给客户端的方法。

  • CONNECT方法要求在于代理服务器通信时尽力隧道,实现用隧道协议进行TCP通信,主要使用SSL(Secure Sockets Layer安全套接层)和TLS(Transport Layer Security传输层安全)协议把通信内容加密后经网络隧道传输。 ebf1e904a1743ea1b41cb0d0a1ce4080 9593a0931f0eca73c2db941515ca15c5

    POST传输数据格式

    post提交数据必须放在主题中,但协议并未规定数据使用什么编码。接收端根据请求头中的content-type字段来获知请求中的消息主题是何种编码,再对主体进行解析。
    Content-Type格式: Content-Type:type/subtype;parameter
    type:主类型,如text,*代表所有.
    subtype:子类型,如html.
    parameter:可选参数,如charset,boundary等.
    Content-Type:application/json;charset:utf-8;
    常见举例:
    1.Content-Type=application/x-www-form-urlencoded 最常见的POST提交数据方式,一般用于表单提交。会将参数用key1=val1&key2=val2的格式放入请求实体,如果是中文或特殊字符需要进行URL转码。URL是用来打包表单输入的格式,将key/value参数编码(移除那些不能传送的字符)。 2dc7987ee7ed6b9ed79754e6643a0554

2.Content-Type=application/json;charset=utf-8; 需要参数本身就是json格式,直接放入请求实体里,接收端会按json格式解析数据。
3.Content-Type=text/xml;
4.Content-Type=application/octet-stream 二进制

url编码

http参数传输是以”key1=value1&key2=value2”键值对传输的,服务器收到字符串时会用&分隔每个参数,用=分隔参数值。如果参数值中包含=或者&特殊字符时就需要Url编码。
url编码只是在特殊字符的各个字节(16进制)前加%即可。如name1=va%26lu%3D,服务器会把%后的字节当成普通字节,不会当成分隔符。
url编码只允许包含英文,数字,4个特殊字符(-_.~)以及所有保留字符(/?#[]@),用于分隔协议,主机,路径等。其余的需要url编码。
url编码默认使用ASCII编码,对于unicode字符,使用utf-8编码得到相应的字节,再在每个字节前加%编码。如”中文”使用utf-8编码得到的字节为0xE4 0xB8 0xAD 0xE6 0x96 0x87,经过URL编码之后得到%E4%B8%AD%E6%96%87 部分字符转义: + 表示空格 %2B # 表示书签

持久连接

  • http协议的初始版本中,每进行一次http通信就要断开一次TCP连接。随着HTTP的普及,HTML页面中包含大量的图片,在发送访问HTML页面资源的同时,也会请求该HTML页面包含的其他资源,造成无畏的TCP连接建立和断开,增加通信量的开销。
  • HTTP/1.1和一部分HTTP/1.0实现了持久连接(HTTP keep-alive)的方法,只要任意一端没有明确提出断开连接,则保持TCP连接状态。建立1次连接后进行多次请求和响应操作。 9317f2a600b5ea0d7dd0827ab8d88cae
  • HTTP/1.0 1.报文首部添加Connection:Keep-Alive告知服务器保持连接 2.如果服务器愿意为下一条请求保持连接,在响应报文包含相同的首部 3.Keep-Alive选项,如: Connection: Keep-Alive Keep-Alive: max=5, timeout=120 max 服务器还处理5个事务,timeout 2分钟后服务器会关闭连接。

  • HTTP/1.1 默认就是持久连接,除非特别指明。 1.关闭条件需要在报文中显式添加Connection:close首部。客户端收到响应后,无法在那条连接上发送更多请求了。 2.如果客户端不想在连接上继续发送请求,也需要在报文中添加close首部 3.所有客户端,服务器都可以在任意时刻关闭一条tcp连接。 4.持久连接空闲一段时间后,服务器会关闭连接。

    cookie状态管理

  • http是无状态协议,不对之前发生过的请求和响应状态进行持久化管理。应用场景:要求登录认证的Web页面每次跳转新页面时要么再次登录,要么在请求报文中附加参数来管理登录状态。

  • Cookie技术通过在请求和响应报文中写入cookie信息来控制客户端的状态。服务端返回的响应报文内的set-cookie首部字段通知客户端保存cookie信息,当下次客户端再请求时,自动在请求报文中加入cookie值。服务端再通过cookie值去检查是哪一个客户端发来的连接请求,对比服务端上的记录,最后得到之前的状态信息。 35ffd50a8bdde0b7c634c1d341459550 d9cb26e7e5e7251f023cfde7f014c9af d7a0f7eccd071a7a3682022044cb1783

http请求报文及响应报文结构

用于http协议交互的信息称为http报文,由多行数据构成的字符串文本信息构成,分为报文首部和报文主体,由空行(CR+LF)划分。 ffce3425adb1b1fbfa82e9a02b5570ed cc790de927a8b89413a141cafa180392 e0164d041368078c3f9e7fbdc1502e19 0af581fbdaa059e1e5baafb67d7d3244

请求行

包含请求的方法,请求URI和HTTP版本

状态行

包含表明响应结果的状态码,原因短语和HTTP版本 状态码 客户端向服务器发送请求时,描述返回的请求结果。 6225a2ad7b1ca0312c80cca90e16bca1

  • 2xx的响应结果表明请求被正常处理了。
    1.200 0K
    2.204 No Content 服务器成功处理,但响应报文中不含实体的主体不封。
    3.206 Partial Content 客户端进行了范围请求,服务器成功执行了这部分的GET请求。
  • 3xx响应结果表明浏览器需要执行某些特殊的处理。
    1.301 Moved Permanently 永久性重定向,表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。
    2.302 Found 临时性重定向,表示请求的资源已被分配了新的URI,希望用户能使用新的URI访问。
    3.303 See Other 请求对应的资源存在另一个URI,应使用GET方法定向获取请求的资源。
  • 4xx 响应结果表明客户端是发生错误的原因所在。
    1.400 Bad Request 表示请求报文中存在语法错误。
    2.401 Unauthorized 表示发送的请求需要有通过HTTP认证的认证信息。
    3.403 Forbidden 表明对请求资源的访问被服务器拒绝了。
    4.404 Not Found 表明服务器上无法找到请求的资源。
  • 5xx 响应结果表明服务器本身发生错误
    1.500 Internal Server Error 服务器端再执行请求时发生了错误,可能是Web应用存在的bug或某些临时故障
    2.503 Service Unavailable 服务器暂时处理超负载或正在进行停机维护,现在无法处理请求。

    HTTP报文首部

    HTTP协议的请求和响应报文中必定包含HTTP首部,首部内容为客户端和服务器分别处理请求和响应提供所需要的信息,包含表示请求和响应的各种条件和属性的各类首部字段。

    HTTP请求报文

    由请求方法,请求URI,HTTP版本,HTTP首部字段等部分组成。 a95a1d42dd496e16e3e01f9a2843e9a6

    HTTP响应报文

    由HTTP版本,状态码,原因短语,HTTP首部字段等部分组成。 235d4b0dc3fcdd86b8bb90348249f78e

    HTTP首部字段

    由字段名和字段值构成,中间用冒号分隔,如: Content-Type: text/html Keep-Alive: timeout=15,max=100 字段值可以有多个值 以下都是HTTP/1.1首部字段一览

  • 通用首部字段 请求报文和响应报文都会使用的首部 9c2ca888712488c9176a1bca62f163b8

  • 请求首部字段 发送请求报文使用的首部字段,补充了请求的附加内容,客户端信息,响应内容相关优先级等信息。 f546c807b68de090706aa0d90de0dbb6 a17ecdb1d6d88b08a770d7e701dbbb42

  • 响应首部字段 服务器向客户端返回响应报文时使用的首部字段,补充了响应的附加内容。 827216887e7f63bdde00e699cd3ec891 05af8c9f5e29c6052d4c31f13f1eea48

  • 实体首部字段 针对请求报文和响应报文的实体部分使用的首部,补充了资源内容更新时间等于实体有关的信息。 fa8c07e6d7f200e2c10f95edd86d17ad

  • 非HTTP/1.1首部字段 Cookie,Set-Cookie,Centent-Disposition等 6761b5816badfe5b1487b1158b894caf

    socks5代理与http代理的区别

  • socks5协议是同时支持TCP和UDP的应用层协议,并不负责代理服务器的数据传输环节,只是在C/S两端之间建立起一条从客户端到代理服务器的授信连接。 0a968b62bdaf0a000050cc1d9729ce48 72ff6d453f2f9b9d9cfac73002caeae6 参考:https://loggerhead.me/posts/shadowsocks-yuan-ma-fen-xi-xie-yi-yu-jie-gou.html

  • http代理,会解释和重写报头,执行更高层次的过滤。通常只用于GET和POST方法,不用于CONNECT。 c401b27087c9f05ae197d654f4b2fd36 参考:https://zhuanlan.zhihu.com/p/28737960

其他应用层协议

  • telnet 远程登录
  • ssh 加密的远程登录系统
  • FTP 两个连接的计算机之间进行文件传输时使用的协议,使用2条TCP连接,1条用来控制,另1条用于数据传输。
  • SMTP(simple mail transfer protocol)电子邮件服务协议 7cafc30020251fa85492c0f8d356c4e2 85d7da4f857e4354537d9a6db0eb2d1e

    MIME
  • MIME媒体类型(如application/x-www-form-urlencoded),描述了报文实体主体消息内容的格式,属于OSI第六层表示层,email和http都使用MIME。早期的email只能处理文本格式的邮件。现在的email可以发送的数据类型已被扩展到MIME(multipurpose internet mail extensions),可以发送静态图像,动画,声音,程序等各种形式的数据。