HTTP http相关知识点详解

Posted 抹泪的知更鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP http相关知识点详解相关的知识,希望对你有一定的参考价值。

学习目标

  1. 掌握http协议请求和响应模型 重点
  2. 掌握Tomcat处理流程 重点

HTTP 协议

超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

HTTP是一个基于TCP的、请求与响应模式的、无状态的、应用层的协议。

HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。

TCP/IP

TCP/IP 指:传输控制协议 / 网际协议(Transmission Control Protocol / Internet Protocol)。

TCP/IP 用于定义计算机如何连入因特网,以及数据如何在它们之间传输的标准。

TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。

TCP/IP协议在一定程度上参考了OSI的体系结构。OSI模型共有七层,但是这显然是有些复杂的,所以在TCP/IP协议中,它们被简化为了四个层次。

OSI 七层模型

七层模型从上到下依次是:

  • 应用层:协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
  • 表示层:数据的表示、安全、压缩。格式有,JPEG、ASCll、DECOIC、加密格式等
  • 会话层:建立、管理、终止会话。对应主机进程,指本地主机与远程主机正在进行的会话
  • 传输层:定义传输数据的协议端口号,以及流控和差错校验。协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层
  • 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
  • 数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验等功能。将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
  • 物理层:建立、维护、断开物理连接。

七层模型传输数据过程:


TCP

TCP 传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

TCP 是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。

TCP 报文头

上图中有几个字段需要重点介绍下:

(1)序号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。

(2)确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。

(3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:

  • ACK:确认序号有效。
  • FIN:释放一个连接。
  • PSH:接收方应该尽快将这个报文交给应用层。
  • RST:重置连接。
  • SYN:发起一个新连接。
  • URG:紧急指针(urgent pointer)有效。

TCP 3次握手

(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。 (2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。 (3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

TCP 4次挥手

所谓四次挥手(Four-Way Wavehand )即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。 在socket编程中, 这一过程 由客户端或服务端任一方执行close来触发。

(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态 。 (2)第二次挥手:Server收到FIN后 ,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态 。 (3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。 (4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1 , Server进入CLOSED状态, 完成四次挥手。

HTTP 请求响应

请求结构

请求消息结构

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:

  • 请求行(request line)
  • 请求头部(header)
  • 空行
  • 请求数据

下图给出了请求报文的一般格式:

如:

GET / HTTP/1.1 

Host: www.csdn.net 

Connection: keep-alive 

Cache-Control: max-age=0 

Upgrade-Insecure-Requests: 1 

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/55.0.2883.87 Safari/537.36 

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 

Referer: https://www.csdn.net/ 

Accept-Encoding: gzip, deflate, sdch, br 

Accept-Language: zh-CN,zh;q=0.8 

Cookie: uuid_tt_dd=-6852503192799459486_20161230; _ga=GA1.2.851452765.1483110024; UE="starzhangkiss@qq.com"; __guid=253029775.837108528115350700.1516453692677.6106

请求方法

方法描述
GET请求指定的页面信息,并返回实体主体。数据被包含在URL参数中
POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。
DELETE请求服务器删除指定的页面。
PUT从客户端向服务器传送的数据取代指定的文档的内容。
HEAD类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS允许客户端查看服务器的性能。
TRACE回显服务器收到的请求,主要用于测试或诊断。

响应结构

响应消息结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yZE8OqLT-1640956169456)(C:\\Users\\Administrator\\AppData\\Roaming\\Typora\\typora-user-images\\image-20211231204853833.png)]

如:

HTTP/1.1 200 OK 

Server: Tengine 

Content-Type: text/html 

Content-Length: 15154 

Connection: keep-alive 

Date: Fri, 27 Apr 2018 02:49:12 GMT 

X-Powered-By: HHVM/3.11.1 

Content-Encoding: gzip 

Vary: Accept-Encoding 

Via: cache40.l2et2-2[0,200-0,H], cache3.l2et2-2[1,0], cache1.cn548[0,200-0,H], cache4.cn548[1,0] Age: 35292 

X-Cache: HIT TCP_HIT dirn:7:245100152 mlen:-1 

X-Swift-SaveTime: Fri, 27 Apr 2018 12:24:58 GMT 

X-Swift-CacheTime: 86400 Timing-Allow-Origin: * 

EagleId: dbee144415248326444025049e

响应头参数

响应答头说明
Allow服务器支持的请求方法(如GET、POST等)。
Content-Encoding文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。
Content-Length内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。
Content-Type文档MIME类型
Date当前的GMT时间。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。
Expires应该在什么时候认为文档已经过期,从而不再缓存它?
Last-Modified文档的最后改动时间。
Location表示客户应当到哪里去提取文档。
Refresh表示浏览器应该在多少时间之后刷新文档,以秒计。
Server服务器名字。由Web服务器自己设置。
Set-Cookie设置和页面关联的Cookie。
WWW-Authenticate客户应该在Authorization头中提供什么类型的授权信息?

状态码

5种状态码

分类分类描述
1信息,服务器收到请求,需要请求者继续执行操作(收到信件,还没看)
2成功,操作被成功接收并处理(收到,并且看过了)
3重定向,需要进一步的操作以完成请求(转达信息给第三者)
4客户端错误,请求包含语法错误或无法完成请求(发不出去)
5服务器错误,服务器在处理请求的过程中发生了错误(对方出错【代码错误】)

HTTP状态码列表

状态码中文描述
200请求成功。一般用于GET与POST请求
201已创建。成功请求并创建了新的资源
202已接受。已经接受请求,但未处理完成
204无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
301永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
400客户端请求的语法错误,服务器无法理解
401请求要求用户的身份认证
403服务器理解请求客户端的请求,但是拒绝执行此请求
404无法找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
408服务器等待客户端发送的请求时间过长,超时
411服务器无法处理客户端发送的不带Content-Length的请求信息
415服务器无法处理请求附带的媒体格式
500服务器内部错误,无法完成请求

以上是关于HTTP http相关知识点详解的主要内容,如果未能解决你的问题,请参考以下文章

HTTP服务相关基础知识详解

《HTTP协议详解》读书笔记---请求篇之情求方法

HTTP详解!你了解有多少?(系列一)

HTTP 协议详解

HTTP协议经典面试题整理及答案详解

网络知识_详解HTTP和HTTPS