HTTP与HTTPS以及HTTP协议的请求头与响应头
HTTP与HTTPS
HTTP:超文本传输协议(HyperText Transfer Protocol),是互联网上应用最为广泛的一种网络协议,所有W3C文件必须遵守这个标准,设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法,但是它的协议传输方式是利用明文进行传输的,存在安全隐患。
HTTP协议连接方式:
- 客户端的浏览器首先要通过网络与服务器建立连接,该连接是通过 TCP 来完成的,一般 TCP 连接的端口号是80。 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URI)、协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和许可内容。
- 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容。
HTTPS:HTTPS是基于HTTP协议提高了安全性的版本,HTTPS提供了一个系列的加密+认证+完整性保护的操作,从而保证了数据在传输过程中的安全。而其安全基础是SSL 协议。
SSL协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。SSL 协议可分为两层:SSL 记录协议(SSL Record Protocol),它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL 握手协议(SSL Handshake Protocol),它建立在 SSL 记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
HTTP与HTTPS的区别:
1、HTTPS 协议需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(以前的网易官网是http,而网易邮箱是 https 。)
2、HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。
3、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)
HTTP请求头和响应头,请求方式及响应码
一段HTTP报文包含三部分:报文首部+空行+报文主体;报文首部又可划分为请求报文和响应报文。

请求报文包括: 请求行+请求头+空行+请求数据
请求报文
请求行
请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。
常用的请求方法:
GET:请求指定的页面信息
HEAD:类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头。
POST:向指定资源提交数据进行处理请求。数据被包含在请求体中。
GET和POST的区别:
GET:
- 请求参数会显示在地址栏中
- 参数长度有限制
- 不太安全
POST:
- 请求参数不会在地址栏中,会封装在请求体中
- 参数长度无限制
- 较为安全
请求头
Accept:浏览器通过这个头,告诉服务器它所支持的数据类型
Accept-Charset:浏览器通过这个头,告诉服务器它采用的字符集
Accept-Encoding:浏览器通过这个头,告诉服务器,它所支持的压缩格式
Accept-Language:浏览器通过这个头,告诉服务器,它所采用的语言
Host:浏览器通过这个头,告诉服务器,我想访问服务器哪台主机
If-Modified-Since:浏览器通过这个头,告诉服务器,它缓存数据时间是多少。
Referer:浏览器通过这个头,告诉服务器,我是从哪个网页点过来的(防盗链)
Connection:连接方式
响应报文
响应报文包含: 状态行+响应头+空行+请求数据
状态行
状态码
1xx:信息性状态码,接收的请求正在处理
2xx:成功状态码,请求正常处理完毕
- 200 OK:表示从客户端发来的请求在服务器端被正常处理了。
- 204 No Content:该状态码代表服务器接收的请求已经成功处理,但在返回的响应报文中不含实体的主体部分。
- 206 Partial Content:该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的请求。响应报文中包含由Content-Range指定范围的实体内容。
3xx:重定向状态码,需要进行附加操作以完成请求
- 301 Moved Permanently:永久性重定向。该状态码表示请求的资源已被分配了新的URI,以后应该使用现在资源所指的URI。
- 302 Found:临时性重定向。该状态码表示请求的资源已被分配了新的URI,希望用户本次能使用新的URI访问。
- 303 See Other:该状态码表示由于请求对应的资源存在着另外一个URI,应使用GET方法定向获取请求的资源。
- 304 Not Modified:该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发生请求未满足条件的情况后直接返回304。304状态码返回时,不包含任何响应的主体部分。304虽然被划分在3XX类别中,但是和重定向没有关系。(附带条件的请求时指采用GET方法的请求报文中包含If-Match、If-Modified-Since、If-Range等任一首部)
- 307 Temporary Redirect:临时重定向。该状态码与302 Found有着相同的含义。
4xx:客户端错误状态码,服务器无法处理请求
- 400 Bad Request:该状态码表示请求报文中存在语法错误。
401 Unauthorized:该状态码表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息。另外若之前已进行过1次请求,则表示用户认证失败。
403 Forbidden:该状态码表明对请求资源的访问被服务器拒绝了。未获得文件系统的访问授权,访问权限出现某些问题等情况都可能发生403。
404 Not Found:该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。
5xx:服务端错误状态码,服务器处理请求出错
500 Internal Server Error:该状态码表明服务器端在执行请求时发生了错误,也有可能是Web应用存在的Bug或某些临时的故障。
503 Service Unavailable:该状态码表明服务器暂时处于超负荷或正在进行停机维护,现在无法处理请求。
HTTP响应头
Location:这个头通常配合302状态码使用,它用于告诉浏览器你去找谁。
Server:告诉浏览器,服务器的类型
Content-Encoding: 服务器通过这个头,告诉浏览器,回送的数据采用的压缩格式。
Content-Length: 返回数据的长度
Content-Language: 返回数据的语言
Content-Type:这个头用于告诉浏览器,回送数据的类型
Last-Modified:这个头用于告诉浏览器,数据的最后修改时间
Refresh: :这个头用于控制浏览器定时刷新
Content-Disposition: 用于通知浏览器,以下载方式打开回送的数据
Transfer-Encoding: 用于通知浏览器,数据是以分块形式回送的
ETag: 缓存相头的头
Expires: 用于说明网页的失效时间,如果该值为一个<0的值,则服务器是通知浏览器不要缓存
Cache-Control: no-cache 通知浏览器不要缓存
感谢您的阅读,如果本篇文章对您有帮助,欢迎点赞,关注,您的阅读是我莫大的鼓励!