HTTP协议小结

概述

HTTP超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议,自 1990 年起,HTTP 就已经被应用于 WWW 全球信息服务系统。它是无状态协议,即对于事物的处理没有记忆能力,HTTP 是一种请求/响应式的协议。一个客户机与服务器建立连接后,发送一个请求给服务器;服务器接到请求后,给予相应的响应信息。下面将从一下几个方面对Http协议做下总结

【1】HTTP报文

【2】HTTP状态码

【3】HTTP缺陷及改进(HTTPS)

【4】常见问题


1、HTTP报文

用于HTTP交互的信息被称为HTTP报文,报文本身是由多行(用CR+LF作换行符)数据构成的字符串,报文主要分为报文首部报文主体


通常报文分为请求端报文和响应端报文,分别对应着客户端和服务器端,具体结构如下图所示

这里需要说明一下:

【1】请求行:包含用于请求的方法,请求URI和HTTP的版本

          状态行:表明响应结果的状态码,原语原因和HTTP版本

【2】首部字段

一般包含4种首部:通用首部,请求首部,响应首部和实体首部

【3】其他

可能包含HTTP的RFC中未定义的首部如Cookie等


2、HTTP状态码

状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果,借助于状态码就可以知晓服务器是否做了正确的请求还是错误。

通常状态码的类别可以分为以下5类:

下面逐一介绍一些重点的

2.1 2XX系列

2XX响应结果表明请求被正常处理了

【1】200 OK

表示从客户端发来的请求在服务器端被正常处理了

【2】204 No Content

服务器接收到的请求处理成功但是没有资源可以返回,即返回的响应报文中不含实体的主体部分,另外也不允许返回任何实体的主体,一般浏览器显示页面也不发生更新

【3】206 Partial Content

表示客户端进行了范围的请求,服务器成功执行了,在响应报文中包含Content-Range指定的范围的实体内容


2.2 3XX系列

3XX响应结果表明浏览器需要执行某些特殊的处理以正确处理请求

【1】301 Moved Permanently

永久性重定向。该状态码表明请求资源已经被分配了新的URI,以后都应该使用资源现在所指的URI

【2】302 Found

临时重定向。该状态码表示所请求的资源已经被分配了新的RUI,希望用户(本次)能够使用新的URI访问

【3】303 See Other

该状态码表明由于请求对应的资源存在着另一个URI,应该使用GET方法定向获取请求的资源


Note:301,302,303响应状态码返回时,几乎所有浏览器都会把post改成get,并删除请求报文内的1主体,之后请求会自动重发


【4】304 Not Modified

表示客户端附带条件的请求时,服务器找到资源但是未能满足其条件的情况。该状态码返回不包含任何响应的主体部分。304虽然划分再3XX中,但是和重定向没啥关系

【5】307 Temporary Redirect

临时重定向。该状态码跟302 Found有着相同含义,但是不会要求从POST变为GET

2.3 4XX系列

4XX系列表明客户端是发生错误的原因所在

【1】400 Bad Request

表明请求报文中存在语法错误

【2】401 Unauthorized

表示发送的请求需要通过HTTP的认证(BASIC认证或者DIGEST认证),若之前已经发起过一次请求,则表明认证失败

【3】403 Forbidden

表明请求资源被服务器拒绝。通常是由于未获取访问授权,访问权限问题等

【4】404 Not Found

表明服务器无法找到请求的资源,也可以在服务器拒绝请求但是不想给出理由时使用该状态码

2.4 5XX系列

5XX系列表明服务器本身出错

【1】500 Internal Sever Error

表明服务器在执行请求时发生了错误,也有可能是WEB应用存在的bug或者某些临时的故障

【2】503 Service Unavailable

表明服务器暂时处于超负荷或者正在进行停机维护,无法处理请求


3、HTTP缺陷及改进(HTTPS)

3.1、HTTP主要有以下缺陷



3.2、改进

HTTPS = HTTP+加密+认证+完整性保护

HTTPS 并非新的协议而是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议替代而已,通常HTTP直接和TCP通信,使用SSL时则演变为先和SSL通信,再由SSL和TCP通信,简而言之,HTTPS就是身披SSL协议的外壳的HTTP

其中HTTPS采用的是混合加密机制:共享秘钥和公开秘钥加密并用的混合加密机制,如下图



4、常见问题

4.1 http中post和get的区别

1.GET请求的数据会附在URL之后(就是 把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,
 POST把提交的数据则放置在是HTTP包的包体中。因此POST的安全性要比GET的安全性 高

2."GET方式提交的数据最多只能是1024字节,理论上POST没有限制,可传较大量的数据

4.2 http1.0和http1.1的区别

这个问题比较大,通常集中在长连接,这篇博文说的更加清楚

详细区别

4.3  浏览器输入一个 url到服务器处理整个过程

   1)浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址;
   2)解析出IP地址后,根据该IP地址和默认端口80,和服务器建立TCP连接;
   3)浏览器发出读取文件(URL中域名后面部分对应的文件)的HTTP请求,该请求报文作为TCP三次握手的第三个报文的数据发送给服务器;
    4)服务器给出相应,把对应的html文本发送给浏览器;
    5)释放TCP连接;
    6)浏览器将该文本显示出来。













(1) HTTP超文本传输协议用于定义web页面(超文本)在网络上的交互方式的应用层协议,使用客户/服务器的工作方式。HTTP协议定义了web客户端(浏览器)如何向web站点请求web网页以及web服务器如何将web页传送给客户机。当用户请求一个页面时,浏览器会向web服务器发出对该页及其引用的相关对象的HTTP请求报文,服务器响应这些请求报文,生成HTTP响应报文,并将请求的对象附在HTTP响应报文后发送给客户端。 (2) 由于网页文档的传输需要可靠性的保证,所以HTTP协议使用TCP协议,TCP协议是一个面向连接的协议,在通信时需要建立连接,通信结束要释放连接,TCP建立连接时需要三次握手,提供可靠的数据传输,HTTP协议默认端口为80. (3) HTTP协议包括HTTP1.0:RFC1945和HTTP1.1:RFC 2068.HTTP1.1兼容HTTP1.0。HTTP1.0是采用非持续连接和非流水线作业方式,而HTTP1.1采用持续连接和流水线作业方式。 (4) Web缓存的进一步讨论,保证web缓存代理服务器缓存页面能够和web服务器的最新页面一致的方法。 (5) HTTP协议的无状态性:服务器无法通过HTTP协议记录用户的登录信息。使用Cookie保存信息。 (1) 打开wireshark开始抓包,然后上网至江西师大教务在线网(www.jxnu.edu.cn),连接后停止(stop)抓包。设置过滤规则:udp.port==53||tcp.port==80.(HTTP协议默认使用传输层TCP协议的80端口),考虑到我的电脑未能连网,所以选择老师抓好的包做实验分析。 (2) 分析HTTP协议报文。 (2) 第一阶段:TCP建立连接阶段。第三帧是web客户端(即浏览器,源IP地址为192.168.0.250)发给web服务器端(目标IP地址为218.65.113.46)的TCP连接的第一次握手(SYN)。第四帧是web服务器端与web客户端的TCP连接的第二次握手(SYN,ACK)。第五帧是浏览器与web服务器的TCP连接的第三次握手(ACK),此时TCP连接建立。
好的,以下是我给出的 Android Http请求实验小结: Android Http请求实验小结 在Android中进行网络请求,可以使用HttpURLConnection或HttpClient等方式。其中,HttpURLConnection是Android SDK提供的基于HTTP协议的网络请求API,HttpClient则是Apache提供的开源网络请求API,但在Android 6.0及以上版本中已被标记为过时,推荐使用HttpURLConnection。 HttpURLConnection的使用步骤: 1.创建URL对象,指定请求的URL地址。 2.调用URL对象的openConnection()方法,获取HttpURLConnection对象。 3.设置HttpURLConnection的请求方法、连接超时时间、读取超时时间等属性。 4.如果需要向服务器发送参数,可以通过HttpURLConnection对象的输出流将参数写入请求体中。 5.调用HttpURLConnection对象的connect()方法,建立与服务器的连接。 6.读取服务器返回的数据,可以通过HttpURLConnection对象的输入流获取服务器返回的数据。 7.关闭HttpURLConnection对象和输入流、输出流等资源。 HttpClient的使用步骤: 1.创建HttpClient对象。 2.创建HttpGet或HttpPost等请求对象,指定请求的URL地址和请求参数等信息。 3.执行请求,获取服务器返回的HttpResponse对象。 4.解析HttpResponse对象,获取服务器返回的数据。 5.关闭HttpClient对象和HttpResponse等资源。 需要注意的是,在Android 9.0及以上版本中,默认禁止应用程序使用非加密的流量进行网络请求,需要在AndroidManifest.xml文件中添加以下代码: ``` <application android:usesCleartextTraffic="true"> ... </application> ``` 以上是Android Http请求实验小结,希望对您有所帮助。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值