http协议基础

http协议定义了浏览器(即万维网客户程序)怎样向万维网服务器请求万维网文档以及服务器怎样把文档传送给服务器。从层次的角度上看,http是面向事务的应用层协议。

1. http报文的传送

http使用了面向连接的tcp作为运输层协议,保证了数据的可靠传输。http不考虑数据在传输过程中被丢弃后又怎样重传。

http协议本身是无连接的,指的是虽然http使用了tcp连接,但通信双方在交换http报文之前不需要建立http连接。
http协议是无状态的(stateless),指的是同一个客户第二次访问同一个服务器上的页面时,服务器不记得访问过的这个客户,服务器的响应时间与第一次访问时相同。

连接过程:http协议首先要和服务器建立tcp连接,当三次握手的前两部分完成后,万维网客户就把http请求报文作为三次握手的第三个报文的数据发送给服务器。服务器收到http请求报文后,就把请求的文档作为响应报文返回给客户。

http/1.0协议里,每请求一个文档就要有两倍RTT(往返时间)的开销,所以这种非持续连接会使万维网服务器负担很重。而在http/1.1协议中,使用了持续连接,也就是服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户和该服务器可以继续在这条连接上传送后续的http请求报文和响应报文。

持续连接有两种工作方式,即非流水线方式和流水线方式
非流水线方式:客户在收到一个响应后才能发出下一个请求
流水线方式:客户在收到http响应报文之前就能够接着发送新的请求报文

代理服务器:代理服务器是一种网络实体,又称为万维网高速缓存。代理服务器把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若代理服务器发现这个请求与暂放的请求相同,就返回暂存的响应,而不需要按url的地址再去访问该资源。代理服务器可在客户端或服务器端工作,也可在中间系统工作。(burpsuite工具就是作为一个本地的代理,所有经过burpsuite访问Web的请求都会被拦截到)

2.http报文

http是面向文本的(还有二进制的…),因此在报文中的每一个字段都是一些ascii码串,因为各个字段的长度是不确定的。

注:CRLF都是必需的,“CR”和“LF”分别代表“回车”和“换行”

常见方法

GET和POST方法区别
最直观的来说,GET把参数包含在URL中,POST通过request body传递参数。

“标准答案”:

  • GET在浏览器回退时是无害的,而POST会再次提交请求。

    GET产生的URL地址可以被Bookmark,而POST不可以。

    GET请求会被浏览器主动cache,而POST不会,除非手动设置。

    GET请求只能进行url编码,而POST支持多种编码方式。

    GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

    GET请求在URL中传送的参数是有长度限制的,而POST么有。

    对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

    GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

    GET参数通过URL传递,POST放在Request body中。

GET和POST还有一个重大区别(没有测试过,网上看到的,暂时先写下来):
GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

GET:使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind。通过GET方式传递的数据直接放在在地址中,所以GET方式的请求一般不包含”请求内容”部分,请求数据以地址的形式表现在请求行。地址中”?”之后的部分就是通过GET发送的请求数据,各个数据之间用”&”符号隔开。显然这种方式不适合传送私密数据。另外,由于不同的浏览器对地址的字符限制也有所不同,一般最多只能识别1024个字符,所以如果需要传送大量数据的时候,也不适合使用GET方式。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

POST:允许客户端给服务器提供信息较多。POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,这样POST方式对传送的数据大小没有限制,而且也不会显示在URL中。POST方式请求行中不包含数据字符串,这些数据保存在“实体主体”部分,各数据之间也是使用”&“符号隔开。POST方式大多用于页面的表单中。因为POST也能完成GET的功能,因此多数人在设计表单的时候一律都使用POST方式,其实这是一个误区。GET方式也有自己的特点和优势,我们应该根据不同的情况来选择是使用GET还是使用POST。

状态码

  • 1xx表示通知信息,如请求收到了或正在进行处理
  • 2xx表示成功,如接受或知道了
  • 3xx表示重定向
  • 4xx表示客户端的错误
  • 5xx表示服务器的错误
3.Cookie

因为http是无状态的,但是一些万维网站点有事需要识别用户。可以使用Cookie来跟踪用户,Cookieb表示http服务器和客户之间传递的状态信息。Cookie只是一个小小的文本文件,不是计算机的可执行程序。
工作原理
当用户浏览某个使用Cookie的网站是,该网站的服务器就为该用户产生一个唯一的识别码,并以此为索引在服务器的后端数据库中产生一个项目,接着再给给用户的响应报文中添加一个叫做Set-cookie的首部行。首部字段名就是Set-cookie,后面的值就是该用户的识别码。如:Set-cookie:1234567
当该用户收到这个响应时,其浏览器就在它管理的特定Cookie文件中添加一行,其中包括这个服务器的主机名和Set-cookie后面给出的识别码。当用户继续访问这个网站时,没发送一个http请求报文,浏览器就会从其Cookie文件中取出这个网站的识别码,并放到http请求报文的Cookie首部行中:Cookie:1234567

4.危险首部行参数
  1. User-Agent:中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些页面无法在某个浏览器中正常显示,但通过伪装 UA 可以绕过检测。
  2. X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。格式为:X-Forwarded-For: client1, proxy1, proxy2。XFF 的内容由「英文逗号 + 空格」隔开的多个部分组成,最开始的是离服务端最远的设备 IP,然后是每一级代理设备的 IP。
  3. Referrer:网站来路。HTTP Referer是header的一部分,当浏览器向web服务器发出请求的时候,一般会带上Referer,告诉服务器用户从那个页面连接过来的,服务器由此可以获得一些信息用语处理。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Re:计算机网络  应用层 诸多协议 实验环境搭建  DNS、DHCP、HTTP、FTP、Telnet、RDP、STMP、POP3、IMAP======================# 应用层 诸多协议 域名系统 DNS 动态主机配置协议 DHCP 超级文本传输协议 HTTP 文件传输协议 FTP Telnet 协议和 RDP(远程桌面协议) 发送电子邮件的协议 SMTP  接收电子邮件的协议 POP3 和 IMAP # 什么是域名 整个Internet网站和各种服务器数量众多,各个组织的服务器都需要给一个名称,这就很容易重名。如何确保Internet上的服务器名称在整个Internet唯一呢?这就需要Internet上有域名管理认证机构进行统一管理。如果你的公司在互联网上有一组服务器(邮件服务器、FTP服务器、Web服务器等),你需要为你的公司先申请一个域名,也就是向管理认证机构注册一个域名。 域名的注册遵循先申请先注册为原则,管理认证机构要确保每一个域名的注册都是独一无二、不可重复的。 # 动态主机配置协议 DHCP 静态地址和动态地址应用场景 DHCP 地址租约 DHCP 租约生成过程 DHCP 地址租约更新 # Telnet 协议 Telnet是一个简单的远程终端协议(非加密、且简单),它也是因特网的正式标准。用户使用telnet客户端就可以连接到远程运行Telnet服务的设备(可以是网络设备例如:路由器、交换机,也可以是操作系统,比如Windows或Linux等),进行远程管理。 Telnet能将用户的键盘指令传到远地主机,同时也能将远地主机的输出通过TCP连接返回到用户屏幕。这种服务是透明的,因为用户感觉到好像键盘和显示器是直接连在远地主机上。因此,Telnet又称为终端仿真协议。 Telnet并不复杂,以前应用得很多。现在由于操作系统(Windows和Linux)功能越来越强,用户己较少使用Telnet了。不过配置Linux服务器和网络设备还是需要 Telnet 来实现远程管理和配置 # 远程桌面协议 RDP 现在Windows操作系统很少使用telnet进行远程管理了,更多是使用远程桌面进行远程管理。 Windows系统启用远程桌面,客户端使用远程桌面客户端(mstsc)进行连接。 它们之间使用RDP协议进行通信,RDP协议默认使用TCP的3389端口。 # http 协议、版本和网页 创建网页(准备创建网站、需要设计网页和安装Web服务器) 统一资源定位符URL 绝对路径和相对路径 创建Web站点 HTTP协议版本 HTTP请求报文和响应报文 HTTP响应报文: Cookie 通过代理服务器访问网站 # 文件传输协议 FTP FTP 是File Transfer Protocol(文件传输协议)的英文简称。用于Internet上的控制文件的双向传输。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。 在FTP的使用当中,用户经常遇到两个概念:“下载”(Download)和“上传”(Upload)。“下载”文件就是从远程主机拷贝文件至自己的计算机上;“上传”文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。 简单地说,支持FTP协议的服务器就是FTP服务器。 # 安装和配置邮件服务器  模拟整个互联网发送邮件的过程 发送电子邮件的协议 SMTP  接收电子邮件的协议 POP3 和 IMAP--------------------------------------              

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值