http请求

一次完整的HTTP请求过程

拥有回忆 提交于 2020-02-27 21:55:17
当我们在浏览器的地址栏输入 www.baidu.com ,然后回车,回车这一瞬间到看到页面到底发生了什么呢? 以下过程仅是个人理解: 域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户 来源: CSDN 作者: 木鱼僧 链接: https://blog.csdn.net/fastjack/article/details/104544591

nginx的请求接收流程(二)

一世执手 提交于 2020-02-27 20:49:12
在ngx_http_process_request_line函数中,解析完请求行之后,如果请求行的uri里面包含了域名部分,则将其保持在请求结构的headers_in成员的server字段,headers_in用来保存所有请求头,它的类型为ngx_http_headers_in_t: [cpp] view plain copy <span style= "font-size: 18px; "> typedef struct { ngx_list_t headers; ngx_table_elt_t *host; ngx_table_elt_t *connection; ngx_table_elt_t *if_modified_since; ngx_table_elt_t *if_unmodified_since; ngx_table_elt_t *user_agent; ngx_table_elt_t *referer; ngx_table_elt_t *content_length; ngx_table_elt_t *content_type; ngx_table_elt_t *range; ngx_table_elt_t *if_range; ngx_table_elt_t *transfer_encoding; ngx_table_elt_t *expect; #if

HTTP访问控制(CORS)

岁酱吖の 提交于 2020-02-27 20:26:50
当一个资源从与该资源本身所在的服务器不同的域或端口请求一个资源时,资源会发起一个 跨域 HTTP 请求 。 比如,站点 http://domain-a.com 的某 HTML 页面通过 <img> 的 src 请求 http://domain-b.com/image.jpg。网络上的许多页面都会加载来自不同域的CSS样式表,图像和脚本等资源。 出于安全考虑,浏览器会限制从脚本内发起的跨域HTTP请求。例如, XMLHttpRequest 和 Fetch 遵循 同源策略 。因此,使用 XMLHttpRequest 或 Fetch 的Web应用程序只能将HTTP请求发送到其自己的域。为了改进Web应用程序,开发人员要求浏览器厂商允许跨域请求。 (译者注: 这段描述跨域不准确, 跨域并 非 不一定是浏览器限制了发起跨站请求, 而 也可能是跨站请求可以正常发起,但是返回结果被浏览器拦截了。最好的例子是 CSRF 跨站攻击原理,请求是发送到了后端服务器无论是否跨域!注意:有些浏览器不允许从 HTTPS 的域跨域访问 HTTP,比如 Chrome 和 Firefox,这些浏览器在请求还未发出的时候就会拦截请求,这是一个特例。) 跨域资源共享( CORS )机制允许 Web 应用服务器进行跨域访问控制,从而使跨域数据传输得以安全进行。浏览器支持在 API 容器中(例如

CORS讲解

馋奶兔 提交于 2020-02-27 20:13:36
跨域资源共享( CORS ) 是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器 不同的域、协议或端口 请求一个资源时,资源会发起一个 跨域 HTTP 请求 。 什么情况下需要 CORS ? XMLHttpRequest 或 Fetch 发起的跨域 HTTP 请求。 Web 字体 (CSS 中通过 @font-face 使用跨域字体资源), 因此,网站就可以发布 TrueType 字体资源,并只允许已授权网站进行跨站调用 。 WebGL 贴图 使用 drawImage 将 Images/video 画面绘制到 canvas 样式表(使用 CSSOM ) 功能概述 跨域资源共享标准新增了一组 HTTP 首部字段,允许服务器声明哪些源站通过浏览器有权限访问哪些资源。 另外,规范要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求), 浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求。 服务器确认允许之后,才发起实际的 HTTP 请求。 在预检请求的返回中

Nginx 中的两种限流方式

只谈情不闲聊 提交于 2020-02-27 16:05:12
系统设计时一般会预估负载,当系统暴露在公网中时,恶意攻击或正常突发流量等都可能导致系统被压垮,而限流就是保护措施之一。限流即控制流量,本文将记录 Nginx 的二种限流设置。 生活中的 “限流”? 限流并非新鲜事,在生活中亦无处不在,下面例举一二: 博物馆:限制每天参观总人数以保护文物 高铁安检:有若干安检口,旅客依次排队,工作人员根据安检快慢决定是否放人进去。遇到节假日,可以增加安检口来提高处理能力( 横向拓展 ),同时增加排队等待区长度( 缓存待处理任务 )。 办理银行业务:所有人先领号,各窗口叫号处理。每个窗口处理速度根据客户具体业务而定,所有人排队等待叫号即可。若快下班时,告知客户明日再来( 拒绝流量 )。 水坝泄洪:水坝可以通过闸门控制泄洪速度( 控制处理速度 )。 以上”限流”例子,可以让服务提供者稳定的服务客户。 Nginx 限流 Nginx 提供两种限流方式,一是控制速率,二是控制并发连接数。 控制速率 正常限流 ngx_http_limit_req_module 模块提供限制请求处理速率能力,使用了漏桶算法(leaky bucket)。下面例子使用 nginx limit_req_zone 和 limit_req 两个指令,限制单个IP的请求处理速率。 在 nginx.conf http 中添加限流配置: 格式:limit_req_zone key zone

HTTP小知识

余生颓废 提交于 2020-02-27 15:01:51
HTTP小知识 一、基础 1、简介 Hyper Text Transfer Protocol 超文本传输协议,指定客户端和服务器端通信时发送和接收数据的格式。基于TCP/IP的高级高级协议,默认端口号为80,一次请求对应一次响应,每次请求之间相互独立,不能交互数据。 2、传输协议 (1)tcp:安全协议,三次握手,确认数据不丢失,但速度稍慢 (2) udp:不安全协议,容易丢失数据,但速度快 3、数据格式 (1)请求行:GET/POST (2)请求头:客户端浏览器告诉服务器一些信息 User-Agent:浏览器版本信息 Referer:访问来源,用于防盗链或统计访问量 (3)请求空行:空行用于分割POST请求的请求头和请求体 (4)请求体(正文) 4、状态码 200 : 成功 400:客户端请求语法错误 403 : for bidden 服务器拒绝 404 : Not Found 500 : 服务器异常 503:当前服务器忙,一段时间后恢复 5、常用 Server: 服务器类型 Content-Type : 服务器返回给客户端的内容类型 Content-Length : 返回的数据长度 Date : 响应的时间 POST:数据是以流的方式写入 二、进阶 1、URL HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下: http:/

从Socket编程到Http协议,了解Tomcat底层,实现自己的HTTP服务器。

吃可爱长大的小学妹 提交于 2020-02-27 14:28:24
上节我们知道Tomcat里面的server里的service里的connector的endpoint部分作用在传输层,processor部分作用在应用层。 Web服务器 本文将介绍 Java Web 服务器是如何运行的, Web 服务器也称为超文本传输协议( HyperText Transfer Protocol, HTTP)服务器, 因为它使用 Http 协议与其客户端(通常是 Web 浏览器)进行通信, 基于 Java 的 Web 服务器会使用两个重要的类: java.net.Socket 类和 java.net.ServerSocket 类, 并通过发送 Http 消息进行通信. 我们先花一些篇幅介绍 Http 协议(如果同学们熟悉HTTP协议可直接跳过)和这两个类, 然后写一个简单的 Web 服务器。 Http协议 Http : Http 允许 Web 服务器和浏览器通过因特网发送并接受数据, 是一种基于”请求-响应”的协议, 客户端请求一个文件, 服务器端对该请求进行响应.。Http 使用可靠的 tcp 连接, 服务端默认端口为80, http协议的第一个版本是 http/0.9, 后来被 http/1.0取代, 随后 http/1.0又被http/1.1取代, http/1.1 定义域 RFC2616中。 在 Http 中, 总是由客户端通过建立连接并发送 http

http报文解析

五迷三道 提交于 2020-02-27 11:45:35
http报文结构 报文首部 起始行 请求报文的起始行: 方法(method) request-URL version(http协议版本) 响应报文的起始行 HTTP响应码 请求头 通用首部 请求首部 响应首部 内容首部 拓展首部 空行 报文主体(body) http请求过程 1.建立TCP连接 2.浏览器向服务器发送请求命令 3.web服务器应答 4.Web服务器关闭TCP连接 记录的比较散乱,这篇文章的思路写的很清晰,可以看这篇: http报文详解------klguang http报文结构 http报文主要包含三大部分 报文首部 空行 主体(body) http报文例子: GET / HTTP/1.1 Host: www.enjoytoday.cn Connection: keep-alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Referer: http:/

面试题——HTTP/HTTPS(待续)

我怕爱的太早我们不能终老 提交于 2020-02-27 08:42:11
说一下http协议(详细) 1.http协议的主要特点 简单快速 每个资源(比如图片、页面)都通过 url 来定位。这都是固定的,在http协议中,处理起来也比较简单,想访问什么资源,直接输入url即可。 灵活 http协议的头部有一个数据类型,通过http协议,就可以完成不同数据类型的传输。 无连接 连接一次,就会断开,不会继续保持连接。 无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。 无状态 客户端和服务器端是两种身份。第一次请求结束后,就断开了,第二次请求时,服务器端并没有记住之前的状态,也就是说,服务器端无法区分客户端是否为同一个人、同一个身份。 有的时候,我们访问网站时,网站能记住我们的账号,这个是通过其他的手段(比如 session)做到的,并不是http协议能做到的。 2.HTTP报文的组成部分 http报文包括: 请求报文 和 响应报文 。 https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=1384047457,2091490325&fm=173&app=25&f=JPEG?w=639&h=377&s=C900E413199EC4C858F581DA0000C0B2 请求报文包括:请求行(请求方法、请求url、http协议及版本)、请求头头、空行、请求体 请求行

jmeter 性能测试工具的使用(Web性能测试)

≡放荡痞女 提交于 2020-02-27 08:10:00
1、下载    http://pan.baidu.com/s/1o7p18Ye   该软件不用安装,直接解压打开即可使用。 2、使用   这里就在win下进行,图形界面较为方便   在目录apache-jmeter-2.13\bin 下可以见到一个jmeter.bat文件,双击此文件,即看到JMeter控制面板。主界面如下: 3、创建线程组   测试计划-->右键——》添加——》hreads——》线程组 设置循环的次数和并发的线程数量    3、添加http请求   创建你要测试的http请求的url信息   刚刚创建的线程租上右键——》添加——》Sampler——》HTTP请求 添加http请求相关信息和参数 4、添加查看结果的方式   这里有很多种查看结果的方式,结果数、表格、图像等,如下图所示:   这里我使用了查看结果树。 5、测试发送一个请求 6、动态参数   可以使用读取文件的方式,添加多个动态参数到测试中,jmeter会随机使用我们数据进行测试。    注意,必须保存为csv文件,而不是简单的修改文件的后缀名 。 文件内容:username.cvs   password.cvs   添加CSV默认值来源文件和变量值   在http请求中使用${变量名} 获得文件中的值   假如你喜欢界面简单的话可以使用ab性能测试,可查看: http://www.cnblogs