Phản hồi cho yêu cầu trước chuyến bay không vượt qua kiểm tra kiểm soát truy cập

500
Andre Mendes 2016-02-24 11:37.

Tôi gặp lỗi này khi sử dụng ngResource để gọi API REST trên Amazon Web Services:

XMLHttpRequest không thể tải http://server.apiurl.com:8000/s/login?login=facebook . Phản hồi cho yêu cầu preflight không vượt qua kiểm tra kiểm soát truy cập: Không có tiêu đề 'Access-Control-Allow-Origin' có trên tài nguyên được yêu cầu. Nguồn gốc ' http: // localhost ' do đó không được phép truy cập. Lỗi 405

Dịch vụ:

socialMarkt.factory('loginService', ['$resource', function($resource){    
    var apiAddress = "http://server.apiurl.com:8000/s/login/";
    return $resource(apiAddress, { login:"facebook", access_token: "@access_token" ,facebook_id: "@facebook_id" }, {
                getUser: {method:'POST'}
            });
}]);

Bộ điều khiển:

[...]
loginService.getUser(JSON.stringify(fbObj)),
                function(data){
                    console.log(data);
                },
                function(result) {
                    console.error('Error', result.status);
                }
[...]

Tôi đang sử dụng Chrome và tôi không biết phải làm gì khác để khắc phục sự cố này. Tôi thậm chí đã định cấu hình máy chủ để chấp nhận các tiêu đề từ nguồn gốc localhost.

19 answers

258
E. Maggini 2016-02-24 11:45.

Bạn đang gặp sự cố CORS.

Có một số cách để khắc phục / giải quyết vấn đề này.

  1. Tắt CORS. Ví dụ: Tắt chính sách nguồn gốc trong Chrome
  2. Sử dụng một plugin cho trình duyệt của bạn
  3. Sử dụng proxy như nginx. ví dụ về cách thiết lập
  4. Đi qua thiết lập cần thiết cho máy chủ của bạn. Đây là một yếu tố của máy chủ web mà bạn đã tải trên phiên bản EC2 của mình (giả sử đây là ý bạn muốn nói đến "dịch vụ web Amazon"). Đối với máy chủ cụ thể của bạn, bạn có thể tham khảo trang web kích hoạt CORS.

Nói chi tiết hơn, bạn đang cố gắng truy cập api.serverurl.com từ localhost. Đây là định nghĩa chính xác của yêu cầu tên miền chéo.

Bằng cách tắt nó đi chỉ để hoàn thành công việc của bạn (OK, đặt bảo mật kém cho bạn nếu bạn truy cập vào các trang web khác và chỉ có thể xảy ra lỗi), bạn có thể sử dụng proxy làm cho trình duyệt của bạn nghĩ rằng tất cả các yêu cầu đến từ máy chủ cục bộ khi thực sự bạn có máy chủ cục bộ sau đó gọi máy chủ từ xa.

do đó api.serverurl.com có ​​thể trở thành localhost: 8000 / api và nginx cục bộ của bạn hoặc proxy khác sẽ gửi đến đúng đích.


Bây giờ theo nhu cầu phổ biến, 100% thông tin CORS khác .... cùng hương vị tuyệt vời!


Và đối với những người phản đối .... bỏ qua CORS chính xác là những gì được hiển thị cho những người chỉ đơn giản là học giao diện người dùng. https://codecraft.tv/courses/angular/http/http-with-promises/

178
Slipstream 2016-04-06 23:08.

"Máy chủ API" của tôi là một Ứng dụng PHP, vì vậy để giải quyết vấn đề này, tôi đã tìm thấy giải pháp dưới đây để hoạt động:

Đặt các dòng trong index.php

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');
49
Rajkumar Peter 2017-05-06 05:49.

Trong api web AspNetCore, vấn đề này đã được khắc phục bằng cách thêm "Microsoft.AspNetCore.Cors" (phiên bản 1.1.1) và thêm các thay đổi bên dưới trên Startup.cs.

public void ConfigureServices(IServiceCollection services)
{ 
    services.AddCors(options =>
    {
          options.AddPolicy("AllowAllHeaders",
                builder =>
            {
                    builder.AllowAnyOrigin()
                           .AllowAnyHeader()
                           .AllowAnyMethod();
                });
    });
    .
    .
    .
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{


    // Shows UseCors with named policy.
    app.UseCors("AllowAllHeaders");
    .
    .
    .
}

và đặt [EnableCors("AllowAllHeaders")]trên bộ điều khiển.

36
Sasa Blagojevic 2018-10-23 09:45.

Có một số lưu ý khi nói đến CORS. Đầu tiên, nó không cho phép ký tự đại diện *nhưng không giữ tôi trên cái này. Tôi đã đọc nó ở đâu đó và tôi không thể tìm thấy bài viết bây giờ.

Nếu bạn đang thực hiện yêu cầu từ một miền khác, bạn cần thêm tiêu đề nguồn gốc cho phép.

 Access-Control-Allow-Origin: www.other.com 

Nếu bạn đang làm cho các yêu cầu có ảnh hưởng đến tài nguyên máy chủ như POST / PUT / PATCH, và nếu loại mime khác với những điều sau đây application/x-www-form-urlencoded, multipart/form-datahoặc text/plaintrình duyệt sẽ tự động tạo ra một OPTIONS trước chuyến bay yêu cầu kiểm tra với máy chủ nếu nó sẽ cho phép nó .

Vì vậy, API / máy chủ của bạn cần phải xử lý các yêu cầu TÙY CHỌN này cho phù hợp, bạn cần phản hồi với access control headersmã trạng thái phản hồi http thích hợp và cần phải như vậy 200.

Các tiêu đề phải giống như thế này, hãy điều chỉnh chúng theo nhu cầu của bạn:

   Access-Control-Allow-Methods: GET, POST, PUT, PATCH, POST, DELETE, OPTIONS
   Access-Control-Allow-Headers: Content-Type
   Access-Control-Max-Age: 86400

Trong trường hợp của tôi, tiêu đề max-age rất quan trọng, nó sẽ không hoạt động nếu không có nó, tôi đoán trình duyệt cần thông tin để biết "quyền truy cập" còn hiệu lực trong bao lâu.

Ngoài ra, nếu bạn đang thực hiện, ví dụ: một POSTyêu cầu với application/jsonkịch câm từ một miền khác, bạn cũng cần thêm tiêu đề gốc cho phép đã đề cập trước đó, vì vậy nó sẽ giống như sau:

   Access-Control-Allow-Origin: www.other.com 
   Access-Control-Allow-Methods: GET, POST, PUT, PATCH, POST, DELETE, OPTIONS
   Access-Control-Allow-Headers: Content-Type
   Access-Control-Max-Age: 86400

Khi chuyến bay trước thành công và nhận được tất cả thông tin cần thiết, yêu cầu thực sự của bạn sẽ được thực hiện.

Nói chung, bất kỳ Access-Controltiêu đề nào được yêu cầu trong yêu cầu ban đầu hoặc trước chuyến bay, cần được đưa ra trong phản hồi để nó hoạt động.

Có một ví dụ điển hình trong tài liệu MDN ở đây trên liên kết này và bạn cũng nên xem bài đăng SO này

15
Tadej 2017-03-30 21:06.

JavaScript XMLHttpRequestTìm nạp tuân theo chính sách nguồn gốc giống nhau. Vì vậy, một ứng dụng web sử dụng XMLHttpRequest hoặc Fetch chỉ có thể thực hiện các yêu cầu HTTP đến miền riêng của nó.

Nguồn: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

Bạn phải gửi tiêu đề Access-Control-Allow-Origin: * HTTP từ phía máy chủ của bạn.

Nếu bạn đang sử dụng Apache làm máy chủ HTTP thì bạn có thể thêm nó vào tệp cấu hình Apache của mình như sau:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

Mod_headers được bật theo mặc định trong Apache, tuy nhiên, bạn có thể muốn đảm bảo rằng nó được bật bằng cách chạy:

 a2enmod headers
11
freedev 2017-06-21 21:59.

Nếu bạn đang viết một tiện ích mở rộng chrome

Bạn phải thêm manifest.jsoncác quyền cho (các) miền của mình.

"permissions": [
   "http://example.com/*",
   "https://example.com/*"
]
8
Sunil Kumar 2017-09-09 10:19.

Nếu bạn đang sử dụng máy chủ IIS một cách tình cờ. bạn có thể đặt tiêu đề bên dưới trong tùy chọn tiêu đề yêu cầu HTTP.

Access-Control-Allow-Origin:*
Access-Control-Allow-Methods: 'HEAD, GET, POST, PUT, PATCH, DELETE'
Access-Control-Allow-Headers: 'Origin, Content-Type, X-Auth-Token';

với tất cả bài đăng này, nhận được, v.v., sẽ hoạt động tốt.

7
Rohit Parte 2018-10-13 05:06.

Để khắc phục sự cố yêu cầu gốc chéo trong ứng dụng Node JS:

npm i cors

Và chỉ cần thêm các dòng bên dưới vào app.js

let cors = require('cors')
app.use(cors())
6
atiruz 2017-12-22 04:33.

Trong PHP, bạn có thể thêm các tiêu đề:

<?php
header ("Access-Control-Allow-Origin: *");
header ("Access-Control-Expose-Headers: Content-Length, X-JSON");
header ("Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS");
header ("Access-Control-Allow-Headers: *");
...
5
Teriblus 2016-08-26 02:19.

Đối với máy chủ flask python, bạn có thể sử dụng plugin flask-cors để kích hoạt các yêu cầu tên miền chéo.

Xem: https://flask-cors.readthedocs.io/en/latest/

4
w00ngy 2018-12-21 10:33.

Nhóm của chúng tôi thỉnh thoảng thấy điều này bằng cách sử dụng Vue, axios và C # WebApi. Việc thêm thuộc tính tuyến đường vào điểm cuối mà bạn đang cố gắng thực hiện sẽ sửa lỗi đó cho chúng tôi.

[Route("ControllerName/Endpoint")]
[HttpOptions, HttpPost]
public IHttpActionResult Endpoint() { }
3
hugsbrugs 2017-01-12 02:00.

Trong tệp cấu hình Apache VirtualHost của tôi, tôi đã thêm các dòng sau:

Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Max-Age "1000"
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"

RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
3
Xu Chen 2017-12-08 14:43.

Đối với những người đang sử dụng Lambda Integrated Proxy với API Gateway . Bạn cần định cấu hình hàm lambda của mình như thể bạn đang gửi trực tiếp các yêu cầu của mình đến nó, có nghĩa là hàm phải thiết lập đúng tiêu đề phản hồi. (Nếu bạn đang sử dụng các hàm lambda tùy chỉnh, điều này sẽ do API Gateway xử lý.)

//In your lambda's index.handler():
exports.handler = (event, context, callback) => {
     //on success:
     callback(null, {
           statusCode: 200,
           headers: {
                "Access-Control-Allow-Origin" : "*"
           }
     }
}
3
Shubham Pandey 2018-04-19 01:59.

Tôi nghĩ rằng vô hiệu hóa CORS từ Chrome không phải là cách tốt , bởi vì nếu bạn đang sử dụng nó ở dạng ion, chắc chắn trong Bản dựng dành cho thiết bị di động, vấn đề sẽ lại tăng lên.

Vì vậy, tốt hơn để sửa chữa trong chương trình phụ trợ của bạn.

Trước hết Trong tiêu đề, bạn cần đặt-

  • header ('Access-Control-Allow-Origin: *');
  • header ('Header set Access-Control-Allow-Headers: "Origin, X-Request-With, Content-Type, Accept");

Và nếu API đang hoạt động như GET và POST cả hai thì cũng Đặt trong tiêu đề của bạn-

tiêu đề if ($ _SERVER ['REQUEST_METHOD'] == 'OPTIONS') {if (Isset ($ _ SERVER ['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))) ("Access-Control-Allow-Method: GET, POST, OPTIONS");
if (Isset ($ _ SERVER ['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))) tiêu đề ("Access-Control-Allow-Headers:
{$ _SERVER ['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); thoát ra (0); }

2
Christian Nwafor 2018-09-30 02:40.

Nguyên nhân rất phổ biến của lỗi này có thể là do API máy chủ đã ánh xạ yêu cầu tới một phương thức http (ví dụ: PUT) và máy khách API đang gọi API bằng một phương thức http khác (ví dụ: POST hoặc GET)

1
Kirill Gusyatin 2016-12-16 03:13.

Tôi đã gặp phải sự cố này khi máy chủ DNS được đặt thành 8.8.8.8 (của google). Trên thực tế, vấn đề là ở bộ định tuyến, ứng dụng của tôi đã cố gắng kết nối với máy chủ thông qua google, không phải cục bộ (đối với trường hợp cụ thể của tôi). Tôi đã xóa 8.8.8.8 và điều này đã giải quyết được vấn đề. Tôi biết rằng vấn đề này đã được giải quyết bằng cài đặt CORS, nhưng có thể ai đó sẽ gặp rắc rối như tôi

1
davyCode 2018-09-08 01:18.

Tôi đang sử dụng AWS sdk để tải lên, sau một thời gian tìm kiếm trực tuyến, tôi tình cờ tìm thấy chủ đề này. nhờ @lsimoneau 45581857 hóa ra điều tương tự đã xảy ra. Tôi chỉ đơn giản là trỏ Url yêu cầu của mình đến vùng trên nhóm của tôi bằng cách đính kèm tùy chọn vùng và nó đã hoạt động.

 const s3 = new AWS.S3({
 accessKeyId: config.awsAccessKeyID,
 secretAccessKey: config.awsSecretAccessKey,
 region: 'eu-west-2'  // add region here });
0
Yassine Ech-Charafi 2018-01-05 05:07.

Các bản phân phối độc lập của GeoServer bao gồm máy chủ ứng dụng Jetty. Bật Chia sẻ Tài nguyên Nhiều Nguồn gốc (CORS) để cho phép các ứng dụng JavaScript bên ngoài miền của riêng bạn sử dụng GeoServer.

Bỏ ghi chú sau <filter><filter-mapping>khỏi webapps / geoserver / WEB-INF / web.xml:

<web-app>
  <filter>
      <filter-name>cross-origin</filter-name>
      <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>cross-origin</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>
0
Rahul sah 2019-11-11 09:16.

Thật dễ dàng để giải quyết vấn đề này chỉ với vài bước một cách dễ dàng mà không phải lo lắng về bất cứ điều gì. Vui lòng làm theo các bước để giải quyết nó.

  1. mở ( https://www.npmjs.com/package/cors#enabling-cors-pre-flight )
  2. đi đến cài đặt và sao chép lệnh npm install cors để cài đặt thông qua thiết bị đầu cuối nút
  3. chuyển đến Sử dụng đơn giản (Bật tất cả yêu cầu CORS) bằng cách cuộn. sau đó sao chép và dán tuyên bố đầy đủ trong dự án của bạn và chạy nó ... chắc chắn sẽ hoạt động .. sao chép mã nhận xét và dán vào app.js của bạn hoặc bất kỳ thứ gì khác dự án và thử .. điều này sẽ hoạt động. điều này sẽ mở khóa mọi chia sẻ tài nguyên nguồn gốc chéo..vì vậy chúng tôi có thể chuyển đổi giữa các lần phục vụ để bạn sử dụng

Related questions

MORE COOL STUFF

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett đã bất chấp những lời khuyên hẹn hò điển hình khi cô gặp chồng mình.

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Michael Sheen là một diễn viên phi lợi nhuận nhưng chính xác thì điều đó có nghĩa là gì?

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Ngôi sao của Hallmark Colin Egglesfield chia sẻ về những cuộc gặp gỡ với người hâm mộ ly kỳ tại RomaDrama Live! cộng với chương trình INSPIRE của anh ấy tại đại hội.

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Bạn sẽ phải phủi sạch đầu đĩa Blu-ray hoặc DVD để xem tại sao Northern Exposure trở thành một trong những chương trình nổi tiếng nhất của thập niên 90.

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

8 công dụng tuyệt vời của Baking Soda và Giấm

8 công dụng tuyệt vời của Baking Soda và Giấm

Bạn biết đấy, hai sản phẩm này là nguồn điện để làm sạch, riêng chúng. Nhưng cùng với nhau, chúng có một loạt công dụng hoàn toàn khác.

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Thủy điện rất cần thiết cho lưới điện của Hoa Kỳ, nhưng nó chỉ tạo ra năng lượng khi có nước di chuyển. Bao nhiêu nhà máy thủy điện có thể gặp nguy hiểm khi các hồ và sông cạn kiệt?

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Tóc tỉa từ các tiệm và các khoản quyên góp cá nhân có thể được tái sử dụng như những tấm thảm thấm dầu và giúp bảo vệ môi trường.

Một thương hiệu kế thừa khác có được cuộc sống mới khi những người chủ mới của Black Opal có được Hội chợ thời trang

Một thương hiệu kế thừa khác có được cuộc sống mới khi những người chủ mới của Black Opal có được Hội chợ thời trang

Desiree Rogers, trái, và Cheryl Mayberry McKissack Chuyển sang, Fenty Beauty và Pat McGrath, có một đế chế làm đẹp mới do phụ nữ làm chủ đang trỗi dậy. Sau thương vụ mua lại mỹ phẩm Black Opal vào tháng 9, đội ngũ quyền lực của Giám đốc điều hành công ty Desiree Rogers và Chủ tịch Cheryl Mayberry McKissack đã thông báo mua lại thương hiệu làm đẹp tiên phong Fashion Fair từ người sáng lập Johnson Publishing Company (JPC).

Ngoài việc trở nên vô nghĩa, các bên bộc lộ giới tính giờ đây đã trở nên chết người

Ngoài việc trở nên vô nghĩa, các bên bộc lộ giới tính giờ đây đã trở nên chết người

Đối với những người có quá nhiều thời gian, tiệc tiết lộ giới tính là một cách thú vị để không cần áp đặt những định kiến ​​hạn chế lên thai nhi trước một đối tượng bạn bè giả vờ quan tâm một cách lịch sự. Tuy nhiên, việc chỉ dựa vào những chiếc bánh nướng có màu nhân tạo để biểu thị một tiếng hoo-ha hoặc một đứa trẻ đi tè đã trở nên xa xỉ trong các bậc cha mẹ trên Instagram.

Kirstjen Nielsen đang cố gắng đổi mới bản thân với tư cách là một người phụ nữ 'nói ra sự thật cho sức mạnh'

Kirstjen Nielsen đang cố gắng đổi mới bản thân với tư cách là một người phụ nữ 'nói ra sự thật cho sức mạnh'

Hôm thứ Tư, cựu Bộ trưởng An ninh Nội địa Kirstjen Nielsen vì một lý do nào đó đã được đưa ra một diễn đàn để phát biểu tại Hội nghị thượng đỉnh Những người phụ nữ quyền lực nhất của Fortune. Và có thể đoán trước được, người phụ nữ giám sát các nỗ lực (đang diễn ra) của chính quyền Trump nhằm chia cắt các gia đình ở biên giới đã sử dụng thời gian của mình như một cơ hội để tự bảo vệ mình và tự nhận mình là người — và hãy hít thở sâu ở đây — “đã nói sự thật với quyền lực.

Toyota Racing Development sẽ cho ra mắt Supra 3000GT Concept, Massive Wing vào tháng tới

Toyota Racing Development sẽ cho ra mắt Supra 3000GT Concept, Massive Wing vào tháng tới

Vì thế hệ mới nhất của chiếc xe điều chỉnh được yêu thích trên thế giới hiện đã có mặt tại đây, nên chỉ có điều kiện là Toyota Racing Development sẽ đưa phiên bản Supra thế hệ thứ năm sửa đổi của riêng mình đến SEMA vào tháng tới. Toyota đã cho chúng tôi một gợi ý về những gì sẽ xảy ra trong tuần này: một chiếc Concept GR Supra 3000GT hiện đại.

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa. Từ Hollywood đến New York và mọi nơi ở giữa, hãy xem các ngôi sao yêu thích của bạn đang làm gì!

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

Các nhà điều tra đang xem xét liệu nhóm và nghi phạm có biết nhau trước vụ tấn công hay không

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Vụ kiện, nêu tên một số học khu, lập luận rằng dự luật "Không nói đồng tính" được ban hành gần đây của Florida "có hiệu quả im lặng và xóa bỏ học sinh và gia đình LGBTQ +"

Đường băng hạ cánh

Đường băng hạ cánh

Cuối hè đầu thu là mùa hoài niệm. Những chiếc đèn đường chiếu ánh sáng của chúng qua những con đường đẫm mưa, và những chiếc lá dưới chân - màu đỏ cam tắt trong bóng chạng vạng - là lời nhắc nhở về những ngày đã qua.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Vào năm 2021, tôi khuyến khích bạn suy nghĩ lại mọi thứ bạn biết về khách hàng mà bạn phục vụ và những câu chuyện bạn kể cho họ. Lùi lại.

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Vào ngày sinh nhật thứ 9 của Felix The Cat, tôi nhớ về một trong những mất mát lớn nhất trong cuộc đời trưởng thành của tôi - Sophie của tôi vào năm 2013. Tôi đã viết bài luận này và chia sẻ nó trên nền tảng này một thời gian ngắn vào năm 2013.

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Tôi ghét từ "tàu đắm". Mọi người cảm thấy thoải mái trong la bàn đạo đức của riêng mình, và khi làm như vậy, họ thấy mình vượt qua sự phán xét.

Language