我是靠谱客的博主 会撒娇音响,最近开发中收集的这篇文章主要介绍协议设计与HTTP协议详解 Http 协议(不考虑http版本),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在这里插入图片描述

文章目录

      • 记住,TCP是一种流协议
      • 常见的协议格式
          • 便于解包的协议设计方法
  • 详解 Http 协议(不考虑http版本)
    • HTTP请求格式
            • 请求方法:
            • 请求头都有些什么?
    • HTTP响应格式
          • Content-Type: text/plain
          • Content-Length 字段
          • Content-Encoding 字段
          • set-Cookie 字段
    • http状态码
    • http/1.0,http/1.1,http/2.0 的区别以及 HTTP 与 HTTPS 有什么区别?
          • 见 :[从 Http 聊到 Https](https://blog.csdn.net/liushengxi_root/article/details/100188396)
    • 输入一个url到浏览器页面展示都经历了哪些过程

以下摘自欢神的博客:

记住,TCP是一种流协议

语出《Effective TCP/IP Programming》。意思是,TCP的数据是以字节流的方式由发送者传递给接收者,没有固有的“报文”或者“报文边界”的概念。简单说,TCP不理解应用层通信的协议,不知道应用层协议格式和边界。所以,所谓的“粘包和断包”是个伪概念。TCP压根就没有包边界的概念,何谈粘与断。

OSI模型定义的7层结构网络中,TCP协议所在的传输层和应用层之间还有会话层和表示层,原本协议包分界和加密等等操作是在这两层完成的。TCP/IP协议在设计的时候,并没有会话层和表示层。那如果用户需要这两层提供的服务怎么办?比如包的分界?答案是,用户自行在应用层代码中实现吧。

常见的协议格式

这个很简单,和文件一样,无非是纯文本格式或者二进制格式

便于解包的协议设计方法

一般而言,应用层协议设计有四种常见方法:

  • 1.每个发送的包长度固定 (这不就是暑假写聊天室时用的吗?直接一个结构体)
  • 2.包每行均采取特殊结束标记用以区分(例如HTTP使用的rn)(今天的主讲)
  • 3.包前添加长度信息(所谓的TLV模式,即type、length、value)(fastcgi协议应该是这个)
  • 4.利用包本身的格式解析(如XML、JSON等)

以上1和3通常是二进制格式,2和4是文本格式。

OK.具体的协议deamo,去看欢神链接:浅谈服务端编程

详解 Http 协议(不考虑http版本)

众所周知,Http 的交流分为请求和响应。接下来就分别讲解一下下:

HTTP请求格式

请求行
请求头部字段
空行(只包含一个  `rn`)
请求体

实例:

GET /   HTTP/1.1
Host: 127.0.0.1:10000
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.67 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
请求方法:
  • OPTIONS - 返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送’*'的请求来测试服务器的功能性。

  • HEAD- 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否更新。

  • GET - 向特定的资源发出请求.

  • POST - 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致服务器端新的资源的建立和/或已有资源的修改。

  • PUT - 向指定资源位置上传其最新内容。

  • DELETE - 请求服务器删除Request-URI所标识的资源。

  • TRACE- 回显服务器收到的请求,主要用于测试或诊断。

  • CONNECT - HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

  • PATCH - 对某个资源做部分修改

方法名称都是大写的

注意:Linux有GET,POST等命令可以直接使用

请求头都有些什么?

在这里插入图片描述

HTTP响应格式

响应行
响应头
空行(只包含一个  `rn`)
响应体

实例:


HTTP/1.0 200 OK ("协议版本 + 状态码 + 状态描述")
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84

<html>
  <body>Hello World</body>
</html>

在这里插入图片描述

Content-Type: text/plain

关于字符的编码,1.0版规定,头信息必须是 ASCII 码,后面的数据可以是任何格式。因此,服务器回应的时候,必须告诉客户端,数据是什么格式,这就是Content-Type字段的作用
下面是一些常见的Content-Type字段的值。

text/plain
text/html
text/css
image/jpeg
image/png
image/svg+xml
audio/mp4
video/mp4
application/javascript
application/pdf
application/zip
application/atom+xml

这些数据类型总称为MIME type,每个值包括一级类型和二级类型,之间用斜杠分隔。

除了预定义的类型,厂商也可以自定义类型。
MIME type还可以在尾部使用分号,添加参数。

Content-Type: text/html; charset=utf-8
上面的类型表明,发送的是网页,而且编码是UTF-8。

客户端请求的时候,可以使用Accept字段声明自己可以接受哪些数据格式。

Accept: */*
上面代码中,客户端声明自己可以接受任何格式的数据。

MIME type不仅用在HTTP协议,还可以用在其他地方,比如HTML网页。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- 等同于 -->
<meta charset="utf-8" /> 
Content-Length 字段

目标文件的长度

Content-Encoding 字段

由于发送的数据可以是任何格式,因此可以把数据压缩后再发送。Content-Encoding字段说明数据的压缩方法。

Content-Encoding: gzip
Content-Encoding: compress
Content-Encoding: deflate

客户端在请求时,用Accept-Encoding字段说明自己可以接受哪些压缩方法。

Accept-Encoding: gzip, deflate
set-Cookie 字段

表示服务器传送一个 Cookie 给客户端.

BAIDUID指定Cookie 名字
expires Cookie生存时间

  • 作用:

客户端每次向服务器发送请求都要带上Cookie,服务器就能区别不同客户了,基于浏览器的自动登陆就是用Cookie实现的.

加餐:cookie 和 session 有什么区别?

  • 服务端要为特定的用户创建特定的Session,用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个唯一标识。在服务端保存Session的方法很多,内存、数据库、文件都有。
  • Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息。然后发送到服务器,服务器通过session 区别用户。(自动填充功能的实现)

http状态码

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:

分类分类描述
1**信息,服务器收到请求,需要请求者继续执行操作
2**成功,操作被成功接收并处理
3**重定向,需要进一步的操作以完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5**服务器错误,服务器在处理请求的过程中发生了错误

完整的:http://www.runoob.com/http/http-status-codes.html

http/1.0,http/1.1,http/2.0 的区别以及 HTTP 与 HTTPS 有什么区别?

见 :从 Http 聊到 Https

输入一个url到浏览器页面展示都经历了哪些过程

URL处理全流程与负载均衡原理

参考:

HTTP 协议入门 阮一峰

http://0xffffff.org/2014/11/20/33-servie-program/

最后

以上就是会撒娇音响为你收集整理的协议设计与HTTP协议详解 Http 协议(不考虑http版本)的全部内容,希望文章能够帮你解决协议设计与HTTP协议详解 Http 协议(不考虑http版本)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部