【深入HTTP协议】 -- 2019-08-09 12:11:34

目录

  • HTTP 请求
  • HTTP 响应

原文: http://106.13.73.98/__/80/

HTTP是(Hyper Text Transfer Protocol)超文本传输协议的缩写.

HTTP的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC.

RFC 1945定义了HTTP/1.0版本,其中最著名的就是RFC 2616,RFC 2616定义了今天普遍使用一个版本——HTTP 1.1

------->

HTTP协议(Hyper Text Transfer Protocol)超文本传输协议是用于从WWW服务器传输超文本到本地浏览器的传送协议.

它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等.

@

HTTP响应模型
·
HTTP协议永远都是客户端发起请求,服务器回送响应,如下图:

这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端.

HTTP工作流程
·
一次HTTP操作称为一个事务,其工作过程可分为四步:

  1. 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始.
  2. 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号.
    后边是MIME(声明文本信息)信息包括请求修饰符、客户机信息和可能的内容.
  3. 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码.
    后边是MIME信息包括服务器信息、实体信息和可能的内容.
  4. 客户端接收服务器所返回的信息并通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接.

·
如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,由显示屏输出.
对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了.
***

HTTP 请求

HTTP请求方式大全
序号 方法 描述
1 GET 请求指定的页面信息,并返回实体主体。
2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
5 DELETE 请求服务器删除指定的页面。
6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
7 OPTIONS 允许客户端查看服务器的性能。
8 TRACE 回显服务器收到的请求,主要用于测试或诊断。
9 PATCH 实体中包含一个表,表中说明与该URI所表示的原内容的区别。
10 MOVE 请求服务器将指定的页面移至另一个网络地址。
11 COPY 请求服务器将指定的页面拷贝至另一个网络地址。
12 LINK 请求服务器建立链接关系。
13 UNLINK 断开链接关系。
14 WRAPPED 允许客户端发送经过封装的请求。
15 Extension-mothed 在不改动协议的前提下,可增加另外的方法。
HTTP请求包括的内容

·
客户端连上服务器后,向服务器请求某个Web资源,称之为客户端向服务器发送了一个HTTP请求.
·
一个完整的HTTP请求包括的内容:一个请求行、若干消息头、实体内容.
·
如下图:

HTTP请求细节——请求头

·
请求行中的GET称之为请求方式,请求方式有:POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT,常用的有: GET、 POST
·
用户如果没有设置,默认情况下浏览器向服务器发送的都是GET请求,例如在浏览器直接输地址访问,点超链接访问等都是GET,用户如想把请求方式改为POST,可通过更改表单的提交方式实现.
·
不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上:如果请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:GET /mail/1.html?name=abc&password=xyz HTTP/1.1
·
GET请求的特点:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K.
·
如果请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,Post方式的特点:传送的数据量无限制.

HTTP请求细节——消息头

·
Accept
声明浏览器支持的数据类型
·
Accept-Charset
声明浏览器支持的字符集
·
Accept-Encoding
声明浏览器支持的压缩格式
·
Accept-Language
声明浏览器的语言环境
·
Host
声明浏览器要访问那台主机
·
If-Modified-since
声明浏览器缓存数据的时间
·
Referer
声明客户机是哪个页面来的,用于防盗链
·
Connection
浏览器通过这个头告诉服务器,请求完后是断开链接还是保持链接
·
X-Requested-with: XMLHttpRequest
代表通过ajax方式进行访问
·
User-Agent
请求载体的身份标识,浏览器标识
·
以上为HTTP请求中的常用消息头,如下图:

***

HTTP 响应

HTTP响应包括的内容

·
HTTP响应代表服务器向客户端回送的数据.
它包括:一个状态行、若干消息头、以及实体内容.

HTTP响应细节——状态行

·
状态行格式:
HTTP/1.1 200 OK HTTP版本号 状态码 原因叙述<CRLF>
·
状态码用于表示服务器对请求的处理结果.
状态码是一个三位的十进制数,响应状态码分为5类.

·
常见的HTTP状态码
·
100 客户端应继续发送请求
客户端应当继续发送请求,客户端应当继续发送请求的剩余部分.
或如果请求已经完成,忽略这个响应.
·
101 转换协议
在发送完这个响应的最后空行后,服务器将会切换到在Upgrade消息头中定义的那些协议.
只有在切换到新的协议更有好处的时候才应该采取类似的措施.
·
102 继续处理
由WebDAV(RFC 2518)扩展的状态码,代表请求将被继续执行.
·
200 请求成功
表示这条请求执行成功了.
处理方式:获得响应的内容,进行处理.
·
201 请求完成
表示这条请求执行完成了
结果是创建了新资源,新创建的资源的URL可在响应的实体中得到.
处理方式在爬虫中不会遇到.
·
202 请求被接受
请求被接受了,但处理尚未完成.
处理方式:阻塞等待.
·
204 服务器以实现请求
服务器已经实现了请求,但未返回新的信息.
如果客户端是用户代理,则无需为此更新自身的文档视图.
处理方式:丢弃.
·
300
该状态码不被HTTP/1.0的应用程序直接使用,只是作为3XX类型回应的默认解释,存在多个可用的被请求资源.
处理方式:若程序中能够处理,则进一步处理;若程序中不能够处理,则丢弃.
·
301 永久重定向
请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源.
处理方式:重定向到分配的URL,永久重定向.
·
302 临时重定向
请求到资源在一个不同的URL处临时保存.
处理方式:重定向到临时的URL,临时重定向.
·
304 请求的资源未更新
请求的资源未更新.
使用的是本地缓存文件(不会发送请求).
处理方式:丢弃.
·
400 非法请求
处理方式:丢弃.
·
401 未授权
处理方式:丢弃.
·
403 禁止
处理方式:丢弃.
·
404 没有找到
处理方式:丢弃.
·
500 服务器内部错误
服务器遇到了一个未曾预料的状况,导致它无法完成对请求的处理.
一般这个问题会在服务器端的源代码出现错误时出现.
即服务器问题,代码逻辑有问题.
·
501 服务器无法识别
服务器不支持当前请求需要的某个功能.
当服务器无法识别请求的方法时,将无法支持其对任何资源的请求.
·
502 错误网关
作为网关或代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应.

HTTP响应细节——常用响应头

·
Location
服务器通过这个头,来告诉浏览器跳到哪里
·
Server
声明服务器的型号
·
Content-Encoding
服务器通过这个头,告诉浏览器,数据的压缩格式
·
Content-Length
声明服务器回送的数据的长度
·
Content-Language
服务器通过这个头,告诉浏览器语言环境
·
Content-Type
声明服务器回送的数据的类型
·
Refresh
服务器通过这个头,告诉浏览器定时刷新
·
Content-Disposition
服务器通过这个头,告诉浏览器以下载方式打开数据
·
Transfer-Encoding
服务器通过这个头,告诉浏览器数据是以分块方式回送的
·
Expires: -1
控制浏览器不要缓存
·
Cache-Control: no-cache
·
Pragma: no-cache


更多:http://tools.jb51.net/table/http_header

原文: http://106.13.73.98/__/80/

原文地址:https://www.cnblogs.com/gqy02/p/11326450.html

时间: 2024-11-10 10:27:00

【深入HTTP协议】 -- 2019-08-09 12:11:34的相关文章

2019.08.09考试报告

写在前面:穿校服真心有用啊,能加rp.说实话考的还不错,又回到了原来的状态了. (为了防止Deepinc认为博主能6分钟敲完一套对拍+正解,我还是把考试时间写清楚点吧.) 0h: 贪吃了一个雪糕导致迟到了...迎面撞上波波... 0-1h: T1打了一个错解,对拍刚开始没问题,便去看T2,看到一半的时候对拍n,m,k<=30出现了负数答案, 只好回来改T1,发现自己的式子是假的,多减了许多东西,便想到了容斥这个操作,10分钟推了推式子, 过了刚才出错了的数据,状态倍增. 1-2h: 打了T2的贪

2019 08 09 函数扩展

可变长参数 可变长参数:指的是在调用函数时,传入的参数个数可以不固定 调用函数时,传值的方式无非两种,一种是位置实参,另一种是关键字实参,因此形参也必须得有两种解决方法,以此来分别接收溢出的位置实参(*)与关键字实参(**) 一.可变长形参之* 形参中的会将溢出的位置实参全部接收,然后存储元组的形式,然后把元组赋值给后的参数.需要注意的是:*后的参数名约定俗成为args. def sum_self(*args): res = 0 for num in args: res += num retur

2019/08/25 leetcode

2019/08/25: L230, L226, L18, L234, L23 1. L230 Kth smallest element in BST 借助 Stack 或 LinkedList inorder traveresal, LinkedList会更快 ArrayList, LinkedList, Vector, Stack  https://blog.csdn.net/iteye_11495/article/details/82618748 2. L226 Invert Binary

Bootstrap 3.2.0 源码试读 2014/08/09

第一部分 normalize.css 104至110行 code,    /* 编辑代码 */ kbd,    /* 键盘输入的文本 */ pre, samp {    /* 范例,sample的简写 */   font-family: monospace, monospace;    /* 这个地方应该是写错了,第二字体应该是serif */   font-size: 1em; } 设置字体的大小为1em,字体为monospace. 111至119行 button, input, optgro

MFC DAY06 07 08 09

一 切分窗口 1 类型 动态切分-程序在运行时,由用户拖动分隔条动态的切分窗口. 每一个视图窗口使用的是相同的视图类. 静态切分-在编码创建时已经完成窗口切分.每一个视图窗口 可以使用不同的视图类. 2 相关类 CSplitterWnd类-完成窗口切分的类. #include <afxext.h>//扩展窗口的头文件 3 使用 3.1 动态切分 3.1.1 在CMainFrame中定义切分窗口对象 3.1.2 通过使用CCreateContext结构指定使用的视图类 3.1.3 创建动态切分

2014年11月12~11月14日,杨学明老师《软件测试管理》内训在北京某银行软件中心成功举办!

2014年11月12~11月14日,北京天气呈现少有的APEC蓝,著名研发管理专家杨学明老师为某银行提供了三天的内训服务,此次培训由两部分组成,第一部分是<软件测试管理高级实务>.第二部分是<软件测试需求分析和测试设计>,三天的培训非常紧张,包括老师讲解,案例演练,专题研讨,过程衔接非常紧密,课堂气氛也比较轻松,来自该银行核心系统和网银两个事业部的同事参加了此次培训,包括开发,需求,测试和维护人员等,课程结束后,举行了考试,大家对三天的学习进行回顾和总结,并准备把这两天学习到知识结

tomcat通过conf-Catalina-localhost目录发布项目详解 摘自:http://www.cnblogs.com/iyangyuan/archive/2013/09/12/3316444.html

Tomcat发布项目的方式大致有三种,但小菜认为通过在tomcat的conf/Catalina/localhost目录下添加配置文件,来发布项目,是最佳选择. 因为这样对tomcat的入侵性最小,只需要新增一个配置文件,不需要修改原有配置:而且支持动态解析,修改完代码直接生效(修改配置除外). 但是网上关于这种方法的介绍很简单,小菜来补充一下. 1.直接在eclipse中添加一个server,添加过程中指明tomcat的路径即可. 2.在tomcat服务器的conf\Catalina\local

ubuntu 12.04 安装 codeblock 12.11

一: Ubuntu  14.04版已经发布了,但本人还是12.04版的,主要是笔记本是双系统,担心升级之后造成不必要的麻烦.所以还在用12.04.在Linux环境下的 C/C++ 开发IDE中,Codeblocks是一个很不错的工具.  现在最新版的是Codeblocks 13.12了.  但我在安装Codeblocks 14.12出错了.(两种安装方法:1. 下载Codeblocks 13.12 包,然后 在命令行安装   2.直接在Ubuntu软件中心安装.都失败了.参考http://qtl

12.10 Nginx访问日志 12.11 Nginx日志切割 12.12 静态文件不记录日志和过期

12.10 Nginx访问日志 [[email protected] vhost]# vim test.com.conf除了在主配置文件nginx.conf里定义日志格式外,还需要在虚拟主机配置文件中增加access_log /tmp/test.com.log martin;这里的combined_realip就是在nginx.conf中定义的日志格式名字 [[email protected] vhost]# /usr/local/nginx/sbin/nginx -tnginx: the co