HTTP协议介绍

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。由于HTTP协议是目前Web开发的主流协议,基于HTTP的应用非常广泛,因此,掌握HTTP的开发非常重要。

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布

式超媒体信息系统。

OSI(Open System Interconnection)七层模型

应用层网络服务与最终用户的一个接口。协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP表示层数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)格式有,JPEG、ASCll、DECOIC、加密格式等会话层建立、管理、终止会话。(在五层模型里面已经合并到了应用层)对应主机进程,指本地主机与远程主机正在进行的会话传输层定义传输数据的协议端口号,以及流控和差错校验。协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层网络层进行逻辑地址寻址,实现不同网络之间的路径选择。协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP数据链路层建立逻辑连接、进行硬件地址寻址、差错校验 [2] 等功能。(由底层网络定义协议)将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。物理层建立、维护、断开物理连接。(由底层网络定义协议)TCP/IP 层级模型结构,应用层之间的协议通过逐级调用传输层(Transport layer)、网络层(Network Layer)和物理数据链路层(Physical Data Link)而可以实现应用层的应用程序通信互联。

HTTP协议的主要特点如下

1、支持Client/Server模式;

2、简单——客户向服务器请求服务时,只需指定服务URL,携带必要的请求参数或消息体:

3、灵活——HTTP允许传输任意类型的数据对象,传输的内容类由HTTP消息头

屮的Content-Type加以标记:

4、无状态——HTTP协议是无状态协议,无状态是指协议对于事务处理没有记忆能

力。缺少状态意味着如果后续处理需要之前的信息,则它必须重传,这样可能导

致每次连接传送的数据量增大,另一方面,在服务器不需要先前信息时它的应答

就较快,负我较轻。

URI与URL的理解

1、URI(Uniform Resource Identifier,统一资源标识符)

就是在IMS网络中IMS用户的“名字”,也就是IMS用户的身份标识。

URI一般由三部分组成:

1. 访问资源的命名机制。

2. 存放资源的主机名。

3. 资源自身的名称,由路径表示。

语法:[scheme:] scheme-specific-part

URI以scheme和冒号开头。Scheme用大写/小写字母开头,后面为空或者跟着更多的大写/小写字母、数字、加号、减号和点号。冒号把 scheme与scheme-specific-part分开了,并且scheme-specific-part的语法和语义(意思)由URI的名字空间决定。

如下面的例子:

http://www.cnn.com,其中http是scheme,//www.cnn.com是 scheme-specific-part,并且它的scheme与scheme-specific-part被冒号分开了。

2、url是统一资源定位符 (Uniform Resource Locator)

统一资源定位符,是URI的子集;它除了标识资源的位置,还提供一种定位该资源的主要访问机制(如其网络“位置”)。【即提供具体方式找到该资源(位置+方式)】

URL的格式由下列三部分组成:

schema://host[:port#]/path/.../[;url-params][?query-string][#anchor]

scheme 指定低层使用的协议(例如:http, https, ftp)

host HTTP服务器的IP地址或者域名

port# HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 http://www.cnblogs.com:8080/

path 访问资源的路径

url-params

query-string 发送给http服务器的数据

anchor- 锚

URL 的一个例子:

http://www.mywebsite.com/sj/test;id=8079?name=sviergn&x=true#stuff

Schema: http

host: www.mywebsite.com

path: /sj/test

URL params: id=8079

Query String: name=sviergn&x=true

Anchor: stuff

TCP握手连接以及断开

TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道。

建立连接:

三次握手即可建立TCP连接

1、第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;

2、第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;

3、第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

数据传输:

建立好连接后,开始传输数据。TCP数据传输牵涉到的概念很多:超时重传、快速重传、流量控制、拥塞控制等等。(这一切都是为了提供可靠的字节流服务)

断开连接:

四次握手即可断开TCP连接

1、第一次握手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但此时主动关闭方还可以接受数据。

2、第二次握手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。

3、第三次握手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。

4、第四次握手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。

HTTP的请求方法

1、GET:向特定的资源发出请求

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

3、PUT:向指定资源位置上传其最新内容。

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

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

6、TRACE:请求服务器会送收到的请求信息,主要用于测试或诊断。

7、OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求

8、CONNECT: HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。(即留为将来使用)

【注意:请求方法区分大小写;所示请求方法应为大写】

GET与POST的区别

1、GET提交的数据会放在URL之后,就是把数据放置在请求行(request line)以?分割URL和传输数据,参数之间以&相连,

如http://localhost:8080/xxx?postid=6810130&update=1 ;

POST方法是把提交的数据放在HTTP包的Body中,数据不会在地址栏中显示出来。

2、GET提交的数据大小有限制(因为浏览器对URL的长度有限制),如:IE对URL长度的限制是2083字节(2KB+35B),而POST方法提交的数据理论上没有限制。

3、GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。

4、GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。

如何利用tcp或udp实现应用层协议_HTTP协议开发应用总结?相关推荐

  1. 基于TCP或UDP的应用层协议有哪些?——Linux网络编程

    参考博文01:https://blog.csdn.net/Wu000999/article/details/89293717 博文02 https://blog.csdn.net/u014082714 ...

  2. 《图解TCP/IP》学习日志----四、TCP与UDP、应用层协议、WWW(万维网)

    UDP UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务.并且它是将应用程序发来的数据在收到的那一刻,立即按照 原样发送到网络上的一种机制.即使是出现网络堵塞的情况下,UDP也无法进行流量 ...

  3. 常见的基于TCP或UDP的应用层协议

    基于TCP的应用层协议有:SMTP.TELNET.HTTP.FTP 基于UDP的应用层协议:DNS.TFTP(简单文件传输协议).RIP(路由选择协议).DHCP.BOOTP(是DHCP的前身).IG ...

  4. 利用TCP和UDP协议,实现基于Socket的小聊天程序(初级版)

    TCP TCP (Transmission Control Protocol)属于传输层协议.其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送.可靠性.有效流控.全双工操作和多路复用 ...

  5. http协议_HTTP协议

    http协议 HTTP (Hyper Text Transfer Protocol) is one of the application protocols of TCP/IP, the suite ...

  6. pythonsocket自定义协议_小渣渣学习笔记 python day28【tcp聊天 udp聊天 粘包 自定义协议 struct模块】...

    tcp 实现聊天功能 server端 import socket sk = socket.socket() sk.bind(('127.0.0.1',22000)) sk.listen() while ...

  7. http协议_HTTP 协议入门

    来源:阮一峰的网路日志 作者:阮一峰 HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点. 本文介绍 HTTP 协议的历史演变和设计思路. 一.HT ...

  8. brook协议_http协议-转

    TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement ...

  9. 基于TCP或UDP协议的应用层协议

    TCP和UDP都是传输层协议,上面是应用层,下面是网络层 TCP与UDP区别: TCP(传输控制协议)提供的是面向连接.可靠的字节流服务.当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连 ...

最新文章

  1. 基于RBGD的mapping
  2. 图像坐标:我想和世界坐标谈谈(B)
  3. 【双11劲爆干货】阿里高级Java面试题(首发,70道)
  4. springboot security 权限校验_springboot借助aop和注解实现权限校验
  5. CSS之Responsive网页设计的三个特性
  6. H618B刷了tomato0530版本 呵呵,测试一下
  7. 使用Speech SDK 5.1文字转音频
  8. 创建图片mat_OPENCV(二)——Mat类与几个函数的简介
  9. Ubuntu 携手初创企业用代码开拓物联网
  10. 用计算解决科学难题,用算法让生活变得更好
  11. Java开发 微软OAuth身份验证在EWS中的应用
  12. 2022年的ISTQB,你考了没?
  13. 企业使用虚拟码号的优势!
  14. 什么硬件可以手游服务器,台湾服务器用来挂机手游要哪些硬件支持?
  15. ISDN PRI协议之第三层协议Q.931
  16. android m3u8离线播放器,android上实现离线缓存播放加密HLS视频和未加密的HLS视频...
  17. 一步一步学Spring Boot(三)-黄文毅-专题视频课程
  18. CUlane数据集介绍
  19. 如何高效地利用通达信数据接口?
  20. 已经开的电脑中 如何查到电脑的开机密码?

热门文章

  1. java md5加密32位小写_Java生成MD5的方法,简单封装并转为32位小写
  2. 【Python教程】 re 模块中findall() 函数返回值展现方式的用法详解
  3. python 的 str bytes 区别
  4. 案例详解Python变量的作用域是怎么使用的,面试必学
  5. Python使用lxml模块和Requests模块抓取HTML页面的教程
  6. python 读取二进制数据到可变缓冲区中
  7. linux驱动双摄像头,详解linux 摄像头驱动编写
  8. 前台提示_提示一下大家,如果考试科目不合格,可以到前台自助机查询
  9. YOLOv5 报错:“NotImplementedError: Could not run ‘torchvision::nms‘ with arguments from the ‘CUDA‘ back
  10. jinja2 {{}} href 双大括号