美文网首页
理解http协议

理解http协议

作者: jinya2437 | 来源:发表于2019-01-18 09:04 被阅读31次

一、HTTP协议的演进

Http(HyperText Transfer Protocol)协议是基于TCP的应用层协议,它不关心数据传输的细节,主要用来规定客户端和服务端的数据传输格式,最初是用来向客户端传输HTML页面内容。默认端口是80。

1.HTTP 0.9版本 1991年

这个版本最初用来向客户端传输HTML页面的,所以只有一个GET命令,服务器返回客户端一个HTML页面,不能是其它格式。利用这个版本完全可以构建一个简单的静态网站了。

2.HTTP 1.0版本 1996年

1.0版本改变是比较大的,奠定了现在HTTP协议的基础,这个版本的协议不仅可以传输HTML的文本页面,还可以传输其它二进制文件,例如图片、视频。而且还增加了现在常用的POST和HEAD命令,请求消息和响应消息也不是单一的,规定了一些元数据字段,例如:字符集、编码、状态码等

3.HTTP 1.1版本 1997年

实际上是在1.0版本之后半年时间又发布了一个版本,这个版本在1.0版本的基础上更加完善了。这个版本增加了持久连接,就是说之前版本的协议一次请求就是一次TCP连接,请求完成后这个连接就关闭掉了。众所周知TCP协议是可靠的,建立连接需要3次握手,断开连接需要4次挥手,并且TCP有流量控制和拥塞控制,有慢开始机制,刚建立连接时传输比较慢,这是比较耗费资源的。一个丰富的页面会有许多图片、表单和超链接。这样的话就会有多次的HTTP请求,所以在这个版本上默认不关闭TCP连接也不用声明Connection: keep-alive字段。如果确实要关闭可以指定Connection: close字段。还引入了管道机制,就是说在一个TCP连接里可以同时发送多个HTTP请求,而不必等待上一个请求响应成功再发送。还增加了PUT、PATCH、HEAD、 OPTIONS、DELETE等命令,丰富了客户端和服务端交互动作。还增加了Host字段。

4.HTTP 2版本 2015年

这个版本也是随着互联网的发展,有了新的需求制定了新的功能还有对上一个版本的完善。1.1版本有了管道机制,但是正在服务端还是要对请求进行排队处理。这个版本可以多工的处理。还有了头信息压缩和服务器的主动推送。

5.HTTPS

HTTPS是HTTP协议的安全版本,HTTP协议的数据传输是明文的,是不安全的,HTTPS使用了SSL/TLS协议进行了加密处理。

二、HTTP协议的特点

1.HTTP协议是无状态的

就是说每次HTTP请求都是独立的,任何俩个请求之间没有必然联系。但是在实际应用中并不是这样的,引入了Cookie和Session机制来关联请求

2.多次HTTP请求

在客户端请求网页时多数情况下并不是一次请求就能成功的,服务端首先是响应HTML页面,然后浏览器收到响应之后发现HTML页面还引用了其他的资源,例如:CSS,JS文件,图片等等,还会自动发送HTTP请求这些需要的资源

3.基于TCP协议

HTTP协议的目的是规定客户端和服务端数据传输的格式和数据交互行为,并不负责数据传输的细节。底层是基于TCP实现的。现在使用的版本当中是默认持久连接的,也就是多次HTTP请求使用一个TCP连接。

三、HTTP报文

1.请求报文

HTTP的请求报文结构

请求行 方法 URL 版本 CRLF
请求头 -- -- -- --
请求体 -- -- -- --

报文由三部分组成,即请求行请求头请求体。其中请求行指定的是方法、URL、协议版本、CRLF(回车和换行);请求头是键值对形式存在的,类似Accept-Languag:zh-CN;请求体就是要传输的数据。
举例:

Accept:text/html,application/xhtml+xml,application/xml;image/webp
Accept-Encoding:gzip,deflate,sdch
Accept-Language:zh-CN
Cache-Control:max-age=0
Connection:keep-alive
Host:xiaojiadian.gome.com.cn
User-Agent:Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebkit/537.36(KHTML,like Gecko)Chrome/49.0.6.423
2.响应报文

HTTP的响应报文结构

状态行 版本 状态码 解释状态码短语 CRLF
响应头 -- -- -- --
响应体 -- -- -- --

报文由三部分组成,即状态行响应头响应体。其中状态行指定的是版本、状态码、解释状态码短语、CRLF(回车和换行);响应头是键值对形式存在的,类似Connection:keep-alive;响应体就是要传输的数据。
举例:

Connection:keep-alive
Date:Thu,17 Jan 2019 06:36:01 GMT
ETag:B82D6841000
Server:GOMEWS

四、HTTP请求方法

请求方法是客户端用来告知服务器其动作意图的方法。需要注意方法名区分大小写,下面详细说明:

1.GET:获取资源
2.POST:传输实体主体
3.PUT:传输文件
4.HEAD:获得报文首部(请求头和响应头)
5.DELETE:删除文件

五、HTTP响应状态码

200:OK

请求正常处理成功了

304:Not Modified

已经缓存文件了

400:Bad Request

请求报文中存在语法错误

403:Forbidden

请求访问的资源被拒绝,没有获得服务器的访问权限,IP被禁止等

404:Not Found

请求的资源在服务器找不到

500:Internal Server Error

服务端在执行请求时发生了错误,很有可能是服务端程序的bug

504:Getaway Timeout

网管超时

302:Found

代表重定向


六、HTTP请求头/响应头/首部字段

HTTP首部字段是构成HTTP报文最重要的元素之一。在客户端与服务端之前进行信息传递的时候请求和响应都会使用首部字段,会传递一些重要的信息。首部字段是以键值对的形式存在的。包含报文的主体大小、语言、认证信息等。HTTP首部字段包含4种类型:

通用首部字段:代表请求头和响应头都会使用的字段
请求首部字段:是客户端向服务器发送请求使用的首部字段
响应首部字段:是服务端向客服端返回响应时使用的首部字段
实体首部字段:是针对请求体和响应体的实体部分使用的部首

1.通用首部字段
首部字段名 说明
Cache-Control 控制缓存的行为
Connection 连接的管理
Date 创建报文的日期时间
Pragma 报文指令
2.请求首部字段
首部字段名 说明
Accept 客户端可接受处理的媒体类型
Accept-Charset 客户端可接受的字符集
Accept-Encoding 客户端可接受的内容编码
Accept-Language 客户端可接受的语言
Host 请求资源所在服务器
if-Match 比较实体(ETag)
if-Modified-Since 比较资源的更新时间
if-None-Match 比较实体标记
Referer 对请求中URI的原始获取方
User-Agent HTTP客户端浏览器、系统信息
3.响应首部字段
首部字段名 说明
ETag 资源的匹配信息
Location 令客户端重定向到指定URI
Server HTTP服务器的安装信息
Proxy-Authenticate 代理服务器对客户端的认证信息
4.实体首部字段
首部字段名 说明
Allow 资源可支持的HTTP方法
Context-Encoding 实体主体的编码格式
Context-Language 实体主体的大小(字节)
Context-Length 实体主体的媒体类型
Context-Location 替代对应资源的URI
Context-Type 实体主体的媒体类型
Expires 实体主体过期的日期时间
Last-Modified 资源的最后修改时间

七、关于HTTP常见问题以及解答

1.GET和POST的区别
  • GET用于获取资源信息,而POST用于更新资源信息
  • GET提交请求的数据实体会放在URL后面,用?来分割,例如://higo.gome.com.cn?name=lucy&age=18
  • GET提交的数据长度是有限制,而POST没有
  • GET提交的数据不安全,因为参数都会暴露在URL上面
2.408 Request Timeout和504 Gateway Timeout区别

408是请求超时,504是响应超时;408一般是客户端或者网络拥塞,504是服务端响应过慢,也有可能是网络问题

3.Cookie和Session区别

Cookie和Session都是为了保存客户端和服务端的交互状态。Cookie是保存在客户端,Session是保存在服务端;Cookie是客户端请求服务端时服务器会将一些信息以键值对形式返回给客户端,保存在浏览器中。Cookie的缺点是大小和数量都有限制(浏览器标准不一致,建议cookie个数小于20个,总大小小于4KB);Cookie如果很大,每次请求都要带上,这样就影响了传输效率。Session是基于Cookie来实现的,Session存在于服务端,但是每次传输的时候不会传输数据,只是把代表一个客户端的唯一ID(SessionID)写在客户端。Session优势传输数据量小,比较安全。

相关文章

  • 理解HTTP协议

    任何一个技术和知识在了解了大概之后还需要在学习和实践中不断总结、思考才能真正掌握,变成自己的东西。用自己的方式分析...

  • 理解http协议

    1、HTTP概念 1.1 什么是HTTP hypertext transport protocol,即超文本传输协...

  • 理解http协议

    一、HTTP协议的演进 Http(HyperText Transfer Protocol)协议是基于TCP的应用层...

  • http协议缓存机制

    2.1、学习http协议,理解http请求-响应模式2.2、理解http是应用层协议,它是构建在TCP/IP协议上...

  • HTTPS和HTTP的区别

    简单的理解https是安全的http,即https协议 = http协议+ssl/tls协议。相比http多了一个...

  • HTTP协议从入门到精通必学知识点

    理解HTTP协议 在互联网时代HTTP协议的重要性无需多言,对于技术岗位的同学们来说理解掌握HTTP协议是必须的。...

  • grpc协议解析及新语言支持

    (一)grpc 协议分析。gRPC 是基于 HTTP/2 协议的,要深刻理解 gRPC,理解下 HTTP/2 是必...

  • HTTP协议的理解

    HTTP协议的理解 1、HTTP协议相关 Web浏览器、服务器和相关的Web应用程序都是通过HTTP相互通信的。H...

  • HTTP 协议的理解

    http 协议是建立在 tcp 协议之上的(应用层)一个无状态的超文本传输协议 它规定的文本的传输格式,分为请求行...

  • HTTP协议的理解

    重点:1.超文本传输协议. 2.http请求过程. 1> http协议: 超文本传输协议(Hypertext Tr...

网友评论

      本文标题:理解http协议

      本文链接:https://www.haomeiwen.com/subject/dfdidqtx.html