欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HTTP基础知识

程序员文章站 2022-07-10 14:14:21
...

什么是HTTP

HTTP:超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。
HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。
客户端(user agent)通过使用Web浏览器、网络爬虫等工具,发起一个到服务器上指定端口(默认端口为80)的HTTP请求。
应答的服务器上存储着(一些)资源,比如HTML文件和图像,(我们称)这个应答服务器为源服务器(origin server)。

通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。
HTTP服务器则在那个端口监听客户端发送过来的请求。
 一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP/1.1 200 OK",和(响应的)消息等。
消息的消息体可能是请求的文件、错误消息、或者其它一些信息。

HTTP请求方法

  • GET:从服务器获取一份web资源,需要服务器发送
  • HEAD:只从服务器获取文档的首部
  • POST:向服务器发送需要处理的数据(一般是表单提交)
  • PUT:与GET相反,向服务器发送资源;服务器通常需要存储此资源(位置:通常为文件系统)
  • DELETE:删除URL指向的资源
  • OPTIONS:探测服务器端对请求的URL所支持使用的请求方法
  • TRACE:跟一次请求中间所经过的代理服务器、防火墙或网关
  • PTATCH:是对 PUT 方法的补充,用来对已知资源进行局部更新 。
  • CONNECT:HTTP/1.1 中预留给能够将连接改为通道方式的代理服务器。通常用于 SSL 加密服务器的链接(经由非加密的 HTTP 代理服务器)。

HTTP中GET与POST的区别

HTTP状态码

  • 1XX:提示信息—表示请求已接收,继续处理。
  • 2XX:成功,操作被成功接收并处理。
  • 3XX:重定向,需要进一步的操作以完成请求。
  • 4XX:客户端错误,请求包含语法错误或无法完成请求。
  • 5XX:服务器错误,服务器在处理请求的过程中发生了错误。

常用状态码:

  • 100:继续。客户端应继续其请求。
  • 101:切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议。
  • 200:请求成功。一般用于GET与POST请求。
  • 204:表示请求成功,但响应报文不含实体的主体部分。
  • 301:永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替。
  • 302:临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI。
  • 303:查看其它地址。与301类似。使用GET和POST请求查看。
  • 304:未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源。
  • 400:客户端请求的语法错误,服务器无法理解。
  • 401:认证失败
  • 403:服务器理解请求客户端的请求,但是拒绝执行此请求。
  • 404:服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面。
  • 405:客户端请求中的方法被禁止。
  • 500:服务器内部错误,无法完成请求。
  • 502:作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应。
  • 503:由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中。
  • 504:充当网关或代理的服务器,未及时从远端服务器获取请求。

HTTP消息结构

客户端请求消息:

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。

实例:

GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.baidu.com
Accept-Language: en, mi

解释:

起始行 :<方法>  <URL>  <协议版本>
请求首部 :headers
主体 :请求的内容(包含客户端请求服务器的数据)

通用首部:在报文中添加的附加信息,用于描述主体
	Connection: 定义C/S之间关于请求、响应的有关选项
	Connection: keep-alive
	Cache-Control: 缓存控制
	Via: 显示了报文经过的中间节点

请求首部:
	Client-IP:客户端IP
	Host: 请求的主机
	Referer: 指明了请求当前资源原始资源的URL
	User-Agent: 用户代理
	Accept首部:
	Accept: 指明服务器能发送的媒体类型
	Accept-Charset: 支持使用的字符集
	Accept-Encoding: 支持使用的编码方式
	Accept-Language: 支持使用语言

条件式请求:
	Expect: 告诉服务器能够发送哪些媒体类型
	If-Modified-Since: 是否在指定时间内修改过此资源
	If-None-Match:如果提供的实体标记与当前文档的实体标记不符,就获取此文档

跟安全相关请求:
	Authorization: 客户端提交给服务器的认证数据,如帐号和密码
	Cookie: 客户端发送给服务器身份标识

服务器响应消息:

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

实例:

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

解释:

 响应报文的语法格式
        起始行 :<协议版本>  <响应状态码>  <原因短语>
        响应首部:headers
        主体:响应的内容

    响应状态码
        100-199   信息提示
        200-299   成功状态码
        300-399   重定向
        400-499   客户端错误
        500-599   服务器错误
        401:认证失败
        404:找不到请求的资源
        403:对资源没有访问权限

    响应首部
        Date:消息产生的时间
        Age: 响应持续时间
        Server: 向客户端说明自己的程序名称和版本
        ETage:不透明验证者
        Location:URL备用的位置
        Content-Length:实体的长度
        Content-Tyep:实体的媒体类型
        协商首部:
        ary: 首部列表,服务器会根据列表中的内容挑一个最适用的版本发送给客户端
        Accept-Ranges: 对当前资源来讲,服务器所能够接受的范围类型
        跟安全相关:
        WWW-Authentication:质询,即要求客户提供帐号和密码
        Set-Cookie:服务器端在某客户端第一次请求时发送令牌

《图解HTTP》——HTTP首部。

HTTPS

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

HTTP和HTTPS的区别

  • HTTPS更加安全,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议的信息明文传输安全。
  • HTTPS 需要到 CA 申请证书,一般免费证书很少,需要交费。
  • 端口号不同:HTTP默认端口号80,HTTPS默认端口号443。
  • 状态不同:HTTP的连接很简单,是无状态的。而HTTPS协议是SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全;