HTTP那些不得不说的事
Posted 聊点技术
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP那些不得不说的事相关的知识,希望对你有一定的参考价值。
HTTP
HTTP使用统一资源描述符(Uniform Resource Identifiers,简称URI)来传输数据和建立连接,URI用来唯一的标识资源。万维网上每种可用的资源都是用一个URI来定位,一般URI由三部组成:
访问资源的命名机制;
存放资源的主机名;
资源自身的名称,由路径表示,着重强调于资源。
URL统一资源定位符
-
协议; -
存有该资源的主机IP地址和端口号; -
主机资源的具体地址,目录和文件名等。
HTTP工作在浏览器/服务器(B/S)架构上,浏览器通过URL向HTTP服务端发送请求。Web服务器根据接收到的请求,向浏览器发送响应信息。
-
无连接的:每次连接只处理一个请求,服务器处理客户的请求向浏览器发送响应,在收到客户的应答后,就会断开连接。 -
媒体独立的:只要浏览器和服务器知道如何处理数据内容,任何类型的数据都能够通过HTTP传送。 -
无状态的:同一个客户第二访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同,服务器并不记得曾经访问过的客户,也不记得为该客户曾经服务过多少次。
HTTP1.0版本中每一个请求和响应都会触发一次TCP的建立和断开,HTTP1.1增加了keep-alive机制,允许在一个TCP连接上发送多个请求和响应,极大的减少了TCP连接的建立和断开操作,提升效率。
HTTP有两类报文:请求报文和响应报文。客户端请求报文包括:请求行,请求头部和请求数据。
请求行:请求方法,资源路径URL,协议版本;
请求头部:域名,用户代理,Cookie等信息;
请求数据:http请求的数据;
服务器响应报文包括:状态行,消息报头和响应正文。
方 法 |
说 明 |
GET | 请求URL所标识的信息。 |
POST | 向服务器提交数据进行处理请求(如提交表单或上传文件)。 |
PUT |
传输文件。在指定的URL下存储一个文档。 |
HEAD |
请求读取由URL所标识的信息的首部。 |
DELETE |
请求服务器删除指定的页面。 |
CONNECT |
使用 SSL/TLS把通信内容加密后经网络隧道传输。 |
LINK |
建立和资源之间的联系。 |
UNLINK |
断开连接关系。 |
1** | 指示信息,如请求收到了或正在进行处理。 |
2** | 成功,成功接收并处理。 |
3** | 重定向,要完成请求还需要进一步的操作,把请求访问的url重定向到其他目录。 |
4** | 客户端错误,如请求中包含错误的语法或无法完成请求。 |
5** | 服务器错误,服务器在处理请求时发生了错误。 |
常见的HTTP状态码:
200---请求成功 | 400---客户端请求存在语法错误 |
301---资源(网页等)被永久转移到其它URL | 401---客户端请求没有经过授权 |
302---请求临时重定向 | 403---客户端的请求被服务器拒绝,一般为客户端没有访问权限 |
304---请求被重定向到客户端本地缓存 | 404---请求的资源(网页等)不存在 |
404---请求的资源(网页等)不存在 | 503---服务端发生临时错误。处于超负载,或正在停机维护,无法处理请求 |
-
GET用于获取资源,POST用于传输实体主体; -
GET参数以查询字符串出现在URL中,POST参数存储在报文体中; -
GET方法是安全的,POST方法不安全; -
GET方法可缓存,POST方法多数情况下不可缓存; -
GET产生一个TCP数据包;POST产生两个TCP数据包。 -
GET提交的数据大小有限制(因浏览器对URL的长度有限制),POST方法提交的数据没有限制。
安全的HTTP方法不会改变服务器状态,即方法只进行读取操作。GET方法是安全的,而POST不是,因POST是上传内容,上传成功后,服务器可能把上传的内容存储到数据库,因此状态也就发生了改变。安全的方法有:HEAD、OPTIONS等;不安全的方法有:PUT、DELETE等。
幂等性
-
请求报文的HTTP方法本身是可缓存的,包括GET和HEAD,但PUT和DELETE不可缓存,POST在多数情况下不可缓存的; -
响应报文的状态码是可缓存的; -
响应报文的Cache-Control首部字段没有指定不进行缓存。
TCP数据包数量
Cookie用途
-
会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息); -
个性化设置(如用户自定义设置、主题等); -
浏览器行为跟踪(如跟踪分析用户行为等)。
创建过程
服务器发送的响应报文包含Set-Cookie首部字段,浏览器得到响应报文后把Cookie内容保存到本地。浏览器之后对同一个服务器发送请求时,会取出Cookie信息并将Cookie数据一并发送给服务器。
会话期Cookie:浏览器关闭之后会被自动删除,仅在会话期内有效。
持久性Cookie:指定特定的过期时间或有效期后就成了持久性的Cookie。
Session
Session用于将用户信息存储在服务器,会更为安全。
安全套接层(Secure Socket Layer,简称SSL)的提出是为了保障在互联网上安全的传输数据,利用加密技术,确保数据在传输过程中不会被截取。SSL位于TCP与各种应用层协议之间,为数据通讯提供安全支持。
传输层安全协议(Transport Layer Security,简称TLS)是SSL标准化之后的名称,可以将SSL和TLS视为处于不同阶段的一个东西。TLS位于HTTP和TCP之间,内部包含TLS握手协议、TLS记录协议。
直接使用HTTP会带来很大的安全性问题,主要是如下原因导致:
HTTP使用明文进行通信,内容可能会被窃听;
不验证通信方的身份,通信方的身份有可能遭遇伪装;
无法证明报文的完整性,报文有可能遭篡改。
HTTPS通过将HTTP和SSL通信,再用SSL和TCP通信实现了传输过程中的加密。通过使用SSL,HTTPS具有了加密(防窃听)、认证(放伪装)和完整性保护(防篡改)的功能。
-
HTTP的URL以http://开头,HTTPS的URL以https://开头; -
HTTP使用明文传输信息,HTTPS会对传输的数据进行加密; -
HTTP使用80端口,HTTPS使用443标准; -
HTTP不需要证书,HTTPS需要CA机构颁发的SSL证书。
HTTPS中集合了对称加密和非对称加密,将对称密钥使用非对阵加密算法进行加密,保证传输对称密钥时的安全性,之后使用对称密钥加密解密进行通信来保证通信过程的效率。
-
浏览器读取证书中的证书所有者、有效期等信息; -
查找操作系统中已内置的受信任的CA,与服务器发来的证书中的CA比对,校验证书是否为合法机构颁发; -
如果找不到,浏览器会进行提示,指示服务器发来的证书是不可信任的; -
如果找到,浏览器会取出操作系统中CA的公钥,然后将服务器发来的证书内包含的签名进行解密; -
接着,浏览器使用hash算法(与服务器相同的hash算法)计算出服务器发来的证书的hash值,将这个计算的hash值与证书中解密后的签名进行对比; -
对比结果一致,则证明服务器发来的证书合法,没有被劫持。浏览器可以读取证书中的公钥,用于后续加密; -
客户端生成一个随机值当作密钥,然后用公钥加密该密钥,将该密钥传送给服务端; -
服务端收到后,使用私钥解密得到客户端传来的用于对称加密的密钥。
扫描二维码
获取更多精彩
聊点技术
以上是关于HTTP那些不得不说的事的主要内容,如果未能解决你的问题,请参考以下文章