小叙http协议

随着互联网的普及,特别是移动互联网的到来,网络在其中承担了重要的角色,今天为大家讲解http协议。

小叙http协议

wiki OSI(网络七层模型)

OSI(Open System Interconnection)是一个开放性的通信系统互连参考模型,该模型将网络通信的工作分为七层,分别是: 物理层数据链路层, 网络层传输层会话层,表示层应用层
① 物理层: 作为OSI模型中最低的一层,为传输数据所需要的数据链路提供服务,也就是说,物理层确保原始数据能够在各种物理媒介上传输,常见协议有: Bluetooth物理层,USB物理层等。
② 数据链路层: 作为OSI模型的第二层,位于物理层与网络层之间, 常见的数据链路层协议有:异步传输模式,帧中继等。
③ 网络层: 作为OSI模型的第三层,网络层提供路由和寻址的功能,使两终端系统能够互连且决定最佳路径,并具有一定的拥塞控制和流量控制的能力,TCP/IP协议体系中的网络层功能由IP协议规定和实现,也称为IP层。
④ 传输层: 该层协议为应用程序提供端到端之间的通信服务,它提供面向连接的数据流支持,可靠性,流量控制,多路复用等功能,在OSI模型中称为第4层(L4),最著名的TCP/IP传输协议为传输控制协议,而无连接的用户数据报协议(UDP)用于简单消息传输。
⑤ 会话层: 位于OSI模型的第5层,主要为两个会话层实体进行会话(Session),而进行的对话连接的管理服务。会话层为客户端的应用程序提供了打开,关闭和管理会话的机制。会话层常见的协议有:RPC(远程过程调用)RTCP(实时传输控制协议)。
⑥ 表示层: 为不同终端的上层用户提供数据和信息正确的羽凡表示变换方法。 如文本文件的ASCII格式或者数字的1S或2S补码形式。具有表示层功能的协议有: HTTP/HTML,FTP,Telnet等。表示层中最常见的应用场景为:数据语法转换,语法表示,连接管理,数据处理(数据加解密,数据解压缩,数据编解码)。
⑦ 应用层: 作为OSI模型的第七层,应用层直接和应用程序接口并提供常见的网络应用服务,也向表示层发出请求。应用层常见的协议例子有:FTP,DHCP(动态主机配置协议),HTTP,SSH等。

http请求URL详解

对于用户来说,通过在地址栏通过输入网址,则能展示网页,却不知道在这整个过程中发生了什么,现在为大家讲解一些http请求中URL的一些知识,以下列URL为例:http://www.baidu.com?key=name&fname=zz

public static void main(String[] args) {
        try {
            URL url = new URL("http://www.baidu.com?key=name&fname=zz");
            System.out.println("authority :" + url.getAuthority()); 
            System.out.println("query :" + url.getQuery());
            System.out.println("userInfo :" + url.getUserInfo()); 
            System.out.println("host :" + url.getHost()); 
            System.out.println("getProtocol :" + url.getProtocol());
            System.out.println("getPath :" + url.getPath()); 
            System.out.println("getRef :" + url.getRef());
            System.out.println("toExternalForm :" + url.toExternalForm());
            System.out.println("getFile :" + url.getFile()); 
            System.out.println("getDefaultPort :" + url.getDefaultPort()); 
            System.out.println("getPort :"+url.getPort());
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }

执行后的结果为:

authority :www.baidu.com  
query :key=name&fname=zz  
userInfo :null  
host :www.baidu.com  
getProtocol :http  
getPath :  
getRef :null  
toExternalForm :http://www.baidu.com?key=name&fname=zz  
getFile :?key=name&fname=zz  
getDefaultPort :80  
getPort :-1

这里需要注意的是: 如果访问的URL为https://www.baidu.com?key=name&fname=zz,其结果为:

authority :www.baidu.com  
query :key=name&fname=zz  
userInfo :null  
host :www.baidu.com  
getProtocol :https  
getPath :  
getRef :null  
toExternalForm :https://www.baidu.com?key=name&fname=zz  
getFile :?key=name&fname=zz  
getDefaultPort :443  
getPort :-1

通过上述结果,我们可以查看到:Protocol(协议的不同),DefaultProt(默认端口)不同,也为我们更加深刻的理解URL组成:
URL由: Protocol(协议)+Host(主机)+Port(端口)+Query组成。
https://www.baidu.com?key=name&fname=zz: Protocol(协议)为:https 默认端口为:443。
http://www.baidu.com?key=name&fname=zz:Protocol(协议)为:http 默认端口为:80。

常见HTTP状态码

HTTP状态码(HTTP Status Code)是用于表示网页服务器HTTP响应状态的3位数字代码,我们可以通过服务器响应的状态码,来知晓请求的状态。常见的状态码如下所述:
1xx消息 : 该类型状态码,表示请求已经被接受,需要继续处理,这类相应的知识临时的响应,只包含状态行和某些可选的响应头信息,并以空行结束,一般情况下(某些试验条件除外),服务器不会向客户端发送1xx响应,常见的有:
100(Continue)
101(Switching Protocols)
102(Processing)表示处理将被继续执行。
2xx消息: 这类型的状态码,代表请求已成功被服务器接收,理解,并接受。常见的状态码有:
200(OK):请求已成功,请求所希望的响应头或数据体响应返回。
201(Created): 请求已被实现,而且有一个新的资源已经依据请求的需要而创建,且其URI已经随Location头信息返回。假如需要的资源无法及时创建的话,应当返回’202 Accepted’。
202(Accepted): 服务器已接受请求,但尚未处理,正如它可能被拒绝一样,最终该请求可能会也可能不会被执行。
3xx消息(重定向):主要表示该请求已被服务器接收,服务器有多个可选择的URL或者链接,常见的状态码有:
300(Multiple Choices):被请求的资源有一系列可供选择的回馈信息,用户或者浏览器能够自行选择一个首选地址进行重定向。
301(Moved Permanently):被请求的资源已永久移动到新位置。
302(Found):请求的资源现在临时从不同的URI响应请求,由于这样的重定向是临时的。客户端应当继续向原有地址发送以后的请求。
4xx消息(客户端):这类状态码代表了客户端请求存在某种错误,妨碍了服务器的处理。常见的状态码有:
400(Bad Request): 由于包含语法错误,当前请求无法被服务端识别。未修改之前,不应该重复提交。
401(Unauthorized): 当前请求需要用户验证。
402(Payment Required): 预留状态码,暂时没使用到。
403(Forbidden): 服务器已经理解请求,但是其拒绝请求它。
404(Not Found): 资源未找到,请求的资源未在服务器中发现。
405(Method Not Allowed):请求行中指定的请求方法不能被用于请求相应的资源。
5xx消息(服务端):该类状态码代表了服务端在处理请求过程中有错误或者异常状态发生。常见状态码有:
500(Internal Server Error):服务端发生了未曾预料的状况。导致它无法完成请求。
501(Not Implemented):服务器不支持当前请求所需要的某个功能。
502(Bad Gateway):作为网关或者服务器尝试执行请求时,从上游服务器接收到无效的响应。
503(Service Unavailable):由于临时的服务器维护或者过载导致不能接受处理该请求,这个状态是临时的,并且在一段时间之后,会进行恢复。
504(Gateway Timeout):服务器在执行请求时,请求超时。
505(HTTP Version Not Supported):服务器不支持,或者拒绝支持在请求中使用的HTTP版本。
更多HTTP状态码请参考: https://zh.wikipedia.org/wiki/HTTP状态码

HTTP&HTTPS的异同

HTTP已经谈到了,现在谈谈HTTPS,HTTPS开发的主要目的是:为了提供对网络服务器的身份认证,保护交换数据的隐私与完整性。该协议最初由网景(Netscape)公司在1994年首次提出,随后扩展到互联网上。
区别:
① URL&默认端口不同: HTTP的URL由”http://"起始且默认使用端口80端口,HTTPS的URL由"https://"起始且默认使用端口为443。
② 安全性不同: HTTP是不安全的,攻击者能够通过监听或者攻击可以获取用户的一些敏感信息。HTTPS的设计就是防止监听或者攻击,在报文中的任何东西都被加密,包括所有报头。
HTTPS常见应用场景: 敏感账户,支付类应用,资金类应用。

小结

上面整理了理论性知识OSI模型,对HTTPS请求中url的一些详解,也列出了一些常见的HTTPS状态码,对于需要熟悉网络模块,编写网络模块的一些必备基础知识,只有巩固了基础,才能高筑大楼。