URI、URL、URN

  • URL,统一资源定位符,用来标识某一处资源的地址,必须包含协议和域名,协议指的是HTTP、FTP、WS、file等协议,域名就是常说的网址,比如www.baidu.com ,其它还有端口,参数,虚拟目录等,对于端口来说网页常见的是80端口,下面上图。
  • URN,统一资源名称。相比较于URL来说,URN注重的是资源的名称,并不会指出资源地址,如:mailto:cyz@163.com。
  • URI,统一资源标识符。URL和URI可以看成URI的子集或者一种扩展,URI采用一种特定语法标识一个资源的字符串。所标识的资源可能是服务器上的一个文件。不过,也可能是一个邮件地址、新闻消息、图书、人名、Internet主机或者任何其它内容。

如果说URI代表的是一个人,那么URL代表的就是它的住址,URN指出了他的名字。

HTTP协议

HTTP(超文本传输协议)是一种通信协议,位于tcp协议之上,现在通常都是还有一层tls或ssl层,也就是常见的https,它能够将HTML(超文本标记语言)文档从web服务器传送到浏览器上面,基于请求响应,在客户端没有发起请求时,服务器不会发送数据信息给客户端。

无状态

HTTP是无状态的,同一个客户端的这次请求和上次请求没有任何对应关系,它并不会知道两次请求来自同一个客户端,如果后续请求不需要第一次请求的环境,那么无状态的优势就会体现出来,但是如果两次请求有对应关系存在,就会使得后续请求发送的数据量增大,也正为了解决这个问题,web程序引入了cookie机制来维护状态,储存在浏览器中,与其相对,服务器也有储存状态信息的session机制。

无连接

无连接的含义就是限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,立即断开连接,其目的是节省传输时间。请求时建立连接,请求后断开连接,避免一些通道不处理请求保持连接占用用资源,但是随着网页的发展,其内可能包含了很多静态资源,如果每传输一次资源就断开连接,效率极低,十分影响用户体验。

短连接

http 1.0 默认使用短连接,如果不想 使用短连接,就设置connection为keep-alive,客户端和服务端每进行一次http操作,就建立一次连接,任务结束就中断连接。如果请求的html中有网络js和图片,则需要新建连接去取。

tcp协议的time_wait和close_wait

tcp协议释放连接时需要四次挥手,服务器和客户端会进入time_wait和close_wait状态,time_wait状态会保持端口占用1分钟到4分钟,避免对方还有一些tcp片段传输,保证新建立的链接不会受到影响,close_wait状态会等待未传输完成的数据继续传输完毕。

大量time_wait存在时的解决办法

linux服务器默认的端口范围是 322768-61000,不到3万,如果存在大量的短连接被建立后释放,就会存在大量的timew_wait状态,那么就无法建立新连接了。
1,使用长连接 2,修改ipv4.ip_local_port_range,增大可用端口范围 3,客户端程序中设置socket的SO_LONGER选项。

长连接

http1.0版本默认长连接,如果想使用短连接,就设置connection为close,它使客户端和服务器的连接持久有效(在不超过Keep-ALive规定的时间的情况下),数据库使用的就是长连接。

请求报文

请求由客户端发起,其规范格式为:请求首行、请求头、空行、请求主体。

  • 请求首行,通常由请求方式、url、http协议版本号组成。
    请求方式有GET, POST, PUT, DELETE,HEAD,OPTIONS等,前四个比较常用。

  • 请求头,post请求时会设置contenttype。

  • 请求体,请求头后必须加空行,请求体就是请求的数据,get请求通常没有请求体 。

响应报文

响应由服务器发起,其规范格式为:响应首行(状态行)、响应头、响应主体。

  • 响应首行,响应通常由协议版本号和状态码组成。
    状态码:100-199 代表成功接收请求,要求客户端继续提交下一次请求完成整个处理过程。
    200-299 代表成功接收请求并已经完成整个过程。
    300-399 为完成请求,客户需要进一步细化请求。
    400-499 客户端的请求有错误。
    500-599 服务端出现错误

  • 响应头。

  • 响应主体,服务器端返回给客户端的内容。

http协议和tcp/ip 协议的关系

  • http是应用层协议,tcp协议是传输层协议,ip协议是网络协议。
  • IP协议主要解决网络路由和寻址。
  • tcp协议主要解决在IP层协议之上如何传输数据。
  • http协议建立在tcp之上,是一种超文本传输协议。

HTTP协议及其相关的更多相关文章

  1. http协议性能相关的技术要点

    1.http协议介绍 HTTP是一种请求/响应式的协议,基于TCP协议来进行数据传输. HTTPS是HTTP协议和安全套借口层(SSL)的结合,即安全增强版的HTTP. HTTP请求由三部分组成:请求 ...

  2. http协议的相关知识

    因为如今的工作设计的Web开发,因此了解了一下Http协议.在阅读了这篇文章HTTP协议具体解释(真的非常经典)后,总结了相关经常使用知识并列在此处以方便以后的查询. HTTP协议的主要特点可概括例如 ...

  3. C winpcap 网络抓包 并获取IP TCP 协议的相关信息

    以太网协议分析函数: void ethernet_protocol_packet_handle (u_char *argument, const struct pcap_pkthdr *packet_ ...

  4. GRPC协议的相关原理

    GRPC的Client与Server,均通过Netty Channel作为数据通信,序列化.反序列化则使用Protobuf,每个请求都将被封装成HTTP2的Stream,在整个生命周期中,客户端Cha ...

  5. HTTP用户认证、追加协议以及相关技术简单学习

    1. 用户身份认证 BASIC认证(基本认证): DIGEST(摘要认证): SSL客户端认证: FormBase认证(表单认证)常用: session和cookie 2. 基于HTTP的追加协议 A ...

  6. WebSphere应用服务器中https 请求协议的相关注意事项(服务器使用代理上Internet)

    最近遇到个需求需要web服务器应用通过https方式请求外部Internet服务器的接口,一开始本地测试时使用以下代码: String businessCode = "SH30580&quo ...

  7. Windows网络编程笔记4 -- Winsock 协议相关知识

     Win32平台上的Winsock编程,Winsock是一个与协议无关的接口.以下协议是我们需要了解的: 网络协议的特征包括: 1.  面向消息 2.  面向连接和无线接 3.  可靠性和次序性 4. ...

  8. 协议森林16 小美的桌号(DHCP协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址.DNS域名服务器地 ...

  9. fir.im Weekly - 揭秘 iOS 面向协议编程

    本期 fir.im Weekly 重点推荐关于 iOS 面向协议编程相关文章,还有 iOS 多线程安全.Swift 进阶.Android MVVM 应用框架.Android 蓝牙实践等技术文章分享和工 ...

随机推荐

  1. 实现自动SSH连接

    #!/usr/bin/expect set timeout 10 set username [lindex $argv 0] set password [lindex $argv 1] set hos ...

  2. shell的嵌入命令大全

    围绕以下几点展开学习: 1.什么是shell的嵌入命令? 2.为什么使用shell? 3.怎样使用shell嵌入命令? 1.什么是shell的嵌入命令: ♦这些命令是在实际的Bourne shell里 ...

  3. MIP技术进展月报第3期:MIP小姐姐听说,你想改改MIP官网?

    一. 官网文档全部开源 MIP 是一项永久的开源的项目,提供持续优化的解决方案,当然官网也不能例外.从现在开始,任何人都可以在 MIP 官网贡献文档啦! GitHub 上,我们已经上传了 <官网 ...

  4. ASP.Net Core MVC 发生二次请求

    Bug回忆录 昨天搭建新框架的时候,遇到一个很奇怪的“Bug”,每次请求都会触发两次Aciton,举例子吧,Demo: _Layout.cshtml <!DOCTYPE html> < ...

  5. xamarin forms常用的布局StackLayout详解

    通过这篇文章你将了解到xamarin forms中最简单常用的布局StackLayout.至于其他几种布局使用起来,效果相对较差,目前在项目中使用最多的也就是这两种布局StackLayout和Grid ...

  6. 《k8s-1.13版本源码分析》-调度器框架

    本文原始地址(gitbook格式):https://farmer-hutao.github.io/k8s-source-code-analysis/core/scheduler/scheduler-f ...

  7. Java学习路线图分析

     Java学习路线分析图 第一阶段 技术名称 技术内容 J2SE(java基础部分) java开发前奏 计算机基本原理,Java语言发展简史以及开发环境的搭建,体验Java程序的开发,环境变量的设置, ...

  8. Canvas引入跨域的图片导致toDataURL()报错的问题的解决

    本文介绍了Canvas引入跨域的图片导致toDataURL()报错的问题的解决,分享给大家,具体如下: [场景] 用户打开网页,则请求腾讯COS(图片服务器)上的图片js代码.使用canvas绘图. ...

  9. ArcGIS API for JavaScript 4.x 本地部署之跨域问题解决法:CORS

    众所周知,在离线部署ArcGIS API for JavaScript时,有时候会产生微件上的字体.符号变成方框的问题.这是遇到了跨域,只需要对所在服务器进行配置即可. 本篇使用的环境是:API配置在 ...

  10. 联发科Helio P90,MT6779VWB芯片处理器

    联发科(p90)MT6779VWB芯片是一个集成了蓝牙.fm.wlan和gps模块的高度集成的基带平台,包括调制解调器和应用处理子系统.支持LTE/LTE-A和C2K智能手机应用程序.该芯片集成了两个 ...